windows核心编程 宏

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

在Jeffrey的Error Show程序作者自定义了一段宏

#define chHANDLE_DLGMSG(hWnd, message, fn)                 /
   case (message): return (SetDlgMsgResult(hWnd, uMsg,     /
      HANDLE_##message((hWnd), (wParam), (lParam), (fn))))

HANDLE_##message((hWnd), (wParam), (lParam), (fn))是借用了windows.h里面的

#define HANDLE_MSG(hwnd, message, fn)
case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))

如果message是WM_CREAT的话,这个应该是

 HANDLE_WM_CREATE((hwnd), (wParam), (lParam), (Cls_OnCreate))

#define HANDLE_WM_CREATE(hwnd, wParam, lParam, fn) /
    ((fn)((hwnd), (LPCREATESTRUCT)(lParam)) ? 0L : (LRESULT)-1L)

那么宏展开为:return Cls_OnCreate(hwnd, (LPCREATESTRUCT)(lParam) )? 0L : (LRESULT)-1L;



但是在对话框消息处理中,对话框过程函数应该在处理了消息的情况下返回TRUE,如果没有处理,则返回FALSE。如果对话框过程返回了FALSE,那么对话框管理器为这条消息准备默认的对话操作。如果对话框处理了一个需要特定返回值的消息,则对话框的返回值应该被设置为调用SetWindowLong后的返回值,这些特殊消息有:

? WM_CHARTOITEM
? WM_COMPAREITEM
? WM_CTLCOLORBTN
? WM_CTLCOLORDLG
? WM_CTLCOLOREDIT
? WM_CTLCOLORLISTBOX
? WM_CTLCOLORSCROLLBAR
? WM_CTLCOLORSTATIC
? WM_INITDIALOG
? WM_QUERYDRAGICON
? WM_VKEYTOITEM

所以在处理WM_INITDIALOG 时,我们不能单纯的调用消息分流器.

而在处理WM_COMMAND中,从windowsx.h可以看到:

/* void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) */
#define HANDLE_WM_COMMAND(hwnd, wParam, lParam, fn) /
    ((fn)((hwnd), (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L)

void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)

Cls_OnCommand由于是个void型的函数,是没有返回值的,因此windows默认这种消息处理过程必须返回一个0值,而返回0值不就表示我们的消息过程不处理这个消息,这是矛盾的,如果直接使用HANDLE_WM_COMMAND(hwnd, wParam, lParam,  Dlg_OnCommand) ;按钮会没有反应,关闭也不行/所以可以使用使用下面的宏解决

#define     SetDlgMsgResult(hwnd, msg, result) (( /
        (msg) == WM_CTLCOLORMSGBOX      || /
        (msg) == WM_CTLCOLOREDIT        || /
        (msg) == WM_CTLCOLORLISTBOX     || /
        (msg) == WM_CTLCOLORBTN         || /
        (msg) == WM_CTLCOLORDLG         || /
        (msg) == WM_CTLCOLORSCROLLBAR   || /
        (msg) == WM_CTLCOLORSTATIC      || /
        (msg) == WM_COMPAREITEM         || /
        (msg) == WM_VKEYTOITEM          || /
        (msg) == WM_CHARTOITEM          || /
        (msg) == WM_QUERYDRAGICON       || /
        (msg) == WM_INITDIALOG             /
    ) ? (BOOL)(result) : (SetWindowLong((hwnd), DWL_MSGRESULT, (LPARAM)(LRESULT)(result)), TRUE))

