2012-11-05 75 views
0

我在win32中有一個應用程序,它在主窗口中有一個頂層菜單,這個菜單有兩個子菜單選項。WinAPI菜單凍結後點擊一下

問題是..在一些點擊它的選項後,它突然凍結。應用程序的其餘部分保持正常響應,但是當我點擊菜單選項時,按鈕按下並且子菜單剛剛不出現,並且我需要重新啓動應用程序,否則它將不再工作。

我thik它是有關內存分配的東西,也許我需要釋放一些分配,但因爲即時通訊新的這種編程,我可以說只是看着它。

一些code..i認爲它在我操縱的是那裏有什麼不對的WM_COMMAND的窗口過程:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 

int wmId, wmEvent; 
PAINTSTRUCT ps; 
HDC hdc; 

HMENU hMenubar = CreateMenu(); 
HMENU hFile = CreateMenu(); 
HMENU hEDIT = CreateMenu(); 
HMENU hHelp = CreateMenu();  



switch (message) 
{ 


case WM_COMMAND: 
    wmId = LOWORD(wParam); 
    wmEvent = HIWORD(wParam); 

    // Parse the menu selections: 

    switch (wmId) 
    { 
    case ID_FILE_DIALOG2: 
     DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG2), hWnd, Add); 
     break; 

    case ID_FILE_TESTE: 

    Check(); 

    break; 

    case ID_FILE_DIALOG1: 
     DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, Conf); 
     break; 

    case ID_OPEN: 
     Open(); 
     break; 

    case IDM_ABOUT: 
     DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); 
     break; 

    case IDM_EXIT: 
     DestroyWindow(hWnd); 
     PostQuitMessage(0); 
     break; 

    default: 
     return DefWindowProc(hWnd, message, wParam, lParam); 

    } 
    break; 

case WM_PAINT: 

    break; 

case WM_CLOSE: 
    DestroyWindow(hWnd); 
     PostQuitMessage(0); 
break; 

case WM_DESTROY: 

break; 

default: 
    return DefWindowProc(hWnd, message, wParam, lParam); 

} 
return 0; 
} 

回答

5

你可能用完句柄爲您正在創建的菜單每一次的WndProc是調用。這個函數被調用了很多!

在應用程序初始化期間創建一次菜單。

+0

非常感謝你,我在InitInstance()上聲明它,所以它只是在應用程序初始化時創建菜單,並解決了:)。 – Bruno