2011-07-06 119 views
0

如何從現有對話框創建子對話框?如何從現有對話框(窗口API)創建子對話框?

宣言(全球範圍)

HINSTANCE hInst; 
HWND hWnd; 

WinMain

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
         LPSTR lpCmdLine, int nCmdShow) 
{ 
    DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN),hWnd, (DLGPROC)DlgProc); 
    //MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0); 
    return 0; 
} 

DlgProc

LRESULT CALLBACK DlgProc(HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch(Msg) 
    { 
    case WM_COMMAND: 
      switch(LOWORD(wParam)) 
      { 
      case IDM_ABOUT: 
       //DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUT),hWnd, (DLGPROC)AboutDlgProc); 
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUT),hWndDlg, (DLGPROC)AboutDlgProc); //changed to this... 
       return 0; 
      } 
      break; 
    } 
} 

AboutDlgProc

BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message, 
    WPARAM wParam, LPARAM lParam) 
{ 
    switch (message) 
    { 
    case WM_CREATE: 
     hInst = ((LPCREATESTRUCT) lParam)->hInstance ; 
     return 0; 
    case WM_INITDIALOG : 
     ShowWindow (hDlg, SW_HIDE); 
     return TRUE ; 

    case WM_COMMAND : 
     switch (LOWORD (wParam)) 
     { 
     case IDOK : 
     case IDCANCEL : 
      EndDialog (hDlg, 0) ; 
      return TRUE ; 
     } 
     break ; 
    } 
    return FALSE ; 
} 

當我點擊一個名爲的菜單項時關於(IDM_ABOUT),但什麼也沒有發生。 那麼如何創建一個關於對話框?

編輯

關於對話框現在可以POP操作了。之前關於對話框無法拖出來的原因是我拖動了一個MFC鏈接控制對話框。由於我的win32 sdk應用程序不支持MFC,所以它失敗了。大聲笑 。

回答

2

如果您沒有初始化您在撥打DialogBox時使用的hInst,則由於無法找到對話資源,調用將失敗。在追蹤這類錯誤時,您應該檢查系統調用的返回值。

0

您的代碼沒有聲明或初始化hwnd,但它將它作爲父對象傳遞給對話框和about框。在後一種情況下,您可能想要通過hWndDlg以使about框對主對話框是模態的。

+0

hWnd在全局範圍內顯示,通過hWndDlg到About對話框的程序仍然無法打開About對話框。 – tunpishuang

+0

你也試過Mark Ransom的回答嗎?它看起來並不像您正在初始化您的全球副本,因此可能無法找到對話資源。 (我不認爲對話框過程得到WM_CREATE。)這加上使用正確的父窗口應該解決問題。 –

+0

問題已解決,我已在**編輯**部分給出原因,感謝您的幫助。 – tunpishuang

相關問題