2011-07-06 6 views
0

기존 대화 상자에서 하위 대화 상자를 만들려면 어떻게해야합니까?기존 대화 (Windows 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)이지만 아무 일도 발생하지 않았습니다. About 대화 상자를 만들려면 어떻게해야합니까?

편집

대화에 대해 지금 당장 poped 할 수 있습니다. 대화 상자가 전에 팝업 될 수없는 이유는 내가 MFC 링크 대화 상자를 제어하기 때문입니다. 내 win32 SDK 응용 프로그램은 MFC를 지원하지 않으므로 실패했습니다. LOL.

답변

2

DialogBox 호출에서 사용중인 hInst을 초기화하지 않으면 대화 리소스를 찾을 수 없어 호출이 실패합니다. 이런 오류를 추적 할 때 시스템 호출의 반환 값을 확인해야합니다.

0

코드는 hwnd을 선언하거나 초기화하지 않지만 대화 상자와 about 상자의 부모로 코드를 전달합니다. 후자의 경우 about 상자가 기본 대화 상자의 모달이되도록 hWndDlg을 전달하려고합니다.

+0

hWnd 전역 범위에서 delcared, About 대화 상자의 프로 시저에 hWndDlg 전달 여전히 대화 상자를 열 수 없습니다. – tunpishuang

+0

Mark Ransom의 답변도 시도해 봤습니까? hinstance의 전체 복사본을 초기화하는 것처럼 보이지 않으므로 대화 상자 리소스를 찾지 못할 가능성이 있습니다. (나는 대화 procs가 WM_CREATE를 얻지 않는다고 생각한다.) 부모님을 위해 오른쪽 창 핸들을 사용하면 그 문제를 해결할 수있다. –

+0

질문이 해결되었습니다. ** 수정 ** 섹션에서 도움을 주신 이유를 알려 주셨습니다. – tunpishuang

관련 문제