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

本文介绍了在Windows编程中遇到的ErrorShow实例编译错误及解决方案,包括GetWindowLongPtr与GWLP_HINSTANCE的修正、PCTSTR到PTSTR的转换以及Dlg_Proc类型的匹配。此外,文章深入讲解了作者自定义的消息分流器宏,如chHANDLE_DLGMSG的使用,以及如何在对话框中正确处理WM_INITDIALOG和WM_COMMAND消息。通过对Windowsx.h中消息分流器的分析,展示了如何简化和优化对话框消息处理代码。
摘要由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中,作者为了使用方便及避免一些问题自定义了它,有关消息分流器的知识,如下所示:

对于熟悉Win API编程的同志们来说,windowsx.h这个头文件应该不会太陌生吧,经常能在msdn上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值