WM_COMMAND介绍和用法(转)

WM_COMMAND产生的条件:点击菜单, 点击加速键,点击子窗口按钮,点击工具栏按钮。这些时候都有command消息产生。

WM_COMMAND消息中有两个参 数,wparam、lparam,定义如下:

       wParam 高两个字节 通知码

       wParam 低两字节 命令ID

       lParam 发送命令消息的子窗体句柄。

 

对于菜单 和加速键来说,lParam为0,只有控件此项才非0。命令ID也就是资源脚本中定义的菜单项的命令ID或者加速键的命令ID;菜单的通知码为0;加速键 的通知码为1。

       对于Windows菜单中菜单项和加速键,点击后,Windows会向所属的窗体发送WM_SYSCOMMAND,而不是WM_COMMAND消息。注 意,WINDOWS菜单是系统菜单,也就是在标题栏点击鼠标左键的时候弹出的菜单。我们可以捕获WM_CREATE消息,加入自己的操 作:GetSysMenu获取系统菜单句柄,然后对系统菜单进行操作,并且捕获添加菜单项(根据菜单命令ID)ID对应的WM_SYSCOMMAND消息 进行处理。修改系统默认的菜单行为。

子窗体和父窗体:

子窗体被触发时,向父窗体发送一个WM_COMMAND消息,父窗体的窗口函数处理这个消息,进行 相关的处理。lParam表示子窗口句柄,LOWORD(wParam)表示子窗口ID,HIWORD (wParam)表示通知码(例如单击,双击,SETFOCUS等)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在这段代码中,我注意到一些可以进行优化的地方。 1. 文件路径的硬编码:将文件路径硬编码在代码中是不推荐的,因为它限制了代码的可移植性。您可以考虑将文件路径作为参数传递给函数,或者使用配置文件来存储文件路径。 2. 文件打开错误处理:在打开文件时,如果文件无法打开,您当前的处理方式是返回 `DefWindowProc(hWnd2, uID, wParam, lParam)`。这样做会导致窗口消息被默认处理,但可能不会向用户提供任何反馈。您可以考虑使用 `MessageBox` 函数或其他适当的方法来显示错误消息给用户。 3. 内存清零:在每个循环迭代中,您使用 `memset` 将 `x` 结构体的内存清零。这是一个不必要的操作,因为您之后又将新的值赋给 `x`。您可以删除这行代码。 4. 字符串操作:在代码中,您使用 `strcpy_s` 将字符串复制到 `x.name` 和 `x.password` 中。这些函数是安全的,但如果您已经确保 `sztextC` 和 `sztextD` 的长度不会超过 `x.name` 和 `x.password` 的长度,您可以考虑使用更简单的 `strcpy` 函数。 5. 文件写入循环:在写入文件时,您使用了一个循环将链表中的数据写入文件。然而,您在循环之前并没有将链表头指针指向下一个节点,这可能导致在链表最后一个节点时出现错误。您可以将 `L = L->next;` 移到循环内的最后,以确保正确的迭代。 6. 调用 `ShowWindow` 和 `PostMessage`:在代码的最后,您调用了 `ShowWindow(hWnd1, SW_HIDE)` 和 `PostMessage(hWnd1, WM_SYSCOMMAND, SC_CLOSE, SC_CLOSE)`。根据代码的上下文,我无法完全理解这些调用的目的。如果您只是想隐藏窗口和关闭窗口,请将这些调用放在 `case WM_COMMAND` 的条件分支中,并删除 `break;` 之后的 `return 0;`。 这些是一些可以优化的地方,您可以根据需要进行修改和改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值