VisualStudio2012 (VS2012) C++ MFC
今時ではないが、昔作ったMFCを再コンパイルしたら、ダメじゃん。
MFCのタブコントロールはそのままでは背景が白なので、コントロールを並べると奇妙な感じになる。これの背景色を普通の灰色に戻したい。Theme系のAPIを使っていたのだが、XP専用のようで、サポートされなくなってしまって、VS2012で再コンパイルするとサポート外でコンパイルエラーになってしまう。よって、Theme系コーディングを削除した結果がこの通り。格好悪い。
CTabCtrl これのMFCの作り込みがおかしいんじゃないのかな。一貫性が無いのはタブコントロールがMFCのコントロールではなくVB用のコントロール?かな。愚痴は一杯あるんだ。それでもMFCのサポートをやめないでいる(現時点では嘘をついていない)ところだけは認めてあげたい。
グーグル先生の指示ではオーナードローで回避するようにということなので、以下の通り。
まず、ダイアログ編集画面でタブコントロール(例:IDC_TAB1)のプロパティの OwnerDrawFixed を Trueにする。
ダイアログメンバーにブラシを作っておく。クラスメンバー CBrush m_brGr;で構わない。コンストラクタで作っておく。
...コンストラクタ.... |
ダイアログのクラスウィザードを開いて、メッセージのWM_DRAWITEMのハンドラ作成を指示するとOnDrawItem()が出来る。
.hヘッダーファイルには、クラスウィザードにより .cppファイルには、メッセージ振り分け BEGIN_MESSAGE_MAP(CSampleDlg, CDialog)
CTabCtrl *pTabCtrl = (CTabCtrl *)GetDlgItem(IDC_TAB1); tci.mask = TCIF_TEXT; pTabCtrl->GetItem(lpdis->itemID, &tci); CDC *dc = CDC::FromHandle(lpdis->hDC); dc->FillRect(&lpdis->rcItem, cbr); |
ま、こんなところだろう。無駄なコーディングはパクリ元と比較してもらうとわかります。面倒な削除はしていません。描画文字は中央描画にしておいた。ほぼパクリだから、パクリ元を見た方が簡単かもしれましぇん。ごめんなさい。
参考(ほぼ以下のサイトのパクリです)
MSDN タブコントロールの背景色の指定(サンプルコードにバグがあるよね。)
http://support.microsoft.com/kb/179909/en-us
ダイアログの背景色取り出し
http://isobe.exblog.jp/2465331/
0 件のコメント:
コメントを投稿