Windows零基础入门:3.5 菜单使用2-Win32菜单事件响应详细分析

5319 人浏览 | 时间: 2015-10-01 11:40:59 | 作者: codexia 会员文章,禁止转载

    上一节我们详细解释了菜单的基础知识,以及添加菜单的方法,见《Windows零基础入门:3.4 菜单使用1-Win32菜单添加详细分析》。
    菜单为大量的功能和便捷操作带来了折衷。如果功能点太多,界面上必然放不下,如果功能点太少,软件不够强大。菜单就可以按照分类来容纳大量的功能,所以,是非常不错的东西哦。
    而菜单始终都是用来提供功能执行的,不然也就失去了意义。那么现在我们来讲讲在Win32中如何响应菜单吧。

    Windows零基础入门,菜单事件响应

LRESULT CALLBACK WinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    case WM_COMMAND:
    {
        switch (wParam)
        {
        case IDM_1:
            MessageBox(NULL, L"菜单1点击了!", L"提示", 0);
            return 0;
        case ID_40003:
            MessageBox(NULL, L"菜单2点击了!", L"提示", 0);
            return 0;
        }
    }
        return 0;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}
     从代码上可以看出,我们只处理了两个消息。一个是WM_DESTROY窗口销毁消息,一个就是菜单处理消息WM_COMMAND。在WM_COMMAND消息处理中,又使用了switch对参数进行判断,从而识别出是哪一个菜单的点击。
    在WM_COMMAND下识别菜单的ID,是通过wParam参数。在前面讲过,hwnd是窗口句柄,message是消息ID,wParam是附加参数,lParam是额外参数数据。很多消息只有左边两个参数,这是必不可少的。有些消息有左边三个参数,有的消息有四个参数。我们如何来确定不同的消息对应多少参数呢?你可以查阅MSDN,输入消息的ID,如WM_DESTROY,就可以查询这个消息的参数情况。通常查阅MSDN是最可靠的。
    不过我有一点经验,不妨分享给大家来快速熟悉。前面两个参数都是必须的,哪个消息都跑不了。第三个就是额外的参数,比如控件的通知码、菜单的ID,说白了,就是额外传递一个唯一标识,因为WM_COMMAND实在是太泛了,底下的类别太多,需要区分,就用上每一个的唯一ID。不管是控件还是菜单还是工具栏等,每一个元素都会带有一个ID,这样就可以通过ID来区分。那么第一个参数就是窗口句柄,第二个就是WM_COMMAND消息ID,那么自然要第三个放菜单ID等了,不能空着第三个参数不用,直接放在第四个吧。
    那么,如果在消息中还想传递参数的话,就要用上第四个参数。比如要设置窗口的标题文字,你就要传递一个字符串的指针过去。具体的我们在消息部分讲解。
    而菜单的ID定义了数字宏,所以IDM_1其实就是一个整数而已。然后在对应的下面处理即可实现对不同菜单不同响应了。
当前文章为会员文章,请前往[用户中心]开通会员后继续阅读。

Win32课程菜单