2012-12-08 79 views
-1

WM_INITDIALOG和WM_NOTIFY代碼段。如何在Tab控件中顯示子對話框?

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; 
        } 
       } 
      } 

我試過這樣,它沒有顯示出來。它覆蓋了一個選項卡邊框,因此它應該存在,但它在窗體控件上不可見。

以下是截圖:http://puu.sh/1yt1b

編輯:它的工作原理,但位置錯了,我應該手動設置的位置?

回答

0

我只需要使用SetWindowPos()來設置我的無模式對話框的當前位置。

0

而不是使用SetWindowPos,這將使您支付運行時成本,您應該定義資源文件中控件的初始x/y偏移量。您正在使用的資源編輯器應該允許這樣做。