计算机语言中的65535,菜单击中消息WM_COMMAND的wparam 是65535是怎么回事

在Windows程序设计中,遇到一个问题:当使用资源管理器创建菜单,并在WM_COMMAND消息处理中,发现菜单项的wparam值为65535,而非预期的40001。修改头文件定义后问题暂时解决,但删除并重新命名菜单按钮后,问题消失。问题出现在代码的WM_COMMAND消息处理部分,与菜单ID的定义和注册有关。
摘要由CSDN通过智能技术生成

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值