﻿<?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++博客-vk2211</title><link>http://www.cppblog.com/vk2211/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 17 Apr 2026 17:22:11 GMT</lastBuildDate><pubDate>Fri, 17 Apr 2026 17:22:11 GMT</pubDate><ttl>60</ttl><item><title>CListCtrl和对话框的消息传递问题</title><link>http://www.cppblog.com/vk2211/archive/2010/04/11/112246.html</link><dc:creator>vk</dc:creator><author>vk</author><pubDate>Sun, 11 Apr 2010 08:31:00 GMT</pubDate><guid>http://www.cppblog.com/vk2211/archive/2010/04/11/112246.html</guid><wfw:comment>http://www.cppblog.com/vk2211/comments/112246.html</wfw:comment><comments>http://www.cppblog.com/vk2211/archive/2010/04/11/112246.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/vk2211/comments/commentRss/112246.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vk2211/services/trackbacks/112246.html</trackback:ping><description><![CDATA[最近在做个小例子，在对话框中放了一个CListCtrl，为CListCtrl增加了双击消息的处理，也在对话框中增加了这个CListCtrl的双击消息处理，这时问题出现了，我发现每次在对话框和CListCtrl中只有一个能收到鼠标的双击消息，而且CListCtrl优先。如果既想让CListCtrl来处理它的内部事务，也想通知到对话框，&#8220;CListCtrl有双击消息了！&#8221;，怎么办呢？<br>先看VS2008中自动生成的对话框的双击消息：<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">1</span> ON_NOTIFY<span style="background-color: yellow;"><span style="background-color: yellow;"><span style="background-color: yellow;"><span style="background-color: yellow;"><span style="color: #000000;"><layer id="searchwp-highlighting0" highlight="term-1" class="searchwp-term"></layer></span></span></span><span style="background-color: yellow;"><span style="color: #000000;"><layer id="searchwp-highlighting0" highlight="term-1" class="searchwp-term"></layer></span></span></span><span style="background-color: yellow;"><span style="color: #000000;"><layer id="searchwp-highlighting0" highlight="term-1" class="searchwp-term"></layer></span></span></span><span style="background-color: yellow;"><span style="color: #000000;"><layer id="searchwp-highlighting0" highlight="term-1" class="searchwp-term"></layer></span></span><span style="color: #000000;"><layer id="searchwp-highlighting0" highlight="term-1" class="searchwp-term"></layer>(NM_DBLCLK,&nbsp;IDC_LIST1,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">CTemp07Dlg::OnNMDblclkList1)<br></span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;CTemp07Dlg::OnNMDblclkList1(NMHDR&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pNMHDR,&nbsp;LRESULT&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pResult)<br></span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;LPNMITEMACTIVATE&nbsp;pNMItemActivate&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;reinterpret_cast</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">NMITEMACTIVATE</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">(pNMHDR);<br></span><span style="color: #008080;">6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000;">AfxMessageBox(_T(</span><span style="color: #000000;">"</span><span style="color: #000000;">CTemp07Dlg::OnNMDblclkList1</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br></span><span style="color: #008080;">7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pResult&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">8</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;"></span><span style="color: #000000;"></span></div>
<br>还有CLList继承于CListCtrl中的双击消息：<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">1</span> ON_NOTIFY<span style="color: #000000;"><layer id="searchwp-highlighting2" highlight="term-1" class="searchwp-term"></layer>_REFLECT(NM_DBLCLK,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">CLList::OnNMDblclk)<br></span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;CLList::OnNMDblclk(NMHDR&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pNMHDR,&nbsp;LRESULT&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pResult)<br></span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;LPNMITEMACTIVATE&nbsp;pNMItemActivate&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;reinterpret_cast</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">NMITEMACTIVATE</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">(pNMHDR);<br></span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox(_T(</span><span style="color: #000000;">"</span><span style="color: #000000;">CLList::OnNMDblclk</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br></span><span style="color: #008080;">7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pResult&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">8</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;"></span><span style="color: #000000;"></span></div>
<br>我的目的就是，先弹出一个&#8220;CLList::OnNMDblclk&#8221;的对话框，再弹出一个&#8220;CTemp07Dlg::OnNMDblclkList1&#8221;的对话框，这样的要求很过分吗？<br>于是，打开网页搜索，搜索了一圈，终于发现一个有用的信息：<br><span style="color: #ff0000;">对于一个控件来说，比如一个listctrl，当DBCLICK发生时，如果有WM_DBCLICK处理程序，则该函数处理，其他包括
NM_**,NM_**_REFLECT都没有机会处理，如果没有WM_DBCLICK，则REFLECT处理，若没有REFLECT映射，则NM_才有机会处理。其中，REFLECT有包括REFLECT_EX，它可以通过返回值决定是否给NM_处理机会。</span><layer id="searchwp-highlighting1" highlight="term-1" class="searchwp-term"><layer id="searchwp-highlighting3" highlight="term-1" class="searchwp-term"></layer></layer><br><br>原来，ON_NOTIFY_REFLECT这个宏太自私，不懂得分享！好了，在你后面加个_EX，再把函数CLList::OnNMDblclk改一下，变成这样：<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">1</span> ON_NOTIFY<span style="color: #000000;"><layer id="searchwp-highlighting4" highlight="term-1" class="searchwp-term"></layer>_REFLECT_EX(NM_DBLCLK,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">CLList::OnNMDblclk)<br></span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">BOOL&nbsp;CLList::OnNMDblclk(NMHDR&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pNMHDR,&nbsp;LRESULT&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pResult)<br></span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;"></span><span style="color: #008000;">&nbsp;&nbsp;&nbsp; <span style="color: #000000;">LPNMITEMACTIVATE&nbsp;pNMItemActivate&nbsp;=&nbsp;reinterpret_cast&lt;NMITEMACTIVATE&gt;(pNMHDR);</span></span><span style="color: #008000;"><br></span><span style="color: #008080;">6</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox(_T(</span><span style="color: #000000;">"</span><span style="color: #000000;">CLList::OnNMDblclk</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br></span><span style="color: #008080;">7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TRUE</span><span style="color: #008000;">表示不让上级处理了，FALSE给别人处理的机会<br></span><span style="color: #008080;">8</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br></span><span style="color: #008080;">9</span>&nbsp;<span style="color: #000000;">}</span></div>
<br>好了，好东西就是这样分享的嘛<br>   <img src ="http://www.cppblog.com/vk2211/aggbug/112246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vk2211/" target="_blank">vk</a> 2010-04-11 16:31 <a href="http://www.cppblog.com/vk2211/archive/2010/04/11/112246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>