2012-07-03 2 views
0

Я только что сделал простое окно C++ и добавил меню, но когда я нажимаю на меню, специально «О», я хочу показать просто 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; 
} 

и MessageBox ...:

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; 

     } 
} 

меню работает, потому что я добавил Quit и такие, так что я знаю, что реагирует на щелчки по меню, но когда я нажимаю О вы слышите всплывающее окно, но показывается MessageBox.

Любые идеи?

ответ

0

Я понял, как-то. Проблема заключалась в том, что я ничего не делал в WM_CREATE или что это «ничего» не было в форме - на белом фоне или что-то в этом роде. Как только я начал добавлять элементы управления (кнопки) в Окно, он внезапно появился там, где раньше этого не было. Просто странно ...

1

Первым параметром MessageBox является hWnd родителя. Обратите внимание, что вызов MessageBox синхронный, поэтому управление не вернется к вашему WndProc, пока пользователь не нажмет кнопку OK. (Поэтому ваше окно не отвечает). Однако вы не предоставили родительский hWnd, так что возможно, что окно сообщения было создано ниже вашего окна.

Попробуйте передать hwnd в качестве первого параметра MessageBox и посмотреть, помогает ли это.

+0

Уже пробовал, что, те же результаты. Если бы это было по умолчанию, только мой последний тест у меня его не было. Итак ... – Deukalion

+0

OK. Запустите SpyXX (который, как я предполагаю, все еще существует) и посмотрите, можете ли вы найти окно сообщения в списке окон. – RobH

+0

О, и вывести сообщение журнала или что-то подобное, чтобы убедиться, что вызов MessageBox действительно сделан. – RobH

Смежные вопросы