-1

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

編集: 動作しますが、位置が間違っています。手動で位置を設定する必要がありますか?

4

2 に答える 2

0

SetWindowPosランタイム コストがかかる を使用するのではなく、リソース ファイル内でコントロールの初期 x/y オフセットを定義する必要があります。使用しているリソース エディタでこれが許可されている必要があります。

于 2012-12-09T00:18:29.600 に答える
0

SetWindowPos() を使用して、モードレス ダイアログの現在の位置を設定する必要がありました。

于 2012-12-08T20:27:59.607 に答える