Windows 核心编程笔记一:关于Error Show的总结

本文介绍了在Windows环境下,编译ErrorShow程序时遇到的编译错误及解决方案,包括GetWindowLongPtr与GWLP_HINSTANCE的替换、PCTSTR与PTSTR的区别以及回调函数类型匹配。此外,文章详细解释了作者自定义宏chHANDLE_DLGMSG的工作原理,以及Windows消息分流器如何简化窗口消息处理,使得代码更易读。最后,展示了Edit_LimitText与SendMessage在对话框初始化中的作用。
摘要由CSDN通过智能技术生成

第一:关于代码编译的问题  

第一次把ErrorShow实例从光盘上拷下来,用Microsoft Visual C++ 6.0编译,出现如下错误:

Compiling...
ErrorShow.cpp
You are not using the latest Platform SDK header/library
files. This may prevent the project from building correctly.
c:/documents and settings/administrator/桌面/01-errorshow/cmnhdr.h(212) : error C2065: 'GetWindowLongPtr' : undeclared identifier
c:/documents and settings/administrator/桌面/01-errorshow/cmnhdr.h(212) : error C2065: 'GWLP_HINSTANCE' : undeclared identifier
c:/documents and settings/administrator/桌面/01-errorshow/errorshow.cpp(83) : error C2065: 'PCTSTR' : undeclared identifier
c:/documents and settings/administrator/桌面/01-errorshow/errorshow.cpp(83) : error C2146: syntax error : missing ')' before identifier 'LocalLock'
c:/documents and settings/administrator/桌面/01-errorshow/errorshow.cpp(83) : error C2059: syntax error : ')'
c:/documents and settings/administrator/桌面/01-errorshow/errorshow.cpp(125) : error C2664: 'DialogBoxParamA' : cannot convert parameter 4 from 'long (struct HWND__ *,unsigned int,unsigned int,long)' to 'int (__stdcall *)(struct HWND__ *,unsigned in
t,unsigned int,long)'
        None of the functions with this name in scope match the target type
执行 cl.exe 时出错.

ErrorShow.obj - 1 error(s), 0 warning(s)

 

解决办法:

1.将GetWindowLongPtr改成GetWindowLong    GWLP_HINSTANCE改成GWL_HINSTANCE原因可能是If you are retrieving a pointer or a handle, this function supersedes the GetWindowLong function.(参照msdn的说法)

2.将PCTSTR改成PTSTR(这个类型包含在windows.h头文件中)

3. Dlg_Proc改成(DLGPROC)Dlg_Proc   类型要匹配

改完之后应该就可以编译成功了。

 

第二:关于代码中一些让人费解的代码

1.chSETDLGICONS(hwnd, IDI_ERRORSHOW);

  chHANDLE_DLGMSG(hwnd, WM_INITDIALOG, Dlg_OnInitDialog);
   chHANDLE_DLGMSG(hwnd, WM_COMMAND,    Dlg_OnCommand);

这些都是作者定义的宏,包含在CmnHdr.h中,如:#define chHANDLE_DLGMSG(hwnd, message, fn)   /
                                                                                          case (message): return (SetDlgMsgResult(hwnd, uMsg, /
                                                                                         HANDLE_##message((hwnd), (wParam), (lParam), (fn))))

其实这是一些消息分流器,包含在windowsx.h中,作者为了使用方便及避免一些问题自定义了它,有关消息分流器的知识&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值