回複 2樓 吹水佬
打錯了 是擊中.. 就是用資料總管建了個菜單 然後菜單項wparam在273(菜單擊中是的消息)的WM_COMMAND消息中 居然是65535 而我頭檔案中定義的是40001 ...于是很迷惑 是什麼産生了這個問題.
用斷點發現這個問題後 就把頭檔案的定義改成了65535後雖然可以運作. 但卻依舊不明白問題所在.後來把原來的id删掉後 有重新命名了菜單按鈕後.頭檔案又重新生成的值已經回複正常.代碼也恢複正常..
但我依舊不明白問題所在.問題所在地方我在代碼中注釋了.
#include
#include"resource.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK DlgProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS wndclass;
HWND hwnd;
MSG msg;
static TCHAR szname[] = TEXT("About2");
wndclass.style = CS_VREDRAW | CS_HREDRAW;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hIcon = LoadIcon(hInstance, szname);
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WndProc;
wndclass.lpszClassName = szname;
wndclass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
if (!RegisterClass(&wndclass))
{
MessageBox(NULL, TEXT("CUOLE"), szname, MB_OKCANCEL);
}
hwnd = CreateWindow(szname, TEXT("ABOUT BOX DEMO PROGRAM"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
PAINTSTRUCT ps;
static HINSTANCE hinstance;
switch (message)
{
case WM_CREATE:
hinstance=((LPCREATESTRUCT)lparam)->hInstance;
//hinstance= GetModuleHandle(NULL);
return 0;
case WM_COMMAND:
switch (LOWORD(wparam))// 問題在這裡 當菜單被擊中時 這個wparam值居然是65535.頭檔案中定義是40001
{
case ID_HLEP_ABOUT:
if (DialogBox(hinstance, MAKEINTRESOURCE(IDD_DIALOG1), hwnd, DlgProc))
InvalidateRect(hwnd, NULL, TRUE);
return 0;
}
return 0;
case WM_PAINT:
BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wparam, lparam);
}
BOOL CALLBACK DlgProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch (LOWORD(wparam))
{
case IDOK:
case IDCANCEL:
EndDialog(hwnd, 0);
return TRUE;
}
break;
}
return FALSE;
}