2012-07-03 4 views
0

방금 ​​간단한 C++ 창을 만들고 메뉴를 추가했지만 메뉴를 클릭하면 구체적으로 "About"은 MessageBox 만 표시하려고하지만 할 수 없습니다. 왜냐하면 그것은 보여주지 않기 때문입니다. 클릭 할 때 MessageBox 표시

LPCWSTR App_Name = TEXT("TestApp"); 
LPCWSTR App_Title = TEXT("TestTitle"); 

const int windowWidth = 480; 
const int windowHeight = 480; 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow) 
{ 
    WNDCLASS wc; 
    wc.cbClsExtra = 0; 
    wc.cbWndExtra = 0; 
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 
    wc.hCursor = LoadCursor(NULL, IDC_ARROW); 
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
    wc.hInstance = hInstance; 
    wc.lpfnWndProc = WndProc; 
    wc.lpszClassName = App_Name; 
    wc.lpszMenuName = MAKEINTRESOURCE(MNU_MAINMENU); 
    wc.style = CS_HREDRAW | CS_VREDRAW; 

    RegisterClass(&wc); 

    RECT rc; 
    GetWindowRect(GetDesktopWindow(), &rc); 

    long screenWidth = rc.right; 
    long screenHeight = rc.bottom; 

    HWND hwnd = CreateWindow 
    (
     App_Name, 
     App_Title, 
     WS_MINIMIZEBOX | WS_SYSMENU, 
     (screenWidth/2) - (windowWidth/2), (screenHeight/2)-(windowHeight/2), 
     windowWidth, windowHeight, 
     NULL, NULL, 
     hInstance, NULL 
    ); 


    ShowWindow(hwnd, iCmdShow); 
    UpdateWindow(hwnd); 

    MSG msg; 

    while(GetMessage(&msg, NULL, 0, 0)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 

    return msg.wParam; 
} 

및 메시지 박스

... : 나는 종료하고 추가 한 원인

LRESULT CALLBACK WndProc(HWND hwnd,UINT message, WPARAM wparam, LPARAM lparam) 
{ 
     switch(message) 
     { 

     case WM_COMMAND: 
      id = LOWORD(wparam); 
      event = LOWORD(wparam); 
      switch(id) 
      { 
       case MNU_HELP_ABOUT: 
       MessageBox(NULL, TEXT("TEXT"), TEXT("TITLE"), MB_OK | MB_ICONINFORMATION); 
       break; 
      } 
     break; 

     } 
} 

메뉴가 작동 나는 그것이 메뉴에서 클릭에 응답 알고 있지만, 그래서 그런 내가 소개를 클릭하면 버튼을 누르면 팝업 소리가 들리지만 MessageBox는 표시되지 않습니다.

아이디어가 있으십니까?

답변

0

나는 그것을 어떻게 든 이해했다. 문제는 내가 WM_CREATE에서 아무것도하지 않았거나 "아무것도 없다"라는 것이 양식 (흰색 배경)에 있었기 때문입니다. 창에 컨트롤 (버튼)을 추가하자마자 갑자기 이전에 없었던 부분이 나타납니다. 그냥 이상한 ...

1

MessageBox의 첫 번째 매개 변수는 부모의 hWnd입니다. MessageBox 호출은 동기식이므로 사용자가 [확인] 단추를 클릭 할 때까지 컨트롤이 WndProc로 반환되지 않습니다. (그러므로 당신의 창은 응답이 없습니다.) 당신은 부모 hWnd를 제공하지 않았기 때문에, 메시지 상자가 아래에 창문 아래에 생성되었을 수 있습니다.

hwnd를 첫 번째 MessageBox 매개 변수로 전달하고 도움이되는지 확인해보십시오.

+0

이미 그 결과를 시도했습니다. 기본적으로 마지막 테스트 만 했었습니다. 그래서 ... – Deukalion

+0

OK. SpyXX (여전히 존재한다고 가정)를 실행하고 창 목록에서 메시지 상자를 찾을 수 있는지 확인하십시오. – RobH

+0

아, 로그 메시지 나 유사한 것을 출력하여 MessageBox에 대한 호출이 실제로 이루어 졌는지 확인하십시오. – RobH

관련 문제