﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Mr.Johnson is Here-随笔分类-Windows编程</title><link>http://www.cppblog.com/koople/category/12237.html</link><description>有时候我会相信一切都会有尽头</description><language>zh-cn</language><lastBuildDate>Sun, 11 Sep 2011 17:28:18 GMT</lastBuildDate><pubDate>Sun, 11 Sep 2011 17:28:18 GMT</pubDate><ttl>60</ttl><item><title>error C2632: 'long' followed by 'long' is illegal</title><link>http://www.cppblog.com/koople/archive/2011/09/05/155148.html</link><dc:creator>Mr.Johnson</dc:creator><author>Mr.Johnson</author><pubDate>Mon, 05 Sep 2011 10:40:00 GMT</pubDate><guid>http://www.cppblog.com/koople/archive/2011/09/05/155148.html</guid><wfw:comment>http://www.cppblog.com/koople/comments/155148.html</wfw:comment><comments>http://www.cppblog.com/koople/archive/2011/09/05/155148.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koople/comments/commentRss/155148.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koople/services/trackbacks/155148.html</trackback:ping><description><![CDATA[&nbsp; &nbsp;今天在编译模拟器的时候，移植一段代码，发现怎么都编译不过，总是报c:\program files\microsoft visual studio\vc98\include\windef.h(141) : error C2632: 'long' followed by 'long' is illegal 错误。<br />&nbsp; &nbsp;发现是&nbsp;<span style="font-family: simsun; line-height: 23px; text-align: left; background-color: #ffffff; ">头文件</span><span style="font-family: simsun; line-height: 23px; text-align: left; background-color: #ffffff; ">可能最后少},; #endif 之类的东西。</span><img src ="http://www.cppblog.com/koople/aggbug/155148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koople/" target="_blank">Mr.Johnson</a> 2011-09-05 18:40 <a href="http://www.cppblog.com/koople/archive/2011/09/05/155148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关time的函数</title><link>http://www.cppblog.com/koople/archive/2011/02/11/139882.html</link><dc:creator>Mr.Johnson</dc:creator><author>Mr.Johnson</author><pubDate>Fri, 11 Feb 2011 02:00:00 GMT</pubDate><guid>http://www.cppblog.com/koople/archive/2011/02/11/139882.html</guid><wfw:comment>http://www.cppblog.com/koople/comments/139882.html</wfw:comment><comments>http://www.cppblog.com/koople/archive/2011/02/11/139882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koople/comments/commentRss/139882.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koople/services/trackbacks/139882.html</trackback:ping><description><![CDATA[时间日期函数,函数库为time.h<br>在时间日期函数里,主要用到的结构有以下几个:<br>总时间日期贮存结构tm<br>┌──────────────────────┐<br>│struct tm                                   │<br>│{                                           │<br>│ int tm_sec;   /*秒,0-59*/                  │<br>│ int tm_min;   /*分,0-59*/                  │<br>│ int tm_hour;  /*时,0-23*/                  │<br>│ int tm_mday;  /*天数,1-31*/                │<br>│ int tm_mon;   /*月数,0-11*/                │<br>│ int tm_year;  /*自1900的年数*/             │<br>│ int tm_wday;  /*自星期日的天数0-6*/        │<br>│ int tm_yday;  /*自1月1日起的天数,0-365*/   │<br>│ int tm_isdst; /*是否采用夏时制,采用为正数*/│<br>│}                                           │<br>└──────────────────────┘<br>日期贮存结构date<br>┌───────────────┐<br>│struct date                   │<br>│{                             │<br>│ int da_year; /*自1900的年数*/│<br>│ char da_day; /*天数*/        │<br>│ char da_mon; /*月数 1=Jan*/  │<br>│}                             │<br>└───────────────┘<br>时间贮存结构time<br>┌────────────────┐<br>│struct time                     │<br>│{                               │<br>│ unsigned char ti_min;  /*分钟*/│<br>│ unsigned char ti_hour; /*小时*/│<br>│ unsigned char ti_hund;         │<br>│ unsigned char ti_sec;  /*秒*/  │<br>│}                               │<br>└────────────────┘<br>char      *ctime(long *clock)<br> &nbsp;           本函数把clock所指的时间(如由函数time返回的时间)转换成下列格式的<br> &nbsp;           字符串:Mon Nov 21 11:31:54 1983\n\0<br>char      *asctime(struct tm *tm)<br> &nbsp;           本函数把指定的tm结构类的时间转换成下列格式的字符串:<br> &nbsp;           Mon Nov 21 11:31:54 1983\n\0<br>double     difftime(time_t time2,time_t time1)<br> &nbsp;           计算结构time2和time1之间的时间差距(以秒为单位)<br>struct tm *gmtime(long *clock)本函数把clock所指的时间(如由函数time返回的时间)<br> &nbsp;           转换成格林威治时间,并以tm结构形式返回<br>struct tm *localtime(long *clock)本函数把clock所指的时间(如函数time返回的时间)<br> &nbsp;           转换成当地标准时间,并以tm结构形式返回<br>void       tzset()本函数提供了对UNIX操作系统的兼容性<br>long       dostounix(struct date *dateptr,struct time *timeptr)<br> &nbsp;           本函数将dateptr所指的日期,timeptr所指的时间转换成UNIX格式,并返回<br> &nbsp;           自格林威治时间1970年1月1日凌晨起到现在的秒数<br>void       unixtodos(long utime,struct date *dateptr,struct time *timeptr)<br> &nbsp;           本函数将自格林威治时间1970年1月1日凌晨起到现在的秒数utime转换成<br> &nbsp;           DOS格式并保存于用户所指的结构dateptr和timeptr中<br>void       getdate(struct date *dateblk)本函数将计算机内的日期写入结构dateblk<br> &nbsp;           中以供用户使用<br>void       setdate(struct date *dateblk)本函数将计算机内的日期改成<br> &nbsp;           由结构dateblk所指定的日期<br>void       gettime(struct time *timep)本函数将计算机内的时间写入结构timep中,<br> &nbsp;           以供用户使用<br>void       settime(struct time *timep)本函数将计算机内的时间改为<br> &nbsp;           由结构timep所指的时间<br>long       time(long *tloc)本函数给出自格林威治时间1970年1月1日凌晨至现在所经<br> &nbsp;           过的秒数,并将该值存于tloc所指的单元中.<br>int        stime(long *tp)本函数将tp所指的时间(例如由time所返回的时间)<br> &nbsp;           写入计算机中.<img src ="http://www.cppblog.com/koople/aggbug/139882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koople/" target="_blank">Mr.Johnson</a> 2011-02-11 10:00 <a href="http://www.cppblog.com/koople/archive/2011/02/11/139882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CDateTimeCtrl' : missing storage-class or type specifiers 编译错误处理</title><link>http://www.cppblog.com/koople/archive/2010/11/21/134240.html</link><dc:creator>Mr.Johnson</dc:creator><author>Mr.Johnson</author><pubDate>Sun, 21 Nov 2010 12:51:00 GMT</pubDate><guid>http://www.cppblog.com/koople/archive/2010/11/21/134240.html</guid><wfw:comment>http://www.cppblog.com/koople/comments/134240.html</wfw:comment><comments>http://www.cppblog.com/koople/archive/2010/11/21/134240.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koople/comments/commentRss/134240.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koople/services/trackbacks/134240.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;加入一个CDateTimeCtrl 控件 进对话框后居然报错CDateTimeCtrl' : missing storage-class or type specifiers<div>http://www.codeguru.com/forum/showthread.php?t=50341</div><div>如下处理</div><div><span  style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px; "><table class="tborder" id="post131613" cellpadding="3" cellspacing="1" border="0" width="100%" align="center" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(91, 93, 67); color: rgb(0, 0, 0); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(11, 25, 140); border-right-color: rgb(11, 25, 140); border-bottom-color: rgb(11, 25, 140); border-left-color: rgb(11, 25, 140); background-position: initial initial; background-repeat: initial initial; "><tbody><tr><td class="thead" style="font: normal normal bold 11px/normal tahoma, verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(91, 93, 67); color: rgb(255, 255, 255); padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; background-position: initial initial; background-repeat: initial initial; "><div class="normal" style="font-weight: normal; float: right; ">&nbsp; #<a href="http://www.codeguru.com/forum/showpost.php?p=131613&amp;postcount=7" target="new" rel="nofollow" id="postcount131613" name="7" style="color: rgb(255, 255, 255); "><strong>7</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;</div><div class="normal" style="font-weight: normal; "><a name="post131613"><img class="inlineimg" src="http://www.codeguru.com/forum/images/statusicon/post_old.gif" alt="Old" border="0" title="Old" style="vertical-align: middle; "></a>&nbsp;May 28th, 1999, 07:03 PM</div></td></tr><tr><td class="alt2" style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(221, 221, 221); color: rgb(0, 0, 0); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-position: initial initial; background-repeat: initial initial; "><table cellpadding="0" cellspacing="3" border="0" width="100%"><tbody><tr><td nowrap="nowrap" style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; "><div id="postmenu_131613"><a class="bigusername" href="http://www.codeguru.com/forum/member.php?u=1304" style="font-size: 14pt; color: rgb(5, 48, 97); ">Tonio</a>&nbsp;<img class="inlineimg" src="http://www.codeguru.com/forum/images/statusicon/user_offline.gif" alt="Tonio is offline" border="0" title="Tonio is offline" style="vertical-align: middle; "></div><div class="smallfont" style="font: normal normal normal 11px/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; ">Member</div></td><td width="100%" style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; ">&nbsp;</td><td valign="top" nowrap="nowrap" style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; "><div class="smallfont" style="font: normal normal normal 11px/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; "><div>Join Date: Apr 1999</div><div>Location: Philippines</div><div>Posts: 46</div><div><span id="repdisplay_131613_1304"><img class="inlineimg" src="http://www.codeguru.com/forum/images/reputation/reputation_pos.gif" alt="Tonio is an unknown quantity at this point (&lt;10)" border="0" title="Tonio is an unknown quantity at this point (&lt;10)" style="vertical-align: middle; "></span></div><div></div></div></td></tr></tbody></table></td></tr><tr><td class="alt1" id="td_post_131613" style="font: normal normal normal 10pt/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(245, 245, 255); color: rgb(0, 0, 0); background-position: initial initial; background-repeat: initial initial; "><div class="smallfont" style="font: normal normal normal 11px/normal verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; "><strong>Re: CDateTimeCtrl problem</strong></div><hr size="1" style="color: rgb(91, 93, 67); background-color: rgb(91, 93, 67); "><div class="litcontent"><div id="post_message_131613">Good Day!<br>including the "AFXDTCTL.H" in my stdafx.h file made my day!<br>many thanks to ric,walter i an and ERIC33 for the support!</div></div></td></tr></tbody></table></span></div><img src ="http://www.cppblog.com/koople/aggbug/134240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koople/" target="_blank">Mr.Johnson</a> 2010-11-21 20:51 <a href="http://www.cppblog.com/koople/archive/2010/11/21/134240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FormatMessage</title><link>http://www.cppblog.com/koople/archive/2009/12/03/102367.html</link><dc:creator>Mr.Johnson</dc:creator><author>Mr.Johnson</author><pubDate>Wed, 02 Dec 2009 20:25:00 GMT</pubDate><guid>http://www.cppblog.com/koople/archive/2009/12/03/102367.html</guid><wfw:comment>http://www.cppblog.com/koople/comments/102367.html</wfw:comment><comments>http://www.cppblog.com/koople/archive/2009/12/03/102367.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koople/comments/commentRss/102367.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koople/services/trackbacks/102367.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: FormatMessage函数在《windows核心编程》中第一个示例便是它的使用。这个函数我用了几次之后终于明白它的用法；这个函数是用来格式化消息字符串，就是处理消息资源的。消息资源是由mc.exe编译的，详细请在msdn中搜索mc.exe。先来看下它的函数原型DWORD&nbsp;WINAPI&nbsp;FormatMessage(&nbsp;&nbsp;__in&...&nbsp;&nbsp;<a href='http://www.cppblog.com/koople/archive/2009/12/03/102367.html'>阅读全文</a><img src ="http://www.cppblog.com/koople/aggbug/102367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koople/" target="_blank">Mr.Johnson</a> 2009-12-03 04:25 <a href="http://www.cppblog.com/koople/archive/2009/12/03/102367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于分流器那篇文章中不懂得地方</title><link>http://www.cppblog.com/koople/archive/2009/11/27/102097.html</link><dc:creator>Mr.Johnson</dc:creator><author>Mr.Johnson</author><pubDate>Fri, 27 Nov 2009 13:34:00 GMT</pubDate><guid>http://www.cppblog.com/koople/archive/2009/11/27/102097.html</guid><wfw:comment>http://www.cppblog.com/koople/comments/102097.html</wfw:comment><comments>http://www.cppblog.com/koople/archive/2009/11/27/102097.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koople/comments/commentRss/102097.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koople/services/trackbacks/102097.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在分流器那篇文章中说到窗口子类化什么的就造成了要使用不同的宏，我一直没看明白为什么说在对话框中要那样做.<br>原文地址<br><a href="http://blog.csdn.net/hopkins9961629/archive/2006/01/25/588184.aspx"><u><font color=#800080>http://blog.csdn.net/hopkins9961629/archive/2006/01/25/588184.aspx</font></u></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原文不懂的地方如下：<br><br><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=Apple-style-span>
<p style="COLOR: #ff00ff; FONT-SIZE: 10pt">以上四重，是消息分离器的基本使用，但，这不完整，消息分离器主要应用在对话框消息处理中。<br>这里，窗口子类化是我们经常使用的手段，这也可以通过消息分流器实现，</p>
<p style="COLOR: #ff00ff; FONT-SIZE: 10pt">第五重<br>LRESULT CALLBACK Dlg_Proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)<br>{<br>&nbsp;switch(msg)<br>&nbsp;{<br>&nbsp;&nbsp;HANDLE_MSG(hwnd, WM_INITDIALO , Cls_OnInitDialog); // 不能直接使用HANDLE_MSG宏<br>&nbsp;&nbsp;HANDLE_MSG(hwnd, WM_COMMAND, Cls_OnCommand); // 不能直接使用HANDLE_MSG宏<br>&nbsp;}<br>&nbsp;return false;<br>}&nbsp;<br>由于是窗口子类化，所以，最后，返回的是false，以表明，如果没有约定响应的消息，<br>则返回父亲窗口false，如果有，则返回ture，这是与前四重不同的地方。<br>一般情况下，对话框过程函数应该在处理了消息的情况下返回TRUE，如果没有处理，则返回FALSE。<br>如果对话框过程返回了FALSE，那么对话框管理器为这条消息准备默认的对话操作。</p>
<p style="COLOR: #ff00ff; FONT-SIZE: 10pt">但是，这其中有错误，因为有的消息,需要单独处理。单独处理的消息列表见SetDlgMsgResult宏。</p>
<blockquote style="MARGIN-RIGHT: 0px" dir=ltr>
<p><br><span style="FONT-SIZE: 14pt">&nbsp; 为什么不能使用？<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 查阅msdn发现在对话框的过程函数和window窗口有个不一样地方是在返回值上面。如果消息被处理，那么它将返回true，而如果没有处理，那么将返回false，让对话框管理器（DialogBox Manager）处理。如果想有自己的返回值的话，那么使用子类化SetWindowLong函数中的DWL_MSGRESULT标识符改变，但是之后还是要返回true。但是有一些消息不遵守上诉约定，而直接返回他们的返回值，这些消息如下：<br></span></p>
</blockquote>
<li><span style="FONT-SIZE: 10pt"><mshelp:link tabIndex=0 keywords="_win32_WM_CHARTOITEM" xmlns:MSHelp="http://msdn.microsoft.com/mshelp"><u><font color=#0000ff>WM_CHARTOITEM</font></u></mshelp:link> </span>
<li><span style="FONT-SIZE: 10pt"><mshelp:link tabIndex=0 keywords="_win32_WM_COMPAREITEM" xmlns:MSHelp="http://msdn.microsoft.com/mshelp"><u><font color=#0000ff>WM_COMPAREITEM</font></u></mshelp:link> </span>
<li><span style="FONT-SIZE: 10pt"><mshelp:link tabIndex=0 keywords="_win32_WM_CTLCOLORBTN" xmlns:MSHelp="http://msdn.microsoft.com/mshelp"><u><font color=#0000ff>WM_CTLCOLORBTN</font></u></mshelp:link> </span>
<li><span style="FONT-SIZE: 10pt"><mshelp:link tabIndex=0 keywords="_win32_WM_CTLCOLORDLG_cpp" xmlns:MSHelp="http://msdn.microsoft.com/mshelp"><u><font color=#0000ff>WM_CTLCOLORDLG</font></u></mshelp:link> </span>
<li><span style="FONT-SIZE: 10pt"><mshelp:link tabIndex=0 keywords="_win32_WM_CTLCOLOREDIT" xmlns:MSHelp="http://msdn.microsoft.com/mshelp"><u><font color=#0000ff>WM_CTLCOLOREDIT</font></u></mshelp:link> </span>
<li><span style="FONT-SIZE: 10pt"><mshelp:link tabIndex=0 keywords="_win32_WM_CTLCOLORLISTBOX" xmlns:MSHelp="http://msdn.microsoft.com/mshelp"><u><font color=#0000ff>WM_CTLCOLORLISTBOX</font></u></mshelp:link> </span>
<li><span style="FONT-SIZE: 10pt"><mshelp:link tabIndex=0 keywords="_win32_WM_CTLCOLORSCROLLBAR" xmlns:MSHelp="http://msdn.microsoft.com/mshelp"><u><font color=#0000ff>WM_CTLCOLORSCROLLBAR</font></u></mshelp:link> </span>
<li><span style="FONT-SIZE: 10pt"><mshelp:link tabIndex=0 keywords="_win32_WM_CTLCOLORSTATIC" xmlns:MSHelp="http://msdn.microsoft.com/mshelp"><u><font color=#0000ff>WM_CTLCOLORSTATIC</font></u></mshelp:link> </span>
<li><span style="FONT-SIZE: 10pt"><mshelp:link tabIndex=0 keywords="_win32_WM_INITDIALOG_cpp" xmlns:MSHelp="http://msdn.microsoft.com/mshelp"><u><font color=#0000ff>WM_INITDIALOG</font></u></mshelp:link> </span>
<li><span style="FONT-SIZE: 10pt"><mshelp:link tabIndex=0 keywords="_win32_WM_QUERYDRAGICON_cpp" xmlns:MSHelp="http://msdn.microsoft.com/mshelp"><u><font color=#0000ff>WM_QUERYDRAGICON</font></u></mshelp:link> </span>
<li><mshelp:link tabIndex=0 keywords="_win32_WM_VKEYTOITEM" xmlns:MSHelp="http://msdn.microsoft.com/mshelp"><u><span style="COLOR: #0000ff; FONT-SIZE: 10pt">WM_VKEYTOITEM</span></u></mshelp:link>
<p><br>了解了这些之后看看那些定义的分流器宏<br>消息处理宏：</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;HANDLE_MSG(hwnd,&nbsp;message,&nbsp;fn)&nbsp;&nbsp;&nbsp;&nbsp;\</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;(message):&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;HANDLE_##message((hwnd),&nbsp;(wParam),&nbsp;(lParam),&nbsp;(fn))</span></div>
<p><br>WM_COMMAND宏的消息分流器定义：</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;HANDLE_WM_COMMAND(hwnd,&nbsp;wParam,&nbsp;lParam,&nbsp;fn)&nbsp;\</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;((fn)((hwnd),&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)(LOWORD(wParam)),&nbsp;(HWND)(lParam),&nbsp;(UINT)HIWORD(wParam)),&nbsp;</span><span style="COLOR: #000000">0L</span><span style="COLOR: #000000">)</span></div>
</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们可以看到如果在对话框的过程函数中直接使用HANDLE_MSG的话，我们使用WM_COMMAND消息，那么根据HANDLE_WM_COMMAND宏，我们可以知道它会返回0L，0在windef.h中定义为false，那么我们明明处理这个wm_command消息，但是我们告诉对话框管理器是没有处理，让对话框管理器处理。所以如果这里直接使用HANDLE_MSG是不可行的，那么我们就使用一个宏改进它<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetDlgMsgResult(hwnd,&nbsp;msg,&nbsp;result)&nbsp;((&nbsp;\</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(msg)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;WM_CTLCOLORMSGBOX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;\<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(msg)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;WM_CTLCOLOREDIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;\<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(msg)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;WM_CTLCOLORLISTBOX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;\<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(msg)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;WM_CTLCOLORBTN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;\<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(msg)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;WM_CTLCOLORDLG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;\<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(msg)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;WM_CTLCOLORSCROLLBAR&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;\<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(msg)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;WM_CTLCOLORSTATIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;\<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(msg)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;WM_COMPAREITEM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;\<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(msg)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;WM_VKEYTOITEM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;\<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(msg)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;WM_CHARTOITEM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;\<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(msg)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;WM_QUERYDRAGICON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;\<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(msg)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;WM_INITDIALOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;(BOOL)(result)&nbsp;:&nbsp;(SetWindowLongPtr((hwnd),&nbsp;DWLP_MSGRESULT,&nbsp;(LPARAM)(LRESULT)(result)),&nbsp;TRUE))<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
这样就可以解决这个问题了<br>像Jeffrey Richter 高手自己也定义了一个宏：<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;chHANDLE_DLGMSG(hWnd,&nbsp;message,&nbsp;fn)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;(message):&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(SetDlgMsgResult(hWnd,&nbsp;uMsg,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLE_##message((hWnd),&nbsp;(wParam),&nbsp;(lParam),&nbsp;(fn))))</span></div>
这样可以更方便的在对话框过程函数中使用消息分流器了！ </li>
<img src ="http://www.cppblog.com/koople/aggbug/102097.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koople/" target="_blank">Mr.Johnson</a> 2009-11-27 21:34 <a href="http://www.cppblog.com/koople/archive/2009/11/27/102097.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>