天天看點

計算機語言中的65535,菜單擊中消息WM_COMMAND的wparam 是65535是怎麼回事

回複 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;

}