WM_INITDIALOG および WM_NOTIFY コード セクション。
HWND hTabCtrl = nullptr;
HWND hCurrentTab = nullptr;
HWND hTab1 = nullptr;
LRESULT CALLBACK WINPROC(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
hTabCtrl = GetDlgItem(hWnd, IDC_TAB1);
g_hWnd = hWnd;
ShowWindow(hTab1, SW_SHOW);
switch(uMsg)
{
case WM_INITDIALOG:
{
//hInstance = 0; // Useless?
INITCOMMONCONTROLSEX ix;
ix.dwSize = sizeof(INITCOMMONCONTROLSEX);
ix.dwICC = ICC_TAB_CLASSES|ICC_UPDOWN_CLASS;
InitCommonControlsEx(&ix);
//ShowWindow(hTabCtrl, SW_SHOW);
TCITEM ti;
memset(&ti, 0, sizeof(ti));
ti.mask = TCIF_TEXT;
ti.pszText = L"Basic Options";
ti.cchTextMax = 255;
TabCtrl_InsertItem(hTabCtrl,0,&ti); //
ti.pszText = L"Antis";
TabCtrl_InsertItem(hTabCtrl,1,&ti);
TabCtrl_SetCurSel(hTabCtrl,0);
hTab1 = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DLG2), /*handle of the tab control*/ hTabCtrl, (DLGPROC)GeneralDlgPrc);
break;
}
// Macro so you don't need the crazy styled cast.
case WM_NOTIFY:
{
switch( ( ( LPNMHDR ) lParam) -> code )
{
case TCN_SELCHANGE:
{
if( TabCtrl_GetCurSel( ( ( LPNMHDR ) lParam) -> hwndFrom ) == 0 )
{
ShowWindow( hTab1, SW_SHOW );
}
else
{
}
break;
}
}
}
そのように試してみましたが、表示されません。タブ境界の 1 つをオーバーレイするため、存在するはずですが、フォーム コントロールには表示されません。
スクリーンショットは次のとおりです: http://puu.sh/1yt1b
編集: 動作しますが、位置が間違っています。手動で位置を設定する必要がありますか?