| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1981 人关注过本帖
标题:菜单击中消息WM_COMMAND的wparam 是65535是怎么回事
只看楼主 加入收藏
wuyexinfei
Rank: 1
等 级:新手上路
帖 子:9
专家分:3
注 册:2017-5-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
菜单击中消息WM_COMMAND的wparam 是65535是怎么回事
当菜单被集中收到消息时 wparam的低字节是65535  跪求原因. 我已经创建的菜单  被击中的菜单id在头文件中是40003 但在实际测试中wparam返回了65535.
搜索更多相关主题的帖子: 菜单 消息 头文件 测试 返回 
2017-05-07 14:15
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:20 
1、“菜单被集中收到消息”,这里的“集中”是什么意思?
2、LOWORD(wParam)==65535==0xFFFF,不太象菜单项的ID,够绝。
具体情况要看代码才好说。
 

[此贴子已经被作者于2017-5-7 16:11编辑过]

2017-05-07 15:35
wuyexinfei
Rank: 1
等 级:新手上路
帖 子:9
专家分:3
注 册:2017-5-7
收藏
得分:0 
回复 2楼 吹水佬
打错了 是击中..  就是用资源管理器建了个菜单 然后菜单项wparam在273(菜单击中是的消息)的WM_COMMAND消息中 居然是65535 而我头文件中定义的是40001 ...于是很迷惑 是什么产生了这个问题.
用断点发现这个问题后 就把头文件的定义改成了65535后虽然可以运行. 但却依旧不明白问题所在.后来把原来的id删掉后 有重新命名了菜单按钮后.头文件又重新生成的值已经回复正常.代码也恢复正常..

  但我依旧不明白问题所在.问题所在地方我在代码中注释了.
#include<windows.h>
#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;

}
2017-05-07 17:13
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
回复 3楼 wuyexinfei
代码不全,测试不了。
2017-05-08 06:27
wuyexinfei
Rank: 1
等 级:新手上路
帖 子:9
专家分:3
注 册:2017-5-7
收藏
得分:0 
回复 4楼 吹水佬
虽然没写完呢 但可以运行 估计是没建立相应的菜单和对话框..现在不知道什么原因.没问题了..下次碰到再说吧 谢谢拉
2017-05-08 18:55
快速回复:菜单击中消息WM_COMMAND的wparam 是65535是怎么回事
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016822 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved