WM_CTLCOLORSTATIC メッセージをオーバーライドしていません。ソース コードにはこの文字列はなく、メッセージ ハンドラにも同様のものはありません。
この問題は、タブ コントロールの WM_DRAWITEM メッセージをオーバーライドして、白い背景 (タブ コントロールのコンテンツの標準) ではなく灰色の背景 (タブ コントロールのないダイアログ ボックスの標準) でコンテンツを描画することで回避しました。
brush = CreateSolidBrush(GetSysColor(COLOR_MENU));
FillRect(lpdis->hDC, &lpdis->rcItem, brush);
SetBkColor(lpdis->hDC, GetSysColor(COLOR_MENU));
wtext = ToWideStrdup(c->u.tabcontrol.Tabs[lpdis->itemID].name);
rect = lpdis->rcItem;
rect.top += DlgMarginY - 1;
rect.bottom += DlgMarginY;
DrawTextW(lpdis->hDC, wtext, -1, &rect, DT_CENTER | DT_VCENTER);
free(wtext);
DeleteObject(brush);
これは明らかに回避策であり、私の質問に対する適切な回答ではありません。
ちなみに、このようなコードを使用して、タブコントロールがその1つであると思われる「共通コントロール」を初期化します...これは問題に関連しているとは思いませんか?
#pragma comment(linker, "/manifestdependency:\"type='win32' " \
"name='Microsoft.Windows.Common-Controls' " \
"version='6.0.0.0' " \
"processorArchitecture='*' " \
"publicKeyToken='6595b64144ccf1df' " \
"language='*'\"")
...
hCommCtrl = GetModuleHandle("comctl32.dll");`
if (hCommCtrl) {
ptrInit = (TfcInit_fn) GetProcAddress(hCommCtrl, "InitCommonControlsEx");
if (ptrInit) {
data.dwSize = sizeof(INITCOMMONCONTROLSEX);
data.dwICC = ctrlClass;
if (ptrInit(&data) )
gCommCtrlsInitialized |= ICC_TAB_CLASSES | ICC_BAR_CLASSES;
}
}