#define chHANDLE_DLGMSG(hWnd, message, fn)                 /
   case (message): return (SetDlgMsgResult(hWnd, uMsg,     /
      HANDLE_##message((hWnd), (wParam), (lParam), (fn))))

从这两个宏可以得到,如果是特殊消息的话那么返回默认0,并设置说明消息处理,如果WM_COMMAND的话,那么返回SetWindowLong((hwnd), DWL_MSGRESULT, (LPARAM)(LRESULT)(result)), TRUE),一般为TRUE表明已经处理

【测试】MobaXterm、WindTerm、xshell、finalshell可自定义快捷指令工具cxtool 登录linux时,我们经常需要重复输入一些指令. 这个工具可以把这些指令预置,需要的时候鼠标一点,会自动按预置的字符敲击键盘,敲击出指令. 阅读详情

相关推荐

告别Xshell!手把手教你用WindTerm和MobaXterm搞定SSH连接(附详细配置对比)

本文详细对比了WindTerm和MobaXterm作为Xshell替代方案的SSH连接工具,提供了从基础配置到高级功能的全面指南。WindTerm以其轻量级和跨平台支持脱颖而出,而MobaXterm则凭借丰富的内置工具集和Windows优化赢得用户青睐。文章还包含详细的配置对比和选型建议,帮助用户根据需求选择最适合的SSH客户端。

weixin_28683689的博客 283

WindTerm最新版

WindTerm最新版,免安装,替代收费的xshell,ssh,sftp linux远程

windows 核心编程

错误处理 常用返回值类型 V O I D B O O L H A N D L E P V O I D L O N G / D W O R D 为了不让线程间的错误代码互相影响,windows采用了一种叫做thread-local storage的机制,将该线程的错误代码存储到特定的位置从而避免影响其他线程的错误代码 使用GetLastError函数获取线程的错误代码,并将其转换成相应的描述信息(W...

include_heqile的博客 1080

WindTerm:更快,更好的跨平台SSHSftpShellTelnetSerial客户端

风语 用于DevOps的专业SSH / Telnet / Serial / Shell / Sftp客户端。 你好WindTerm :rose: , 你好世界! 我们才刚刚开始! 如果您需要高性能的文本编辑器,可以尝试 。 执照 完全免费,可无限制地用于商业和非商业用途。 所有已发布的源代码(第三方目录除外)均根据Apache-2.0许可条款提供。 介绍 观看 下载 Linux二进制文件和Windows二进制文件: : (Macos的二进制文件将在以后提交) 源代码 WindTerm是一个部分开源项目,该源代码将逐步打开。 开源代码包括但不限于可以独立使用的类(例如功能,算法,gui小部件等)以及功能库(例如网络,协议等)以及所有根据许可证要求开源的类型。 问题和功能要求 欢迎任何问题和功能要求。 请单击以提交问题或功能请求。 请单击“以讨论有关SSH,SFtp,Shell(Linux shell,Windows cmd和powershell),Telnet,串行和WindTerm的任何内容。 屏幕截图 主窗口(zsh): 分割检视: DigeWhite主题: 产

【ssh】xshell的替代--WindTerm|Mobaxterm使用笔记

WindTerm简介 Windows下有没有xshell的更好的替代品? - 知乎 WindTerm (窗口标签不能拖出拖入) 下载:https://github.com/kingToolbox/WindTerm 使用说明(外网太慢,把网页下下来,本地访问): GitHub - kingToolbox/kingToolbox.github.io: Blog of WindTerm and WindEdit 原文链接:https://blog.csdn.net/bandaoyu/article/d.

我的笔记本 2万+

关于windows消息分流器

<br />在Jeffrey的Error Show程序作者自定义了一段<br />#define chHANDLE_DLGMSG(hWnd, message, fn)                 /<br />   case (message): return (SetDlgMsgResult(hWnd, uMsg,     /<br />      HANDLE_##message((hWnd), (wParam), (lParam), (fn))))<br />HANDLE_##message((

killalarm的专栏 491

【2025】超级好用的SSH工具之windterm安装和使用详细教程

【代码】【2025】超级好用的SSH工具之windterm安装和使用详细教程。

大户影视的博客 3406

1.1 Windows核心编程-几个的解读

示例代码//代码示例片段1 DWORD systemLocale = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);//代码示例片段2 switch (uMsg) { chHANDLE_DLGMSG(hwnd, WM_INITDIALOG, Dlg_OnInitDialog); chHANDLE_DLGMSG(hwnd, WM_COMMA

BX's Blog 806

windows 核心编程》读书笔记1-2章

windows 核心编程读书笔记(1-2章) 记的都是我以前学习时漏掉的东西 1. 在visual studio的watch窗口中输入"@err,hr"可以及时的看到GetLastError中的描述   在程序中获取LastError信息示例: DWORD dwError  = GetLastError(); HLOCAL hlocal = NULL; BOOL fOK = Fo...

weixin_33824363的博客 94

chMSG以及展开

windows核心编程,看到一个chMSG这个的功能是在编译的时候向输出窗口输出一条消息,包含文件名和行号.比如在代码中输入#pragma chMSG(测试开始) 在编译的时候在输出窗口就会输出类似下面的消息,双击这条消息便能跳到指定行f:/test/wincore/processview/processview.cpp(24):测试开始以下是这个的定义 #de

xuqifzz的专栏 2226

Windows核心编程之 2 字符和字符串

1 包含新的安全是字符串处理头文件 StrSafe.h __counof 可以计算缓冲区的元素个数 StringCchCat StringCchCopy StringCchPrintf "Cch" 表示 字符数 StringCbCat StringCbCopy StringCbPrintf "cb" 表示大小 比较字符串使用 如路径名,

软件开发 5636

chHANDLE_DLGMSG 对话框消息处理的一点点心得

最近读到windows核心编程 作者制作的chHANDLE_DLGMSG 对话框消息处理  #define chHANDLE_DLGMSG(hWnd, message, fn) / case (message): return (SetDlgMsgResult(hWnd, uMsg, / HANDLE_##message((h

xuqifzz的专栏 1957

windows 核心编程第五版 源代码 无法编译的问题

      这段时间没事做,找了本windows 核心编程第五版 来看,下了源代码,编译,200多的编译错误。上网找了下,都说装最新的SDK,当然,如果是家里的电脑,那安装就好了。如果是工作电脑最好就谨慎点。装了SDK也不一定好使,有的哥们装了,原来的又编译不过了,都是路径的问题。      其实也不一定需要更新SDK,主要是认真看看问题,第五版是关联到VISTA,所以有些或函数就变成在之下的系...

weixin_33909059的博客 226

[笔记]Windows核心编程《一》错误处理、字符编码

windows核心编程1.vs选中函数 按下f1 可进入msdn网页 函数具体详情2.vsF5运行,Cirl+F5 无调试运行,F7编译,3.工具栏-》错误查找 工具可以查找错误码对应的错误含义。

二次元怪兽的博客 1598

关于HANDLE_##MESSAGE , chHANDLE_DLGMSG的理解!!!!

 今天看了windows核心编程。里面用到了HANDLE_##MESSAGE这个,特意查看了下,原来如下: #define chHANDLE_DLGMSG(hWnd, message, fn)                 /   case (message): return (SetDlgMsgResult(hWnd, uMsg,     /      HANDLE_##messag

jasonM2008的专栏 4565

用QMK固件打造你的专属键盘:从配置到实战案例

本文详细介绍了如何使用QMK固件打造专属键盘,从基础配置到实战案例全覆盖。QMK固件以其强大的可编程性和硬件级执行优势,帮助用户简化复杂按键序列,提升工作效率。文章包含环境搭建、编程技巧及高级应用场景,适合从入门到精通的键盘爱好者。

weixin_30338481的博客 409

深入了解Windows编程中必备的头文件

conio.h是一个非标准的C库头文件,主要用于DOS系统。它为程序员提供了getchkbhit等函数,用于不回显地从控制台读取字符,这在交互式程序中非常有用。// 获取一个字符但不在控制台显示return 0;C运行时库(C Runtime Library,简称CRT),是C语言标准库的组成部分,它为C程序提供了一系列基础服务和功能,如内存分配、数学计算、字符串处理、输入输出以及基本的数据类型定义等。

weixin_35949153的博客 494
上一篇: 浅谈程序脱壳后的优化
下一篇: socket重用
killalarm
博客等级 码龄17年 13粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值