VS 2015 を使用しています。ダイアログ ベースのアプリ (PropertySheet ではありません) があり、特定のタブを無効にしたい CTabCtrl 派生オブジェクトがあります。私がグーグルで調べたところ、オーナードローが道です。わかりました。
私がやりたいのは、所有者が描いたバージョンとまったく同じように機能する所有者が描いたバージョンから始めて、さまざまな調整を開始して実験することです。たとえば、次のようなものを使用したい
void CTabControl::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )
{
CTabCtrl::DrawItem( lpDrawItemStruct ); // do exactly what unmodified does
}
そのため、基本的に、変更されていない CTabCtrl が描画を完了するために行うすべてのことを呼び出しています。最も単純な出発点でも役立ちます。これを行うには、どのルーチンをオーバーライドまたはインターセプトする必要がありますか?
私は PreSubclassWindow() で TCS_OWNERDRAWFIXED を設定し、上で示したこと、および他の 1 つまたは 2 つのことを行っていますが、結果はまったく同じに見えません。1 つには、タブにテキストがありません。
どこから始めるべきかについての指針を得ることができれば、本当にうれしいです。ところで、私はこのように(ダイアログリソースなしで)プログラムでコントロールを作成しています(CTabControlはCTabCtrlから継承しています):
MyDlg::OnInitDialog()
{
...
m_tabctrl = new CTabControl();
m_tabctrl->Create( TCS_TABS | TCS_BOTTOM | TCS_HOTTRACK | TCS_FIXEDWIDTH | WS_CHILD | WS_VISIBLE, dummyRect, this, ID_TABCTRL );
...
}