﻿<?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++博客-天下-随笔分类-WTL</title><link>http://www.cppblog.com/aaxron/category/16223.html</link><description>把剑观沧海 笑语话人生</description><language>zh-cn</language><lastBuildDate>Wed, 14 Mar 2012 10:13:02 GMT</lastBuildDate><pubDate>Wed, 14 Mar 2012 10:13:02 GMT</pubDate><ttl>60</ttl><item><title>WTL中只使用ATL::CString</title><link>http://www.cppblog.com/aaxron/archive/2012/03/13/167786.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 13 Mar 2012 08:57:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/03/13/167786.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/167786.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/03/13/167786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/167786.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/167786.html</trackback:ping><description><![CDATA[<div>在stdafx.h中<br /><span style="color: #008000">//放在最前面</span><br />#define _WTL_NO_CSTRING<br />#include &lt;atlstr.h&gt; <span style="color: #008000">//这个必须放在 #include &lt;atlapp.h&gt;</span><br /><br /><br /><span>因为ATL::CString是MFC与ATL公共类.</span><br /><br /></div><img src ="http://www.cppblog.com/aaxron/aggbug/167786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2012-03-13 16:57 <a href="http://www.cppblog.com/aaxron/archive/2012/03/13/167786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WTL中窗口类的一些特殊处理</title><link>http://www.cppblog.com/aaxron/archive/2012/02/21/166112.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 21 Feb 2012 02:26:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/02/21/166112.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/166112.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/02/21/166112.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/166112.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/166112.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">WTL中窗口类的一些特殊处理</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;CWndClassInfo<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;WNDCLASSEX&nbsp;m_wc;<br />&nbsp;&nbsp;&nbsp;&nbsp;LPCSTR&nbsp;m_lpszOrigName;<br />&nbsp;&nbsp;&nbsp;&nbsp;WNDPROC&nbsp;pWndProc;<br />&nbsp;&nbsp;&nbsp;&nbsp;LPCSTR&nbsp;m_lpszCursorID;<br />&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;m_bSystemCursor;<br />&nbsp;&nbsp;&nbsp;&nbsp;ATOM&nbsp;m_atom;<br />&nbsp;&nbsp;&nbsp;&nbsp;CHAR&nbsp;m_szAutoName[</span><span style="color: #000000; ">5</span><span style="color: #000000; ">+</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)</span><span style="color: #000000; ">*</span><span style="color: #000000; ">CHAR_BIT];<br />};<br />这个结构中有两个最重要的成员：m_wc和m_atom。m_wc是窗口类的结构，想要手动注册类时所使用的结构。m_atom用于确定这个类是否已经注册，在还没有注册类之前，修改m_wc还是有效果的。<br /><br />typedef&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;UINT&nbsp;cbSize;<br />&nbsp;&nbsp;&nbsp;&nbsp;UINT&nbsp;style;<br />&nbsp;&nbsp;&nbsp;&nbsp;WNDPROC&nbsp;lpfnWndProc;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cbClsExtra;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cbWndExtra;<br />&nbsp;&nbsp;&nbsp;&nbsp;HINSTANCE&nbsp;hInstance;<br />&nbsp;&nbsp;&nbsp;&nbsp;HICON&nbsp;hIcon;<br />&nbsp;&nbsp;&nbsp;&nbsp;HCURSOR&nbsp;hCursor;<br />&nbsp;&nbsp;&nbsp;&nbsp;HBRUSH&nbsp;hbrBackground;<br />&nbsp;&nbsp;&nbsp;&nbsp;LPCTSTR&nbsp;lpszMenuName;<br />&nbsp;&nbsp;&nbsp;&nbsp;LPCTSTR&nbsp;lpszClassName;<br />&nbsp;&nbsp;&nbsp;&nbsp;HICON&nbsp;hIconSm;<br />}&nbsp;WNDCLASSEX;<br /><br />ATL::CWndClassInfo&nbsp;wc&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(WNDCLASSEX),&nbsp;style,&nbsp;StartWindowProc,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;(HBRUSH)(bkgnd&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">),&nbsp;NULL,&nbsp;WndClassName,&nbsp;NULL&nbsp;},&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">WNDCLASSEX</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">m_lpszOrigName</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">pWndProc</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;IDC_ARROW,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">m_lpszCursorID</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;TRUE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">m_bSystemCursor</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">m_atom</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;_T(</span><span style="color: #000000; ">""</span><span style="color: #000000; ">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">m_szAutoName</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">};&nbsp;<br /><br /><br /><br /><br /><br /><br /></span><span style="color: #808080; ">///////////////////////////////////////////////////////////////////////////</span><span style="color: #008000; ">//</span><span style="color: #808080; "><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;CWndClassInfo&nbsp;-&nbsp;Manages&nbsp;Windows&nbsp;class&nbsp;information</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;DECLARE_WND_CLASS(WndClassName)&nbsp;\</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;ATL::CWndClassInfo</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;GetWndClassInfo()&nbsp;\<br />{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;ATL::CWndClassInfo&nbsp;wc&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(WNDCLASSEX),&nbsp;CS_HREDRAW&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;CS_VREDRAW&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;CS_DBLCLKS,&nbsp;StartWindowProc,&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;(HBRUSH)(COLOR_WINDOW&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">),&nbsp;NULL,&nbsp;WndClassName,&nbsp;NULL&nbsp;},&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;NULL,&nbsp;IDC_ARROW,&nbsp;TRUE,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;_T(</span><span style="color: #000000; ">""</span><span style="color: #000000; ">)&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;wc;&nbsp;\<br />}<br /><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;DECLARE_WND_CLASS_EX(WndClassName,&nbsp;style,&nbsp;bkgnd)&nbsp;\</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;ATL::CWndClassInfo</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;GetWndClassInfo()&nbsp;\<br />{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;ATL::CWndClassInfo&nbsp;wc&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(WNDCLASSEX),&nbsp;style,&nbsp;StartWindowProc,&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;(HBRUSH)(bkgnd&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">),&nbsp;NULL,&nbsp;WndClassName,&nbsp;NULL&nbsp;},&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;NULL,&nbsp;IDC_ARROW,&nbsp;TRUE,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;_T(</span><span style="color: #000000; ">""</span><span style="color: #000000; ">)&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;wc;&nbsp;\<br />}<br /><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;DECLARE_WND_SUPERCLASS(WndClassName,&nbsp;OrigWndClassName)&nbsp;\</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;ATL::CWndClassInfo</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;GetWndClassInfo()&nbsp;\<br />{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;ATL::CWndClassInfo&nbsp;wc&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(WNDCLASSEX),&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;StartWindowProc,&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;WndClassName,&nbsp;NULL&nbsp;},&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OrigWndClassName,&nbsp;NULL,&nbsp;NULL,&nbsp;TRUE,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;_T(</span><span style="color: #000000; ">""</span><span style="color: #000000; ">)&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;wc;&nbsp;\<br />}</span></div><img src ="http://www.cppblog.com/aaxron/aggbug/166112.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2012-02-21 10:26 <a href="http://www.cppblog.com/aaxron/archive/2012/02/21/166112.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单的CInfoTip类</title><link>http://www.cppblog.com/aaxron/archive/2012/02/18/165921.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Sat, 18 Feb 2012 09:36:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/02/18/165921.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/165921.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/02/18/165921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/165921.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/165921.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">file:InfoTip.h</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">#pragma&nbsp;once<br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">atlwin.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;CInfoTip&nbsp;:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;ATL::CWindowImpl</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">CInfoTip</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;<br />{&nbsp;<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_WND_CLASS_EX(NULL,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;COLOR_3DFACE)&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LPCTSTR&nbsp;m_lpstrInfo;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">enum</span><span style="color: #000000; ">&nbsp;{&nbsp;m_nToolTipID&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1313</span><span style="color: #000000; ">&nbsp;};&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;WTL::CToolTipCtrl&nbsp;m_tooltip;&nbsp;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CInfoTip():m_lpstrInfo(NULL)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;}&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;Init(HWND&nbsp;hWnd,&nbsp;LPCTSTR&nbsp;lpstrName)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ATLASSERT(::IsWindow(hWnd));&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SubclassWindow(hWnd);&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Set&nbsp;tooltip&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_tooltip.Create(m_hWnd);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ATLASSERT(m_tooltip.IsWindow());&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RECT&nbsp;rect;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">rect);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CToolInfo&nbsp;ti(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;m_hWnd,&nbsp;m_nToolTipID,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">rect,&nbsp;NULL);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_tooltip.AddTool(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">ti);&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;set&nbsp;text&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_lpstrInfo&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;lpstrName;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(m_lpstrInfo&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;NULL)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_tooltip.UpdateTipText(m_lpstrInfo,&nbsp;m_hWnd,&nbsp;m_nToolTipID);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_tooltip.Activate(</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;BEGIN_MSG_MAP(CInfoTip)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MESSAGE_RANGE_HANDLER(WM_MOUSEFIRST,&nbsp;WM_MOUSELAST,OnMouseMessage)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;END_MSG_MAP()&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LRESULT&nbsp;OnMouseMessage(UINT&nbsp;uMsg,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam,&nbsp;BOOL</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;bHandled)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(m_tooltip.IsWindow())&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSG&nbsp;msg&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{&nbsp;m_hWnd,&nbsp;uMsg,&nbsp;wParam,&nbsp;lParam&nbsp;};&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_tooltip.RelayEvent(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">msg);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bHandled&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;FALSE;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />};&nbsp;<br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">使用:</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;CInfoTip&nbsp;m_InfoTipEdit;<br />&nbsp;&nbsp;&nbsp;&nbsp;m_InfoTipEdit.Init(&nbsp;&nbsp;&nbsp;GetDlgItem(&nbsp;&nbsp;&nbsp;IDOK&nbsp;&nbsp;&nbsp;),&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">输入密码&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);&nbsp;</span></div><img src ="http://www.cppblog.com/aaxron/aggbug/165921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2012-02-18 17:36 <a href="http://www.cppblog.com/aaxron/archive/2012/02/18/165921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>How to move a dialog which does not have a caption(非标题栏移动对话框)</title><link>http://www.cppblog.com/aaxron/archive/2012/02/16/165724.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 16 Feb 2012 02:24:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/02/16/165724.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/165724.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/02/16/165724.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/165724.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/165724.html</trackback:ping><description><![CDATA[<div><div>How to move a dialog which does not have a caption</div><div></div><div>Introduction</div><div></div><div>This article is aimed at beginners, and presents two ways to move a dialog which does not have a caption by dragging its client area.</div><div></div><div>1. WM_SYSCOMMAND message</div><div></div><div>Sending the WM_SYSCOMMAND message starts the move operation. Add the following code to handle the mouse down event:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">BEGIN_MSG_MAP(CMainDlg)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//...</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;MESSAGE_HANDLER(WM_LBUTTONDOWN,&nbsp;OnLButtonDown)<br />END_MSG_MAP()<br /><br />LRESULT&nbsp;OnLButtonDown(UINT&nbsp;uMsg,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam,&nbsp;BOOL</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;bHandled)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;SendMessage(WM_SYSCOMMAND,&nbsp;SC_MOVE</span><span style="color: #000000; ">|</span><span style="color: #000000; ">HTCAPTION);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}</span></div><br /><br /><div><div>2. WM_NCHITTEST message</div><div></div><div>The idea is to handle the WM_NCHITTEST message to return HTCAPTION instead of HTCLIENT when the mouse is in the client area, to trick Windows to start moving the dialog.</div></div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">BEGIN_MSG_MAP(CMainDlg)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//...</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;MESSAGE_HANDLER(WM_NCHITTEST,&nbsp;OnNcHitTest)<br />END_MSG_MAP()<br /><br />LRESULT&nbsp;OnNcHitTest(UINT&nbsp;uMsg,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam,&nbsp;BOOL</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;bHandled)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(::DefWindowProc(m_hWnd,&nbsp;uMsg,&nbsp;wParam,&nbsp;lParam)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTCLIENT&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;::GetAsyncKeyState(MK_LBUTTON)&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;HTCAPTION;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">For&nbsp;MFC<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">Devil&nbsp;for&nbsp;ever&nbsp;supplied&nbsp;the&nbsp;MFC&nbsp;solution&nbsp;that&nbsp;is&nbsp;shown&nbsp;below&nbsp;(thanks!).&nbsp;The&nbsp;idea&nbsp;is&nbsp;the&nbsp;same&nbsp;-&nbsp;to&nbsp;handle&nbsp;the&nbsp;WM_NCHITTEST&nbsp;message.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">UINT&nbsp;OnNcHitTest(CPoint&nbsp;point)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;UINT&nbsp;nHit&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;CDialog::OnNcHitTest(point);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;(nHit&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;HTCLIENT&nbsp;</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;HTCAPTION&nbsp;:&nbsp;nHit);<br />}</span></div></div></div><img src ="http://www.cppblog.com/aaxron/aggbug/165724.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2012-02-16 10:24 <a href="http://www.cppblog.com/aaxron/archive/2012/02/16/165724.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WTL::CFileDialog</title><link>http://www.cppblog.com/aaxron/archive/2012/02/13/165467.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 13 Feb 2012 03:09:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/02/13/165467.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/165467.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/02/13/165467.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/165467.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/165467.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">MFC</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">CFileDialog&nbsp;dlg(TRUE,NULL,NULL,NULL,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">数据文档(*.dat)|*.dat|模板文件(*.fpmb)|*.fpmb||</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);&nbsp;<br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">WTL&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">WTL::CFileDialog&nbsp;dlg(TRUE,NULL,NULL,NULL,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">数据文档(*.dat)\0*.dat\0模板文件(*.fpmb)\0*.fpmb\0\0</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /><br />其中文件过滤器,MFC以</span><span style="color: #000000; ">|</span><span style="color: #000000; ">分隔,而WTL以\0分隔.<br /><br /><span style="font-size: 11px;">WTL::CFileDialog dlg(TRUE,0,0,OFN_EXPLORER,_T("Pictures (*.bmp;*.jpg;*.png)\0*.bmp;*.jpg;*.png\0All files (*.*)\0 *.*\0"),*this);</span><br /><br /><br /></span></div><img src ="http://www.cppblog.com/aaxron/aggbug/165467.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2012-02-13 11:09 <a href="http://www.cppblog.com/aaxron/archive/2012/02/13/165467.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>wtl学习笔记(2),WTL(ATL)中的全局变量</title><link>http://www.cppblog.com/aaxron/archive/2011/12/05/161488.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 05 Dec 2011 04:32:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2011/12/05/161488.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/161488.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2011/12/05/161488.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/161488.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/161488.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">WTL(ATL)中的全局变量<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">文件:externs.cpp</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">CAtlAllocator&nbsp;g_Allocator;<br /></span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;g_bInitialized&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Init();<br /><br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">文件:atlbase.cpp</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">ATL::CAtlBaseModule &nbsp;_AtlBaseModule;<br />ATL::CAtlWinModule &nbsp; _AtlWinModule;<br />ATL::CAtlComModule&nbsp;&nbsp;_AtlComModule;<br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">文件:atlapp.h,DEBUG版本中才有</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">WTL::ATL::CTraceCategory&nbsp;atlTraceUI(_T(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">atlTraceUI</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">你自己的应用程序入口文件,文件中包括WinMain()函数</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">CAppModule&nbsp;_Module;<br /><br /><br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">文件:atlbase.h</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">extern</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">C</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;IMAGE_DOS_HEADER&nbsp;__ImageBase;<br /></span><span style="color: #0000FF; ">extern</span><span style="color: #000000; ">&nbsp;CAtlComModule&nbsp;_AtlComModule;<br /></span><span style="color: #0000FF; ">extern</span><span style="color: #000000; ">&nbsp;CAtlWinModule&nbsp;_AtlWinModule;<br />__declspec(selectany)&nbsp;CComModule</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;_pModule&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;NULL;<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">关键的构造函数,请注意成员变量:m_hInst及m_hInstResource,变量:__ImageBase</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">CAtlBaseModule::CAtlBaseModule()&nbsp;</span><span style="color: #0000FF; ">throw</span><span style="color: #000000; ">()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;cbSize&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(_ATL_BASE_MODULE);<br />&nbsp;&nbsp;&nbsp;&nbsp;m_hInst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;m_hInstResource&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; ">HINSTANCE</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">__ImageBase);<br />&nbsp;&nbsp;&nbsp;&nbsp;dwAtlBuildVer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;_ATL_VER;<br />&nbsp;&nbsp;&nbsp;&nbsp;pguidVer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">GUID_ATLVer70;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(FAILED(m_csResource.Init()))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ATLTRACE(atlTraceGeneral,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;_T(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">ERROR&nbsp;:&nbsp;Unable&nbsp;to&nbsp;initialize&nbsp;critical&nbsp;section&nbsp;in&nbsp;CAtlBaseModule\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ATLASSERT(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAtlBaseModule::m_bInitFailed&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">文件:crt0.c</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">__declspec(noinline)&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;__tmainCRTStartup(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">)<br />{<br /></span><span style="color: #0000ff; ">#ifdef&nbsp;</span><span style="color: #993300; ">_WINMAIN_</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;lpszCommandLine&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;_twincmdln();<br />&nbsp;&nbsp;&nbsp;&nbsp;mainret&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;_tWinMain(&nbsp;(HINSTANCE)</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">__ImageBase,&nbsp;NULL,lpszCommandLine,StartupInfo.dwFlags&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;STARTF_USESHOWWINDOW</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;StartupInfo.wShowWindow&nbsp;:&nbsp;SW_SHOWDEFAULT&nbsp;);<br /></span><span style="color: #0000FF; ">#else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;_tinitenv&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;_tenviron;<br />&nbsp;&nbsp;&nbsp;&nbsp;mainret&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;_tmain(__argc,&nbsp;_targv,&nbsp;_tenviron);<br /></span><span style="color: #0000FF; ">#endif</span><span style="color: #000000; "><br />}</span></div> <img src ="http://www.cppblog.com/aaxron/aggbug/161488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2011-12-05 12:32 <a href="http://www.cppblog.com/aaxron/archive/2011/12/05/161488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>wtl学习笔记(1),窗口类的注册</title><link>http://www.cppblog.com/aaxron/archive/2011/12/03/161348.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Sat, 03 Dec 2011 03:54:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2011/12/03/161348.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/161348.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2011/12/03/161348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/161348.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/161348.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="border-bottom-color: #cccccc; border-bottom-width: 1px; border-bottom-style: solid; border-left-color: #cccccc; border-left-width: 1px; border-left-style: solid; padding-bottom: 4px; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top-color: #cccccc; border-top-width: 1px; border-top-style: solid; border-right-color: #cccccc; border-right-width: 1px; border-right-style: solid; padding-top: 4px; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">任何非对话框窗口都是来自CWindowImpl派生<br />对话框窗口都是来自CDialogImpl派生&nbsp;&nbsp;&nbsp;&nbsp;<br />定义一个窗口的实现<br />你的新窗口类需要包含三件事情：<br />一、一个窗口类的定义,如:<br />&nbsp;&nbsp;&nbsp;&nbsp;默认由父类CWindowImpl的DECLARE_WND_CLASS(NULL)&nbsp;完成窗口WNDCLASS结构体的定义.<br />&nbsp;&nbsp;&nbsp;&nbsp;也可以自己通过DECLARE_WND_CLASS(_T(</span><span style="color: #000000">"</span><span style="color: #000000">My&nbsp;Window&nbsp;Class</span><span style="color: #000000">"</span><span style="color: #000000; ">))&nbsp;完成窗口WNDCLASS结构体的定义.<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />二、添加消息映射链<br />&nbsp;&nbsp;&nbsp;&nbsp;其中祖先类CWindowImplRoot继承自CMessageMap<br />三、窗口使用的默认窗口类型，称为称为window&nbsp;traits<br />预定义的window&nbsp;traits:<br />typedef&nbsp;CWinTraits</span><span style="color: #000000">&lt;</span><span style="color: #000000">WS_CHILD&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;WS_VISIBLE&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;WS_CLIPCHILDREN&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;WS_CLIPSIBLINGS,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;CControlWinTraits;<br />typedef&nbsp;CWinTraits</span><span style="color: #000000">&lt;</span><span style="color: #000000">WS_OVERLAPPEDWINDOW&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;WS_CLIPCHILDREN&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;WS_CLIPSIBLINGS,&nbsp;WS_EX_APPWINDOW&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;WS_EX_WINDOWEDGE</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;CFrameWinTraits;<br />typedef&nbsp;CWinTraits</span><span style="color: #000000">&lt;</span><span style="color: #000000">WS_OVERLAPPEDWINDOW&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;WS_CHILD&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;WS_VISIBLE&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;WS_CLIPCHILDREN&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;WS_CLIPSIBLINGS,&nbsp;WS_EX_MDICHILD</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CMDIChildWinTraits;<br />typedef&nbsp;CWinTraits</span><span style="color: #000000">&lt;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;CNullTraits;<br /><br /><br />类继承关系:<br />template&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;T,&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TBase&nbsp;</span><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;=&nbsp;CWindow&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TWinTraits&nbsp;</span><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;=&nbsp;CControlWinTraits&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ATL_NO_VTABLE&nbsp;CWindowImpl&nbsp;:&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;CWindowImplBaseT</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;TBase,&nbsp;TWinTraits&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />{<br />};<br /><br />template&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TBase&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CWindow,&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TWinTraits&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CControlWinTraits</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ATL_NO_VTABLE&nbsp;CWindowImplBaseT&nbsp;:&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;CWindowImplRoot</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;TBase&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />{<br /></span><span style="color: #0000ff">public</span><span style="color: #000000">:<br />&nbsp;&nbsp;&nbsp;&nbsp;WNDPROC&nbsp;m_pfnSuperWindowProc;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CWindowImplBaseT()&nbsp;:&nbsp;m_pfnSuperWindowProc(::DefWindowProc)<br />&nbsp;&nbsp;&nbsp;&nbsp;{}&nbsp;&nbsp;&nbsp;&nbsp;<br />};<br /><br />template&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TBase&nbsp;</span><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;=&nbsp;CWindow&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ATL_NO_VTABLE&nbsp;CWindowImplRoot&nbsp;:&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;TBase,&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;CMessageMap&nbsp;<br />{<br />};<br /><br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">窗口类的注册,宏:DECLARE_WND_CLASS</span><span style="color: #008000"><br /></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;DECLARE_WND_CLASS(WndClassName)&nbsp;\</span><span style="color: #000000"><br /></span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;ATL::CWndClassInfo</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;GetWndClassInfo()&nbsp;\<br />{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;ATL::CWndClassInfo&nbsp;wc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(WNDCLASSEX),&nbsp;CS_HREDRAW&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;CS_VREDRAW&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;CS_DBLCLKS,&nbsp;StartWindowProc,&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;(HBRUSH)(COLOR_WINDOW&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">),&nbsp;NULL,&nbsp;WndClassName,&nbsp;NULL&nbsp;},&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;NULL,&nbsp;IDC_ARROW,&nbsp;TRUE,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;_T(</span><span style="color: #000000">""</span><span style="color: #000000">)&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;wc;&nbsp;\<br />}<br /><br /><br /><br /><br />全局变量:_AtlWinModule,_AtlBaseModule<br /></span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;CAtlWinModule&nbsp;_AtlWinModule;<br /></span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;CAtlBaseModule&nbsp;_AtlBaseModule;<br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">窗口类WNDCLASS结构体的填充</span><span style="color: #008000"><br /></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;_ATL_WNDCLASSINFOA<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;WNDCLASSEXA&nbsp;m_wc;<br />&nbsp;&nbsp;&nbsp;&nbsp;LPCSTR&nbsp;m_lpszOrigName;<br />&nbsp;&nbsp;&nbsp;&nbsp;WNDPROC&nbsp;pWndProc;<br />&nbsp;&nbsp;&nbsp;&nbsp;LPCSTR&nbsp;m_lpszCursorID;<br />&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;m_bSystemCursor;<br />&nbsp;&nbsp;&nbsp;&nbsp;ATOM&nbsp;m_atom;<br />&nbsp;&nbsp;&nbsp;&nbsp;CHAR&nbsp;m_szAutoName[</span><span style="color: #000000">5</span><span style="color: #000000">+</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(</span><span style="color: #0000ff">void</span><span style="color: #000000">*</span><span style="color: #000000">)</span><span style="color: #000000">*</span><span style="color: #000000">CHAR_BIT];<br />&nbsp;&nbsp;&nbsp;&nbsp;ATOM&nbsp;Register(WNDPROC</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;p)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;AtlWinModuleRegisterWndClassInfoA(</span><span style="color: #000000">&amp;</span><span style="color: #000000">_AtlWinModule,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">_AtlBaseModule,&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">,&nbsp;p);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};&nbsp;&nbsp;&nbsp;&nbsp;<br />typedef&nbsp;_ATL_WNDCLASSINFOA&nbsp;CWndClassInfoA;<br /><br />窗口注册过程<br />CMainFrame&nbsp;wndMain;<br />CFrameWindowImpl::Create()<br />ATOM&nbsp;atom&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T::GetWndClassInfo().Register(</span><span style="color: #000000">&amp;</span><span style="color: #000000">m_pfnSuperWindowProc);<br /></span><span style="color: #008000">//</span><span style="color: #008000">模板展开后<br /></span><span style="color: #008000">//</span><span style="color: #008000">ATOM&nbsp;atom&nbsp;=&nbsp;CMainFrame::GetWndClassInfo().Register(&amp;m_pfnSuperWindowProc);<br /></span><span style="color: #008000">//</span><span style="color: #008000">这里的T就是类&nbsp;CMainFrame<br /></span><span style="color: #008000">//</span><span style="color: #008000">然后通过如下代码,返回一个静态变量&nbsp;static&nbsp;WTL::CFrameWndClassInfo&nbsp;wc;</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />CFrameWndClassInfo::Register(</span><span style="color: #000000">&amp;</span><span style="color: #000000">m_pfnSuperWindowProc);<br /></span><span style="color: #008000">//</span><span style="color: #008000">CWindowImplBaseT::m_pfnSuperWindowProc<br /></span><span style="color: #008000">//</span><span style="color: #008000">CWindowImplBaseT()&nbsp;:&nbsp;m_pfnSuperWindowProc(::DefWindowProc){}</span><span style="color: #008000"><br /></span><span style="color: #000000"><br /><br /></span></div>
<p><br /><br /><br />&nbsp;</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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">atlbase.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">atlwin.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">可选的消息处理类</span><span style="color: #008000"><br /></span><span style="color: #000000">template&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">typename&nbsp;T</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;CPaintBkgnd&nbsp;:&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;CMessageMap<br />{<br /></span><span style="color: #0000ff">public</span><span style="color: #000000">:<br />&nbsp;&nbsp;&nbsp;&nbsp;BEGIN_MSG_MAP(CPaintBkgnd)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MESSAGE_HANDLER(WM_ERASEBKGND,&nbsp;OnEraseBkgnd)<br />&nbsp;&nbsp;&nbsp;&nbsp;END_MSG_MAP()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LRESULT&nbsp;OnEraseBkgnd(UINT&nbsp;uMsg,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam,&nbsp;BOOL</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;bHandled)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;pT&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;static_cast</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">*&gt;</span><span style="color: #000000">(</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;&nbsp;dc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(HDC)wParam;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RECT&nbsp;rcClient;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pT</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetClientRect&nbsp;(&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">rcClient&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::FillRect(dc,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">rcClient,&nbsp;CreateSolidBrush(RGB(</span><span style="color: #000000">0xff</span><span style="color: #000000">,</span><span style="color: #000000">0x66</span><span style="color: #000000">,</span><span style="color: #000000">0x99</span><span style="color: #000000">))&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br /><br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;CMyWindow&nbsp;:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;CWindowImpl</span><span style="color: #000000">&lt;</span><span style="color: #000000">CMyWindow,&nbsp;CWindow,CFrameWinTraits</span><span style="color: #000000">&gt;</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;CPaintBkgnd</span><span style="color: #000000">&lt;</span><span style="color: #000000">CMyWindow</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />{<br /></span><span style="color: #0000ff">public</span><span style="color: #000000">:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">DECLARE_WND_CLASS(_T("abc"))</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BEGIN_MSG_MAP(CMyWindow)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MESSAGE_HANDLER(WM_CREATE,&nbsp;OnCreate)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MESSAGE_HANDLER(WM_CLOSE,&nbsp;OnClose)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">CHAIN_MSG_MAP(CPaintBkgnd)</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MESSAGE_HANDLER(WM_ERASEBKGND,&nbsp;OnEraseBkgnd)<br />&nbsp;&nbsp;&nbsp;&nbsp;END_MSG_MAP()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LRESULT&nbsp;OnCreate(UINT&nbsp;uMsg,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam,&nbsp;BOOL</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;bHandled)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ATLTRACE(</span><span style="color: #000000">"</span><span style="color: #000000">WM_CREATE==0x0001,MSG&nbsp;ID:0x%u\n</span><span style="color: #000000">"</span><span style="color: #000000">,uMsg);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;LRESULT&nbsp;OnClose(UINT&nbsp;uMsg,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam,&nbsp;BOOL</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;bHandled)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DestroyWindow();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostQuitMessage(</span><span style="color: #000000">0</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;LRESULT&nbsp;OnEraseBkgnd(UINT&nbsp;uMsg,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam,&nbsp;BOOL</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;bHandled)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;&nbsp;dc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(HDC)&nbsp;wParam;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RECT&nbsp;rcClient;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetClientRect&nbsp;(&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">rcClient&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::FillRect(dc,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">rcClient,&nbsp;CreateSolidBrush(RGB(</span><span style="color: #000000">0xff</span><span style="color: #000000">,</span><span style="color: #000000">0x66</span><span style="color: #000000">,</span><span style="color: #000000">0x00</span><span style="color: #000000">))&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br /><br /><br /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;_tWinMain(HINSTANCE&nbsp;hInstance,&nbsp;HINSTANCE&nbsp;</span><span style="color: #008000">/*</span><span style="color: #008000">hPrevInstance</span><span style="color: #008000">*/</span><span style="color: #000000">,&nbsp;LPTSTR&nbsp;lpstrCmdLine,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;nCmdShow)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CMyWindow&nbsp;wndMain;<br />&nbsp;&nbsp;&nbsp;&nbsp;HWND&nbsp;hWnd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;wndMain.Create(NULL,NULL,</span><span style="color: #000000">"</span><span style="color: #000000">good&nbsp;luck&nbsp;Aaron</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(hWnd</span><span style="color: #000000">==</span><span style="color: #000000">NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::MessageBox(NULL,</span><span style="color: #000000">"</span><span style="color: #000000">创建窗口失败</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">提示</span><span style="color: #000000">"</span><span style="color: #000000">,MB_OK);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;wndMain.ShowWindow(nCmdShow);<br />&nbsp;&nbsp;&nbsp;&nbsp;wndMain.UpdateWindow();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MSG&nbsp;msg;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(&nbsp;GetMessage&nbsp;(&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">msg,&nbsp;NULL,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;)&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TranslateMessage&nbsp;(&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">msg&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DispatchMessage&nbsp;(&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">msg&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />}<br /></span></div>
<p>&nbsp;</p><img src ="http://www.cppblog.com/aaxron/aggbug/161348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2011-12-03 11:54 <a href="http://www.cppblog.com/aaxron/archive/2011/12/03/161348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WTL资源</title><link>http://www.cppblog.com/aaxron/archive/2011/08/19/153845.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 19 Aug 2011 05:36:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2011/08/19/153845.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/153845.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2011/08/19/153845.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/153845.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/153845.html</trackback:ping><description><![CDATA[<div>WTL<br />http://wtl.sourceforge.net/</div><br /><br />VISUALFC<br />http://code.google.com/p/visualfc/downloads/list<br /><br /><br />WTLHELPER<br />Sourceforge 上的项目已经建立起来了, 网址是:&nbsp; &nbsp;<br />http://sourceforge.net/projects/wtlhelper9 <br /><br /><br />http://www.codeproject.com/KB/macros/wtlhelper.aspx<img src ="http://www.cppblog.com/aaxron/aggbug/153845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2011-08-19 13:36 <a href="http://www.cppblog.com/aaxron/archive/2011/08/19/153845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>