<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Clingingboy</title><subtitle type="text">享受技术乐趣</subtitle><id>http://feed.cnblogs.com/blog/u/16497/rss</id><updated>2012-05-21T09:30:31Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/16497/rss"/><entry><id>http://www.cnblogs.com/Clingingboy/archive/2012/05/21/2511386.html</id><title type="text">VC问题记录</title><summary type="text">sizeof用法分析 C++ std::tr1::shared_ptr使用 #ifndef#define#endif的用法 extern "C"的用法解析</summary><published>2012-05-21T03:25:00Z</published><updated>2012-05-21T03:25:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2012/05/21/2511386.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2012/05/21/2511386.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://blog.csdn.net/wangg0717/article/details/4818416"&gt;sizeof用法分析&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.cnblogs.com/kadinzhu/archive/2011/12/12/2284826.html"&gt;C++ std::tr1::shared_ptr使用&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://wenku.baidu.com/view/d98e318984868762caaed5fc.html"&gt;#ifndef#define#endif的用法&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html"&gt;extern &amp;quot;C&amp;quot;的用法解析&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;/li&gt; &lt;/ol&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2511386.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2012/05/21/2511386.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2012/03/09/2387614.html</id><title type="text">Modern C++ Design 学习笔记-第3章</title><summary type="text">1.Length template &lt;class T, class U&gt;struct Typelist{ typedef T Head; typedef U Tail;};class NullType {};template &lt;class TList&gt; struct Length;//特化template &lt;&gt; struct Length&lt;NullType&gt;{ en...</summary><published>2012-03-09T06:46:00Z</published><updated>2012-03-09T06:46:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2012/03/09/2387614.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2012/03/09/2387614.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1.Length&lt;/strong&gt;&lt;/p&gt;  &lt;span class="notranslate"&gt;&lt;span style="color: blue"&gt;template &lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;class &lt;/span&gt;T, &lt;span style="color: blue"&gt;class &lt;/span&gt;U&amp;gt;&lt;br/&gt;&lt;span style="color: blue"&gt;struct &lt;/span&gt;Typelist&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;typedef &lt;/span&gt;T Head;&lt;br/&gt;    &lt;span style="color: blue"&gt;typedef &lt;/span&gt;U Tail;&lt;br/&gt;};&lt;br/&gt;&lt;span style="color: blue"&gt;class &lt;/span&gt;NullType {};&lt;br/&gt;&lt;span style="color: blue"&gt;template &lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;class &lt;/span&gt;TList&amp;gt; &lt;span style="color: blue"&gt;struct &lt;/span&gt;Length;&lt;br/&gt;&lt;span style="color: green"&gt;//特化&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;template &lt;/span&gt;&amp;lt;&amp;gt; &lt;span style="color: blue"&gt;struct &lt;/span&gt;Length&amp;lt;NullType&amp;gt;&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;enum &lt;/span&gt;{ value = 0 };&lt;br/&gt;};&lt;br/&gt;&lt;span style="color: green"&gt;//递归式&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;template &lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;class &lt;/span&gt;T, &lt;span style="color: blue"&gt;class &lt;/span&gt;U&amp;gt;&lt;br/&gt;&lt;span style="color: blue"&gt;struct &lt;/span&gt;Length&amp;lt; Typelist&amp;lt;T, U&amp;gt; &amp;gt;&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;enum &lt;/span&gt;{ value = 1 + Length&amp;lt;U&amp;gt;::value };&lt;br/&gt;};&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;#define &lt;/span&gt;LOKI_TYPELIST_1(T1) Typelist&amp;lt;T1, NullType&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;#define &lt;/span&gt;LOKI_TYPELIST_2(T1, T2) Typelist&amp;lt;T1, LOKI_TYPELIST_1(T2) &amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;#define &lt;/span&gt;LOKI_TYPELIST_3(T1, T2, T3) Typelist&amp;lt;T1, LOKI_TYPELIST_2(T2, T3) &amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;main() &lt;br/&gt;{ &lt;br/&gt;    &lt;span style="color: green"&gt;//3&lt;br/&gt;    &lt;/span&gt;std::size_t n=Length&amp;lt;LOKI_TYPELIST_3(&lt;span style="color: blue"&gt;int&lt;/span&gt;,&lt;span style="color: blue"&gt;int&lt;/span&gt;,&lt;span style="color: blue"&gt;int&lt;/span&gt;)&amp;gt;::value;&lt;br/&gt;}&lt;br/&gt;&lt;/span&gt;&lt;p&gt;&lt;strong&gt;2.typedef typename的定义&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;见此&lt;/p&gt;&lt;span class="notranslate"&gt;&lt;span style="color: blue"&gt;template &lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;class &lt;/span&gt;TList, &lt;span style="color: blue"&gt;unsigned int &lt;/span&gt;index&amp;gt; &lt;span style="color: blue"&gt;struct &lt;/span&gt;TypeAt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;template &lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;class &lt;/span&gt;Head, &lt;span style="color: blue"&gt;class &lt;/span&gt;Tail&amp;gt;&lt;br/&gt;&lt;span style="color: blue"&gt;struct &lt;/span&gt;TypeAt&amp;lt;Typelist&amp;lt;Head, Tail&amp;gt;, 0&amp;gt;&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;typedef &lt;/span&gt;Head Result;&lt;br/&gt;};&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;template &lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;class &lt;/span&gt;Head, &lt;span style="color: blue"&gt;class &lt;/span&gt;Tail, &lt;span style="color: blue"&gt;unsigned int &lt;/span&gt;i&amp;gt;&lt;br/&gt;&lt;span style="color: blue"&gt;struct &lt;/span&gt;TypeAt&amp;lt;Typelist&amp;lt;Head, Tail&amp;gt;, i&amp;gt;&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;typedef typename &lt;/span&gt;TypeAt&amp;lt;Tail, i - 1&amp;gt;::Result Result;&lt;br/&gt;};&lt;br/&gt;&lt;/span&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.163.com/cp7618@yeah/blog/static/70234777201122111034365/"&gt;http://blog.163.com/cp7618@yeah/blog/static/70234777201122111034365/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/carekee/articles/1748675.html"&gt;http://www.cnblogs.com/carekee/articles/1748675.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;typename告诉编译器, 后面的消息XXX::type是一个已经存在于某处的类型的名字(type name)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.TypeAtNonStrict&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;加了一个默认值DefaultType &lt;/p&gt;&lt;span class="notranslate"&gt;&lt;span style="color: blue"&gt;template &lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;class &lt;/span&gt;TList, &lt;span style="color: blue"&gt;unsigned int &lt;/span&gt;index,&lt;br/&gt;    &lt;span style="color: blue"&gt;typename &lt;/span&gt;DefaultType = NullType&amp;gt;&lt;br/&gt;&lt;span style="color: blue"&gt;struct &lt;/span&gt;TypeAtNonStrict&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;typedef &lt;/span&gt;DefaultType Result;&lt;br/&gt;};&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;template &lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;class &lt;/span&gt;Head, &lt;span style="color: blue"&gt;class &lt;/span&gt;Tail, &lt;span style="color: blue"&gt;typename &lt;/span&gt;DefaultType&amp;gt;&lt;br/&gt;&lt;span style="color: blue"&gt;struct &lt;/span&gt;TypeAtNonStrict&amp;lt;Typelist&amp;lt;Head, Tail&amp;gt;, 0, DefaultType&amp;gt;&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;typedef &lt;/span&gt;Head Result;&lt;br/&gt;};&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;template &lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;class &lt;/span&gt;Head, &lt;span style="color: blue"&gt;class &lt;/span&gt;Tail, &lt;span style="color: blue"&gt;unsigned int &lt;/span&gt;i, &lt;span style="color: blue"&gt;typename &lt;/span&gt;DefaultType&amp;gt;&lt;br/&gt;&lt;span style="color: blue"&gt;struct &lt;/span&gt;TypeAtNonStrict&amp;lt;Typelist&amp;lt;Head, Tail&amp;gt;, i, DefaultType&amp;gt;&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;typedef typename &lt;br/&gt;        &lt;/span&gt;TypeAtNonStrict&amp;lt;Tail, i - 1, DefaultType&amp;gt;::Result Result;&lt;br/&gt;};&lt;br/&gt;&lt;/span&gt;&lt;p&gt;&lt;strong&gt;4.IndexOf&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;也是递归式,定义了一个temp临时变量&lt;/p&gt;&lt;span class="notranslate"&gt;&lt;span style="color: blue"&gt;template &lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;class &lt;/span&gt;TList, &lt;span style="color: blue"&gt;class &lt;/span&gt;T&amp;gt; &lt;span style="color: blue"&gt;struct &lt;/span&gt;IndexOf;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;template &lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;class &lt;/span&gt;T&amp;gt;&lt;br/&gt;&lt;span style="color: blue"&gt;struct &lt;/span&gt;IndexOf&amp;lt;NullType, T&amp;gt;&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;enum &lt;/span&gt;{ value = -1 };&lt;br/&gt;};&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;template &lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;class &lt;/span&gt;T, &lt;span style="color: blue"&gt;class &lt;/span&gt;Tail&amp;gt;&lt;br/&gt;&lt;span style="color: blue"&gt;struct &lt;/span&gt;IndexOf&amp;lt;Typelist&amp;lt;T, Tail&amp;gt;, T&amp;gt;&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: blue"&gt;enum &lt;/span&gt;{ value = 0 };&lt;br/&gt;};&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;template &lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;class &lt;/span&gt;Head, &lt;span style="color: blue"&gt;class &lt;/span&gt;Tail, &lt;span style="color: blue"&gt;class &lt;/span&gt;T&amp;gt;&lt;br/&gt;&lt;span style="color: blue"&gt;struct &lt;/span&gt;IndexOf&amp;lt;Typelist&amp;lt;Head, Tail&amp;gt;, T&amp;gt;&lt;br/&gt;{&lt;br/&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt;:&lt;br/&gt;    &lt;span style="color: blue"&gt;enum &lt;/span&gt;{ temp = IndexOf&amp;lt;Tail, T&amp;gt;::value };&lt;br/&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;:&lt;br/&gt;    &lt;span style="color: blue"&gt;enum &lt;/span&gt;{ value = (temp == -1 ? -1 : 1 + temp) };&lt;br/&gt;};&lt;br/&gt;&lt;/span&gt;&lt;p&gt;5.Append&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;6.Erase&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2387614.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2012/03/09/2387614.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2012/02/20/2359985.html</id><title type="text">MFC中的问题记录 2012-2-20</title><summary type="text">模态窗体的实现 bool CWindowWnd::ShowModal(){ ASSERT(::IsWindow(m_hWnd)); HWND hWndParent = GetWindowOwner(m_hWnd); ::ShowWindow(m_hWnd, SW_SHOWNORMAL); ::EnableWindow(hWndPa...</summary><published>2012-02-20T08:28:00Z</published><updated>2012-02-20T08:28:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2012/02/20/2359985.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2012/02/20/2359985.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;模态窗体的实现      &lt;br /&gt;      &lt;br /&gt;      &lt;span class="notranslate"&gt;&lt;span style="color: blue"&gt;bool &lt;/span&gt;CWindowWnd::ShowModal()&lt;br/&gt;{&lt;br/&gt;   ASSERT(::IsWindow(m_hWnd));&lt;br/&gt;   &lt;br/&gt;   HWND hWndParent = GetWindowOwner(m_hWnd);&lt;br/&gt;   ::ShowWindow(m_hWnd, SW_SHOWNORMAL);&lt;br/&gt;   ::EnableWindow(hWndParent, FALSE);&lt;br/&gt;   MSG msg = { 0 };&lt;br/&gt;   &lt;span style="color: blue"&gt;while&lt;/span&gt;( ::IsWindow(m_hWnd) &amp;amp;&amp;amp; ::GetMessage(&amp;amp;msg, NULL, 0, 0) ) {&lt;br/&gt;      &lt;span style="color: blue"&gt;if&lt;/span&gt;( msg.message == WM_CLOSE ) {&lt;br/&gt;         ::EnableWindow(hWndParent, TRUE);&lt;br/&gt;         ::SetFocus(hWndParent);&lt;br/&gt;      }&lt;br/&gt;      &lt;span style="color: blue"&gt;if&lt;/span&gt;( !CPaintManagerUI::TranslateMessage(&amp;amp;msg) ) {&lt;br/&gt;         ::TranslateMessage(&amp;amp;msg);&lt;br/&gt;         ::DispatchMessage(&amp;amp;msg);&lt;br/&gt;      }&lt;br/&gt;      &lt;span style="color: blue"&gt;if&lt;/span&gt;( msg.message == WM_QUIT ) &lt;span style="color: blue"&gt;break&lt;/span&gt;;&lt;br/&gt;   }&lt;br/&gt;   ::EnableWindow(hWndParent, TRUE);&lt;br/&gt;   ::SetFocus(hWndParent);&lt;br/&gt;   &lt;span style="color: blue"&gt;if&lt;/span&gt;( msg.message == WM_QUIT ) ::PostQuitMessage(msg.wParam);&lt;br/&gt;   &lt;span style="color: blue"&gt;return true&lt;/span&gt;;&lt;br/&gt;}&lt;br/&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;br /&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href="http://blog.vckbase.com/iwaswzq/archive/2006/09/12/22380.html"&gt;谈谈父窗口和所有者窗口&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;b&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms632619(v=vs.85).aspx"&gt;WM_NCCREATE&lt;/a&gt;&lt;/b&gt; &lt;/li&gt;  &lt;li&gt;GWLP_USERDATA     &lt;br /&gt;Sets the user data associated with the window. This data is intended for use by the application that created the window. Its value is initially zero. &lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.cppblog.com/cuigang/category/5814.html"&gt;《C++设计新思维》读书笔记&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2359985.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2012/02/20/2359985.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2012/02/14/2351264.html</id><title type="text">Windows Image Lists</title><summary type="text">参考:http://msdn.microsoft.com/en-us/library/bb761389(VS.85).aspx ImageList_Create Creates a new image list. ImageList_AddIcon Adds an icon or cursor to an image list. ImageList_AddIcon ca...</summary><published>2012-02-14T08:33:00Z</published><updated>2012-02-14T08:33:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2012/02/14/2351264.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2012/02/14/2351264.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;参考:&lt;a href="http://msdn.microsoft.com/en-us/library/bb761389(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/bb761389(VS.85).aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;ImageList_Create&lt;/strong&gt; Creates a new image list. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;ImageList_AddIcon&lt;/strong&gt; Adds an icon or cursor to an image list. &lt;b&gt;ImageList_AddIcon&lt;/b&gt; calls the ImageList_ReplaceIcon function. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;ImageList_ReplaceIcon(important)&lt;/strong&gt; Replaces an image with an icon or cursor.&amp;#160; If &lt;i&gt;i&lt;/i&gt; is -1, the function appends the image to the end of the list. Returns the index of the image if successful, or -1 otherwise.&amp;#160;&amp;#160; &lt;/li&gt; &lt;/ol&gt;  &lt;span class="notranslate"&gt;&lt;span style="color: green"&gt;// Create a masked image list large enough to hold the icons. &lt;br/&gt;&lt;/span&gt;HIMAGELIST himlIcons = ImageList_Create(CX_ICON, CY_ICON, ILC_MASK, NUM_ICONS, 0); &lt;br/&gt;&lt;br/&gt;&lt;span style="color: green"&gt;// Load the icon resources, and add the icons to the image list. &lt;br/&gt;&lt;/span&gt;HICON hicon = AfxGetApp()-&amp;gt;LoadIcon(IDR_DEMOTYPE); &lt;br/&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;g_nBird = ImageList_AddIcon(himlIcons, hicon); &lt;br/&gt;&lt;br/&gt;hicon = AfxGetApp()-&amp;gt;LoadIcon(IDR_MAINFRAME); &lt;br/&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;g_nTree = ImageList_AddIcon(himlIcons, hicon);&lt;br/&gt;&lt;/span&gt;&lt;ol&gt;  &lt;li&gt;&lt;strong&gt;ImageList_Add&lt;/strong&gt;&amp;#160; Adds an image or images to an image list. &lt;/li&gt;  &lt;li&gt;&lt;strong&gt;ImageList_Remove&lt;/strong&gt; Removes an image from an image list. &lt;/li&gt;  &lt;li&gt;&lt;strong&gt;ImageList_Replace&lt;/strong&gt; Replaces an image in an image list with a new image. &lt;/li&gt;  &lt;li&gt;&lt;strong&gt;ImageList_GetIcon&lt;/strong&gt; Creates an icon from an image and mask in an image list. &lt;/li&gt;  &lt;li&gt;&lt;strong&gt;ImageList_GetIconSize&lt;/strong&gt; Retrieves the dimensions of images in an image list. All images in an image list have the same dimensions. &lt;/li&gt;  &lt;li&gt;&lt;strong&gt;ImageList_GetImageCount&lt;/strong&gt; Retrieves the number of images in an image list. &lt;/li&gt;  &lt;li&gt;&lt;strong&gt;ImageList_SetImageCount&lt;/strong&gt; Resizes an existing image list. &lt;/li&gt;  &lt;li&gt;&lt;strong&gt;ImageList_Draw&lt;/strong&gt; Draws an image list item in the specified device context. &lt;/li&gt;  &lt;li&gt;&lt;strong&gt;ImageList_Duplicate&lt;/strong&gt; Creates a duplicate of an existing image list. &lt;/li&gt;  &lt;li&gt;&lt;strong&gt;ImageList_SetIconSize&lt;/strong&gt; Sets the dimensions of images in an image list and removes all images from the list. &lt;/li&gt;  &lt;li&gt;&lt;strong&gt;ImageList_LoadImage&lt;/strong&gt;&amp;#160; Creates an image list from the specified bitmap.&lt;/li&gt;  &lt;li&gt;&lt;strong&gt;SHGetImageList&lt;/strong&gt;&amp;#160; Retrieves an image list.&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2351264.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2012/02/14/2351264.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2012/02/14/2350881.html</id><title type="text">Win32 菜单光标</title><summary type="text">漏了写总是心里不舒服2.1 如何动态添加和删除菜单项四个方法:AppendMenu,InsertMenu,RemoveMenu,DeleteMenu/////////////////////////////////////////////////////////////////////////////// CMainFrame message handlersvoid CMainFrame::OnAppendMenu() { //获得主菜单 CMenu* pMenu = GetMenu(); //获得子菜单 CMenu* pSubMenu = pMenu-&gt;GetSub...</summary><published>2012-02-14T04:47:00Z</published><updated>2012-02-14T04:47:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2012/02/14/2350881.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2012/02/14/2350881.html"/><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;漏了写总是心里不舒服&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.1 如何动态添加和删除菜单项&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;四个方法:AppendMenu,InsertMenu,RemoveMenu,DeleteMenu&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #808080;"&gt;///////////////////////////////////////////////////////////////////////////&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; CMainFrame message handlers&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CMainFrame::OnAppendMenu() &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得主菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    CMenu* pMenu = GetMenu();&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得子菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    CMenu* pSubMenu = pMenu-&amp;gt;GetSubMenu(&lt;span style="color: #800080;"&gt;4&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (pSubMenu-&amp;gt;GetMenuItemCount() == &lt;span style="color: #800080;"&gt;4&lt;/span&gt;)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;在菜单末端添加菜单项&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        pSubMenu-&amp;gt;AppendMenu(MF_STRING, ID_TEST_MENU, _T(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;新菜单项&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;));&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;重画菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        DrawMenuBar();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CMainFrame::OnInsertMenu() &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得主菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    CMenu* pMenu = GetMenu();&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得子菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    CMenu* pSubMenu = pMenu-&amp;gt;GetSubMenu(&lt;span style="color: #800080;"&gt;4&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (pSubMenu-&amp;gt;GetMenuItemCount() == &lt;span style="color: #800080;"&gt;4&lt;/span&gt;)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;在菜单指定位置添加菜单项&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        pSubMenu-&amp;gt;InsertMenu(&lt;span style="color: #800080;"&gt;1&lt;/span&gt;, MF_BYPOSITION, ID_TEST_MENU, _T(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;新菜单项&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;));&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;重画菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        DrawMenuBar();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CMainFrame::OnRemoveMenu() &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得主菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    CMenu* pMenu = GetMenu();&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得子菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    CMenu* pSubMenu = pMenu-&amp;gt;GetSubMenu(&lt;span style="color: #800080;"&gt;4&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (pSubMenu-&amp;gt;GetMenuItemCount() == &lt;span style="color: #800080;"&gt;5&lt;/span&gt;)&lt;br /&gt;    {&lt;br /&gt;         &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;删除菜单项&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;         pSubMenu-&amp;gt;RemoveMenu(&lt;span style="color: #800080;"&gt;4&lt;/span&gt;, MF_BYPOSITION);&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;重画菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        DrawMenuBar();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CMainFrame::OnDeleteMenu() &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得主菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    CMenu* pMenu = GetMenu();&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得子菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    CMenu* pSubMenu = pMenu-&amp;gt;GetSubMenu(&lt;span style="color: #800080;"&gt;4&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (pSubMenu-&amp;gt;GetMenuItemCount() == &lt;span style="color: #800080;"&gt;5&lt;/span&gt;)&lt;br /&gt;    {&lt;br /&gt;         &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;删除菜单项&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;         pSubMenu-&amp;gt;DeleteMenu(&lt;span style="color: #800080;"&gt;4&lt;/span&gt;, MF_BYPOSITION);&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;重画菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        DrawMenuBar();&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.2 如何在系统菜单中添加菜单项&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;GetSystemMenu方法&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得系统菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    CMenu* pMenu = GetSystemMenu(FALSE);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;删除系统菜单项&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    pMenu-&amp;gt;RemoveMenu(SC_MOVE, MF_STRING);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加菜单项&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    pMenu-&amp;gt;InsertMenu(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;, MF_BYPOSITION, ID_TEST_MENU, _T(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;测试菜单项&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;));&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2.3 如何禁用关闭按钮&lt;/strong&gt;&lt;/p&gt;EnableMenuItem方法&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得系统菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    CMenu* pMenu = GetSystemMenu(FALSE);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;禁用关闭按钮&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    pMenu-&amp;gt;EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2.4 如何启用和禁用菜单项&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;使用CCmdUI对象&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CMainFrame::OnTestMenu1() &lt;br /&gt;{&lt;br /&gt;    m_bEnable1 = FALSE;&lt;br /&gt;    m_bEnable2 = TRUE;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CMainFrame::OnUpdateTestMenu1(CCmdUI* pCmdUI) &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;启用或禁用菜单1&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    pCmdUI-&amp;gt;Enable(m_bEnable1);    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CMainFrame::OnTestMenu2() &lt;br /&gt;{&lt;br /&gt;    m_bEnable1 = TRUE;&lt;br /&gt;    m_bEnable2 = FALSE;    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CMainFrame::OnUpdateTestMenu2(CCmdUI* pCmdUI) &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;启用或禁用菜单2&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    pCmdUI-&amp;gt;Enable(m_bEnable2);&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2.5 如何设置菜单项的检查状态&lt;/strong&gt;&lt;/p&gt;&lt;span data-mce-=""&gt;CheckMenuItem方法&lt;/span&gt;&lt;span data-mce-=""&gt;CheckMenuRadioItem则是单选&lt;/span&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CMainFrame::OnUpdateTestMenu(CCmdUI* pCmdUI) &lt;br /&gt;{&lt;br /&gt;    CMenu menu;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;menu.CheckMenuItem();&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置菜单项检查状态&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    pCmdUI-&amp;gt;SetCheck(m_nCheck);    &lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2.6 如何实现快捷菜单(右键菜单)&lt;/strong&gt;&lt;/p&gt;TrackPopupMenu方法&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CDemoView::OnContextMenu(CWnd* pWnd, CPoint point) &lt;br /&gt;{&lt;br /&gt;    CMenu menu;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;加载菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!menu.LoadMenu(IDR_MENU))&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得子菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    CMenu* pPopupMenu = menu.GetSubMenu(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;弹出菜单&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    pPopupMenu-&amp;gt;TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, &lt;br /&gt;        point.x, point.y, pWnd);  &lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2.7 如何获得光标的位置&lt;/strong&gt;&lt;/p&gt;m_Point为mousemove时的坐标&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CDemoView::OnDraw(CDC* pDC)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得客户区坐标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    CRect rect;&lt;br /&gt;    GetClientRect(rect);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;绘制十字光标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    pDC-&amp;gt;MoveTo(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;, m_Point.y);&lt;br /&gt;    pDC-&amp;gt;LineTo(rect.Width(), m_Point.y);&lt;br /&gt;    pDC-&amp;gt;MoveTo(m_Point.x, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;);&lt;br /&gt;    pDC-&amp;gt;LineTo(m_Point.x, rect.Height());&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;输出光标坐标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    CString strText =_T(&lt;span style="color: #800000;"&gt;""&lt;/span&gt;);&lt;br /&gt;    strText.Format(_T(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;%d, %d&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;), m_Point.x, m_Point.y);&lt;br /&gt;    pDC-&amp;gt;SetBkMode(TRANSPARENT);&lt;br /&gt;    pDC-&amp;gt;SetTextAlign(TA_RIGHT | TA_BOTTOM);&lt;br /&gt;    pDC-&amp;gt;TextOut(m_Point.x, m_Point.y, strText);&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2.8 如何限制光标的移动范围&lt;/strong&gt;&lt;/p&gt;ClipCursor方法&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CDemoView::OnLButtonDown(UINT nFlags, CPoint point) &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得客户区坐标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    CRect rect;&lt;br /&gt;    GetClientRect(rect);&lt;br /&gt;&lt;br /&gt;    rect.left = rect.left + rect.Width() / &lt;span style="color: #800080;"&gt;4&lt;/span&gt;;&lt;br /&gt;    rect.right = rect.right - rect.Width() / &lt;span style="color: #800080;"&gt;4&lt;/span&gt;;&lt;br /&gt;    rect.top = rect.top + rect.Height() / &lt;span style="color: #800080;"&gt;4&lt;/span&gt;;&lt;br /&gt;    rect.bottom = rect.bottom - rect.Height() / &lt;span style="color: #800080;"&gt;4&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;映射屏幕坐标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    ClientToScreen(rect);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;限制光标移动范围&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    ClipCursor(&amp;amp;rect);&lt;br /&gt;&lt;br /&gt;    CView::OnLButtonDown(nFlags, point);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CDemoView::OnLButtonUp(UINT nFlags, CPoint point) &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;光标自由移动&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    ClipCursor(NULL);&lt;br /&gt;&lt;br /&gt;    CView::OnLButtonUp(nFlags, point);&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2.9 如何使用预定义光标&lt;/strong&gt;&lt;/p&gt;LoadStandardCursor方法和SetCursor方法&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;BOOL CDemoView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置光标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    ::SetCursor(m_hCursor);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; TRUE;&lt;br /&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;    return CView::OnSetCursor(pWnd, nHitTest, message);&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CDemoView::OnLButtonDown(UINT nFlags, CPoint point) &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;加载光标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;     m_hCursor = AfxGetApp()-&amp;gt;LoadStandardCursor(IDC_CROSS);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置光标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    ::SetCursor(m_hCursor);&lt;br /&gt;&lt;br /&gt;    CView::OnLButtonDown(nFlags, point);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CDemoView::OnLButtonUp(UINT nFlags, CPoint point) &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;加载光标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    m_hCursor = AfxGetApp()-&amp;gt;LoadStandardCursor(IDC_SIZENWSE);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置光标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;     ::SetCursor(m_hCursor);&lt;br /&gt;&lt;br /&gt;    CView::OnLButtonUp(nFlags, point);&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2.10 如何使用自定义光标&lt;/strong&gt;&lt;/p&gt;LoadCursor方法载入&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;BOOL CDemoView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置光标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    ::SetCursor(m_hCursor);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; TRUE;&lt;br /&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;    return CView::OnSetCursor(pWnd, nHitTest, message);&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CDemoView::OnLButtonDown(UINT nFlags, CPoint point) &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;加载光标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;     m_hCursor = AfxGetApp()-&amp;gt;LoadCursor(IDC_CURSOR2);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置光标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    ::SetCursor(m_hCursor);&lt;br /&gt;&lt;br /&gt;    CView::OnLButtonDown(nFlags, point);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CDemoView::OnLButtonUp(UINT nFlags, CPoint point) &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;加载光标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    m_hCursor = AfxGetApp()-&amp;gt;LoadCursor(IDC_CURSOR1);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置光标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;     ::SetCursor(m_hCursor);&lt;br /&gt;&lt;br /&gt;    CView::OnLButtonUp(nFlags, point);&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2.11 如何使用等待光标&lt;/strong&gt;&lt;/p&gt;BeginWaitCursor和EndWaitCursor&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; CDemoView::OnLButtonDown(UINT nFlags, CPoint point) &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;启动等待光标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    BeginWaitCursor();&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;休眠&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    Sleep(&lt;span style="color: #800080;"&gt;5000&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;结束等待光标&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    EndWaitCursor();&lt;br /&gt;&lt;br /&gt;    CView::OnLButtonDown(nFlags, point);&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2350881.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2012/02/14/2350881.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2012/01/29/2331472.html</id><title type="text">画自定义尺寸的圆角背景</title><summary type="text">首先准备一个png的圆角背景图 1.分三部分画，可以是”上，中，下”，也可以是“左，中，右” 注意的是圆角的宽度和高度 2.绘制的时候不要忘记设置ImageAttributes的绘制模...</summary><published>2012-01-29T14:09:00Z</published><updated>2012-01-29T14:09:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2012/01/29/2331472.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2012/01/29/2331472.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;首先准备一个png的圆角背景图&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Clingingboy/201201/201201292209142689.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/Clingingboy/201201/201201292209147706.png" width="33" height="39" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;1.分三部分画，可以是”上，中，下”，也可以是“左，中，右”&lt;/p&gt;  &lt;p&gt;注意的是圆角的宽度和高度&lt;/p&gt;  &lt;p&gt;2.绘制的时候不要忘记设置&lt;span class="notranslate"&gt;ImageAttributes的绘制模式,这样就可以画无限的高度和宽度&lt;/span&gt;&lt;/p&gt;  &lt;span class="notranslate"&gt;ImageAttributes imgAtt;&lt;br/&gt;imgAtt.SetWrapMode(WrapModeTileFlipY);&lt;br/&gt;&lt;/span&gt;&lt;p&gt;  &lt;br /&gt;绘制效果&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Clingingboy/201201/201201292209148578.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/Clingingboy/201201/201201292209141086.png" width="190" height="39" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;源码Demo&lt;/p&gt;&lt;span class="notranslate"&gt;&lt;span style="color: blue"&gt;void &lt;/span&gt;DrawMargin(Graphics&amp;amp; g, Image* pImage, Rect&amp;amp; rcDst, Rect&amp;amp; rcSrc, &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginLeft, &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginRight, &lt;br/&gt;    &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginTop, &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginBottom, BOOL bDrawCenter&lt;span style="color: green"&gt;/* = TRUE*/&lt;/span&gt;)&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: green"&gt;//ASSERT(pImage);&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;nImgWidth = pImage-&amp;gt;GetWidth();&lt;br/&gt;    &lt;span style="color: blue"&gt;int &lt;/span&gt;nImgHeight = pImage-&amp;gt;GetHeight();&lt;br/&gt;    Rect rcImage(0, 0, nImgWidth, nImgHeight);&lt;br/&gt;    &lt;span style="color: green"&gt;//ASSERT(rcImage.Contains(rcSrc));&lt;br/&gt;&lt;br/&gt;    //ASSERT((rcSrc.Width &amp;gt; (nMarginLeft + nMarginRight)) &amp;amp;&amp;amp; (rcSrc.Height &amp;gt; (nMarginTop + nMarginBottom)));&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;((rcDst.Width &amp;lt;= (nMarginLeft + nMarginRight)) || (rcDst.Height &amp;lt;= (nMarginTop + nMarginBottom)))&lt;br/&gt;        g.DrawImage(pImage, rcDst, rcSrc.X, rcSrc.Y, rcSrc.Width, rcSrc.Height, UnitPixel);&lt;br/&gt;&lt;br/&gt;    ImageAttributes imgAtt;&lt;br/&gt;&lt;br/&gt;    &lt;span style="color: green"&gt;//上&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginTop)&lt;br/&gt;    {&lt;br/&gt;        &lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginLeft)&lt;br/&gt;        {&lt;br/&gt;            Rect rcTopLeft(rcDst.X, rcDst.Y, nMarginLeft, nMarginTop);&lt;br/&gt;            g.DrawImage(pImage, rcTopLeft, rcSrc.X, rcSrc.Y, nMarginLeft, nMarginTop, UnitPixel);&lt;br/&gt;        }&lt;br/&gt;        Rect rcTop(rcDst.X + nMarginLeft, rcDst.Y, rcDst.Width - nMarginLeft - nMarginRight, nMarginTop);&lt;br/&gt;        imgAtt.SetWrapMode(WrapModeTileFlipX);&lt;br/&gt;        g.DrawImage(pImage, rcTop, rcSrc.X + nMarginLeft, rcSrc.Y, rcSrc.Width - nMarginLeft - nMarginRight, nMarginTop, UnitPixel, &amp;amp;imgAtt);&lt;br/&gt;        &lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginRight)&lt;br/&gt;        {&lt;br/&gt;            Rect rcTopRight(rcDst.GetRight() - nMarginRight, rcDst.Y, nMarginRight, nMarginTop);&lt;br/&gt;            g.DrawImage(pImage, rcTopRight, rcSrc.GetRight() - nMarginRight, rcSrc.Y, nMarginRight, nMarginTop, UnitPixel);&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;    &lt;br/&gt;    &lt;span style="color: green"&gt;//中&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginLeft)&lt;br/&gt;    {&lt;br/&gt;        Rect rcLeft(rcDst.X, rcDst.Y + nMarginTop, nMarginLeft, rcDst.Height - nMarginTop - nMarginBottom);&lt;br/&gt;        imgAtt.SetWrapMode(WrapModeTileFlipY);&lt;br/&gt;        g.DrawImage(pImage, rcLeft, rcSrc.X, rcSrc.Y + nMarginTop, nMarginLeft, rcSrc.Height - nMarginTop - nMarginBottom, UnitPixel, &amp;amp;imgAtt);&lt;br/&gt;    }&lt;br/&gt;    &lt;span style="color: blue"&gt;if&lt;/span&gt;(bDrawCenter)&lt;br/&gt;    {&lt;br/&gt;        Rect rcCenter(rcDst.X + nMarginLeft, rcDst.Y + nMarginTop, rcDst.Width - nMarginLeft - nMarginRight, rcDst.Height - nMarginTop - nMarginBottom);&lt;br/&gt;        imgAtt.SetWrapMode(WrapModeTileFlipXY);&lt;br/&gt;        g.DrawImage(pImage, rcCenter, rcSrc.X + nMarginLeft, rcSrc.Y + nMarginTop, rcSrc.Width - nMarginLeft - nMarginRight, rcSrc.Height - nMarginTop - nMarginBottom, UnitPixel, &amp;amp;imgAtt);&lt;br/&gt;    }&lt;br/&gt;    &lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginRight)&lt;br/&gt;    {&lt;br/&gt;        Rect rcRight(rcDst.GetRight() - nMarginRight, rcDst.Y + nMarginTop, nMarginRight, rcDst.Height - nMarginTop - nMarginBottom);&lt;br/&gt;        imgAtt.SetWrapMode(WrapModeTileFlipY);&lt;br/&gt;        g.DrawImage(pImage, rcRight, rcSrc.GetRight() - nMarginRight, rcSrc.Y + nMarginTop, nMarginRight, rcSrc.Height - nMarginTop - nMarginBottom, UnitPixel, &amp;amp;imgAtt);&lt;br/&gt;    }&lt;br/&gt;    &lt;br/&gt;    &lt;span style="color: green"&gt;//下&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginTop)&lt;br/&gt;    {&lt;br/&gt;        &lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginLeft)&lt;br/&gt;        {&lt;br/&gt;            Rect rcBottomLeft(rcDst.X, rcDst.GetBottom() - nMarginBottom, nMarginLeft, nMarginBottom);&lt;br/&gt;            g.DrawImage(pImage, rcBottomLeft, rcSrc.X, rcSrc.GetBottom() - nMarginBottom, nMarginLeft, nMarginBottom, UnitPixel);&lt;br/&gt;        }&lt;br/&gt;        Rect rcBottom(rcDst.X + nMarginLeft, rcDst.GetBottom() - nMarginBottom, rcDst.Width - nMarginLeft - nMarginRight, nMarginBottom);&lt;br/&gt;        imgAtt.SetWrapMode(WrapModeTileFlipX);&lt;br/&gt;        g.DrawImage(pImage, rcBottom, rcSrc.X + nMarginLeft, rcSrc.GetBottom() - nMarginBottom, rcSrc.Width - nMarginLeft - nMarginRight, nMarginBottom, UnitPixel, &amp;amp;imgAtt);&lt;br/&gt;        &lt;span style="color: blue"&gt;if&lt;/span&gt;(nMarginRight)&lt;br/&gt;        {&lt;br/&gt;            Rect rcBottomRight(rcDst.GetRight() - nMarginRight, rcDst.GetBottom() - nMarginBottom, nMarginRight, nMarginBottom);&lt;br/&gt;            g.DrawImage(pImage, rcBottomRight, rcSrc.GetRight() - nMarginRight, rcSrc.GetBottom() - nMarginBottom, nMarginRight, nMarginBottom, UnitPixel);&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;span style="color: blue"&gt;void &lt;/span&gt;DrawMargin1(Graphics&amp;amp; g, Image* pImage, Rect&amp;amp; rcDst, &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginLeft, &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginRight, &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginTop, &lt;span style="color: blue"&gt;int &lt;/span&gt;nMarginBottom)&lt;br/&gt;{&lt;br/&gt;&lt;br/&gt;    &lt;span style="color: blue"&gt;int &lt;/span&gt;nImgWidth = pImage-&amp;gt;GetWidth();&lt;br/&gt;    &lt;span style="color: blue"&gt;int &lt;/span&gt;nImgHeight = pImage-&amp;gt;GetHeight();&lt;br/&gt;    Rect rcSrc(0, 0, nImgWidth, nImgHeight);&lt;br/&gt;&lt;br/&gt;    DrawMargin(g, pImage, rcDst, rcSrc, nMarginLeft, nMarginRight, nMarginTop, nMarginBottom, TRUE);&lt;br/&gt;}&lt;br/&gt;&lt;/span&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2331472.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2012/01/29/2331472.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2012/01/09/2317602.html</id><title type="text">MFC中的一些问题记录</title><summary type="text">1.CWnd中PreCreateWindow、PreSubclassWindow、SubclassWindow的区别 2.</summary><published>2012-01-09T14:59:00Z</published><updated>2012-01-09T14:59:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2012/01/09/2317602.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2012/01/09/2317602.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://blog.csdn.net/xjh_love_paopao/article/details/2666494"&gt;CWnd中PreCreateWindow、PreSubclassWindow、SubclassWindow的区别&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.csdn.net/lixiaosan/article/details/653563"&gt;【原】CListCtrl 使用技巧&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.vckbase.com/document/viewdoc/?id=1855"&gt;改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.csdn.net/hustli/article/details/19355"&gt;深度解析VC中的消息（上）&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeproject.com/Tips/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc.aspx"&gt;What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR etc?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.csdn.net/sdeeds/article/details/6859530"&gt;关于WM_ERASEBKGND和WM_PAINT的深刻理解&lt;/a&gt;       &lt;br /&gt;关于重绘背景的理解：每次重绘，必须有一个背景色，默认情况下,windows处理了这个背景色消息。       &lt;br /&gt;这里有两个动作需要处理: 1.清除背景(注意不是背景色,可以理解为清除画布)2.然后重新绘制背景色       &lt;br /&gt;如果返回return true,则告诉系统已经自己处理过了，不需要系统来重绘背景色       &lt;br /&gt;参考opengl:&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2010/10/16/1853038.html"&gt;http://www.cnblogs.com/Clingingboy/archive/2010/10/16/1853038.html&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://baike.baidu.com/view/1226797.htm"&gt;InvalidateRect&lt;/a&gt; MFC的Invalidate方法默认重绘整个窗体 &lt;/li&gt;    &lt;li&gt;GDI+ 绘制超链接文本,定义&lt;span class="notranslate"&gt;StringFormat 的&lt;/span&gt;SetLineAlignment       &lt;br /&gt;      &lt;span class="notranslate"&gt;StringFormat stringFormat;&lt;br/&gt;stringFormat.SetLineAlignment(StringAlignmentCenter);&lt;br/&gt;stringFormat.SetFormatFlags(StringFormatFlagsLineLimit | StringFormatFlagsNoWrap);&lt;br/&gt;&lt;/span&gt;    &lt;br /&gt;&lt;/li&gt;  &lt;li&gt;&amp;#160; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://hi.baidu.com/sonmeika/blog/item/9b59462755773e00918f9d91.html"&gt;使用API判断网络是否连通(InternetGetConnectedState / IsNetworkAlive)&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.cnblogs.com/GnagWang/archive/2010/09/12/1824394.html"&gt;关于WM_NCHITTEST消息&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.codeproject.com/KB/MFC/CustomWindow.aspx"&gt;http://www.codeproject.com/KB/MFC/CustomWindow.aspx&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://wenku.baidu.com/view/47e8a4649b6648d7c1c7463c.html"&gt;C++变量命名规则&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.codeproject.com/KB/menus/bcmenu.aspx"&gt;自绘菜单&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.cnblogs.com/Caiqinghua/archive/2008/12/25/1362411.html"&gt;WM_CTLCOLOR消息&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&amp;#160;&lt;a href="http://topic.csdn.net/u/20101115/22/4f15d24a-f77a-4298-91d5-9082a2b510d3.html"&gt;_tcslen(&amp;quot;.....&amp;quot;)和stlen(&amp;quot;.....&amp;quot;)函数有什么区别&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blog.csdn.net/kusoul/article/details/5915091"&gt;InternetOpen具体三种方式的使用&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.cnblogs.com/carekee/articles/1940183.html"&gt;VC++得到任务栏的高度和位置的方法&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://topic.csdn.net/u/20080314/10/ace67938-c279-4a72-b41d-0592690d3701.html?895856764"&gt;任务栏位置&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.cnblogs.com/frogchao/archive/2010/12/15/1906644.html"&gt;SAFEARRAY使用实例&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.cnblogs.com/wubiyu/archive/2009/03/02/1401522.html"&gt;在COM中使用数组参数-SafeArray&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://wenku.baidu.com/view/549410232f60ddccda38a0c3.html"&gt;浅析C++内存分配方式&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blog.csdn.net/liquanhai/article/details/6280276"&gt;目前比较热的GUI 总结&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2012/01/29/2331472.html"&gt;画自定义尺寸的圆角背景&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms647996(VS.85).aspx"&gt;设置右键菜单某个项为粗体&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://topic.csdn.net/u/20090901/22/c4d66375-0d05-4ac8-979d-7cc4eb33bd18.html"&gt;悬浮窗右键菜单第二次无法自动隐藏的问题&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://wenku.baidu.com/view/95ccb97ea26925c52cc5bf72.html"&gt;SetWindowPos&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://topic.csdn.net/t/20021212/19/1256253.html"&gt;DeleteMenu和RemoveMenu的区别&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.cnblogs.com/wubiyu/archive/2008/06/05/1214654.html"&gt;Custom Draw&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blog.csdn.net/twater2000/article/details/65501"&gt;用VC实现TOOL TIP&lt;/a&gt; (EnableToolTips,OnToolHitTest,TTN_NEEDTEXT)&lt;a href="http://www.hackbase.com/lib/2007-11-05/13159.html"&gt;VC中给树形控件的图标加上工具提示&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.cnblogs.com/xiangshancuizhu/archive/2011/09/27/2193486.html"&gt;VC6.0 文件拖拽&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.cnblogs.com/henryzc/articles/279801.html"&gt;Window下拖放操作Drag &amp;amp; Drop 全解析&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href="http://blog.sina.com.cn/s/blog_5ee42ba30100g50j.html"&gt;防止CListCtrl闪烁的几种方法&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2317602.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2012/01/09/2317602.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2011/12/03/2275119.html</id><title type="text">WinINet Asynchronous</title><summary type="text">先参考此文档http://wenku.baidu.com/view/4f3558edf8c75fbfc77db229.html的第13页 demo参考 http://www.codeproj...</summary><published>2011-12-03T15:57:00Z</published><updated>2011-12-03T15:57:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2011/12/03/2275119.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2011/12/03/2275119.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;先参考此文档&lt;a href="http://wenku.baidu.com/view/4f3558edf8c75fbfc77db229.html"&gt;http://wenku.baidu.com/view/4f3558edf8c75fbfc77db229.html&lt;/a&gt;的第13页&lt;/p&gt;  &lt;p&gt;demo参考&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeproject.com/KB/IP/WinInetTest.aspx"&gt;http://www.codeproject.com/KB/IP/WinInetTest.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeproject.com/KB/IP/asynchttp.aspx"&gt;http://www.codeproject.com/KB/IP/asynchttp.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeproject.com/KB/IP/asyncwininet.aspx"&gt;http://www.codeproject.com/KB/IP/asyncwininet.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;关于WinHTTP和WinINet&lt;/p&gt;  &lt;p&gt;&lt;a href="http://alienchang.iteye.com/blog/1155248"&gt;http://alienchang.iteye.com/blog/1155248&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/awpatp/archive/2010/10/10/1847285.html"&gt;http://www.cnblogs.com/awpatp/archive/2010/10/10/1847285.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa384068.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa384068.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2275119.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2011/12/03/2275119.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2265348.html</id><title type="text">WinINet function(2)Request</title><summary type="text">参考此文档：http://wenku.baidu.com/view/4f3558edf8c75fbfc77db229.html 参考:http://wenku.baidu.com/view/b...</summary><published>2011-11-27T14:06:00Z</published><updated>2011-11-27T14:06:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2265348.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2265348.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;参考此文档：&lt;a href="http://wenku.baidu.com/view/4f3558edf8c75fbfc77db229.html"&gt;http://wenku.baidu.com/view/4f3558edf8c75fbfc77db229.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;参考:&lt;a href="http://wenku.baidu.com/view/b5364b87ec3a87c24028c438.html"&gt;http://wenku.baidu.com/view/b5364b87ec3a87c24028c438.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;InternetOpenUrl的内部&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1.InternetConnect&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Opens an File Transfer Protocol (FTP), Gopher, or HTTP session for a given site.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2.HttpOpenRequest&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Creates an HTTP request handle.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3.HttpSendRequest&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Sends the specified request to the HTTP server.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4.HttpQueryInfo&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Retrieves header information associated with an HTTP request.&lt;/p&gt;  &lt;p&gt;Demo&lt;/p&gt;  &lt;span class="notranslate"&gt;&lt;span style="color: #010001"&gt;HINTERNET hInternet &lt;/span&gt;= &lt;span style="color: #010001"&gt;InternetOpen&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;HttpAuth Sample&amp;quot;&lt;/span&gt;,             &lt;span style="color: green"&gt;// app name&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #010001"&gt;INTERNET_OPEN_TYPE_PRECONFIG&lt;/span&gt;,  &lt;span style="color: green"&gt;// access type&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;,                          &lt;span style="color: green"&gt;// proxy server&lt;br/&gt;        &lt;/span&gt;0,                             &lt;span style="color: green"&gt;// proxy port&lt;br/&gt;        &lt;/span&gt;0);                            &lt;span style="color: green"&gt;// flags&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #010001"&gt;HINTERNET hConnect &lt;/span&gt;= ::&lt;span style="color: #010001"&gt;InternetConnect&lt;/span&gt;(&lt;span style="color: #010001"&gt;hInternet&lt;/span&gt;,&lt;br/&gt;                                    &lt;span style="color: #a31515"&gt;&amp;quot;www.microsoft.com&amp;quot;&lt;/span&gt;,&lt;br/&gt;                                    &lt;span style="color: #010001"&gt;INTERNET_INVALID_PORT_NUMBER&lt;/span&gt;,&lt;br/&gt;                                    &lt;span style="color: #a31515"&gt;&amp;quot;&amp;quot;&lt;/span&gt;,&lt;br/&gt;                                    &lt;span style="color: #a31515"&gt;&amp;quot;&amp;quot;&lt;/span&gt;,&lt;br/&gt;                                    &lt;span style="color: #010001"&gt;INTERNET_SERVICE_HTTP&lt;/span&gt;,&lt;br/&gt;                                    0,&lt;br/&gt;                                    0) ;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #010001"&gt;HINTERNET hHttpFile &lt;/span&gt;= ::&lt;span style="color: #010001"&gt;HttpOpenRequest&lt;/span&gt;(&lt;span style="color: #010001"&gt;hConnect&lt;/span&gt;,&lt;br/&gt;                                        &lt;span style="color: #a31515"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;,&lt;br/&gt;                                        &lt;span style="color: #a31515"&gt;&amp;quot;/MSDN/MSDNINFO/&amp;quot;&lt;/span&gt;,&lt;br/&gt;                                        &lt;span style="color: #010001"&gt;HTTP_VERSION&lt;/span&gt;,&lt;br/&gt;                                        &lt;span style="color: #010001"&gt;NULL&lt;/span&gt;,&lt;br/&gt;                                        0,&lt;br/&gt;                                        &lt;span style="color: #010001"&gt;INTERNET_FLAG_DONT_CACHE&lt;/span&gt;,&lt;br/&gt;                                        0) ;&lt;br/&gt;&lt;span style="color: #010001"&gt;BOOL bSendRequest &lt;/span&gt;= ::&lt;span style="color: #010001"&gt;HttpSendRequest&lt;/span&gt;(&lt;span style="color: #010001"&gt;hHttpFile&lt;/span&gt;, &lt;span style="color: #010001"&gt;NULL&lt;/span&gt;, 0, 0, 0);&lt;br/&gt;&lt;br/&gt;&lt;span style="color: green"&gt;// Get the length of the file.            &lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;char &lt;/span&gt;&lt;span style="color: #010001"&gt;bufQuery&lt;/span&gt;[32] ;&lt;br/&gt;&lt;span style="color: #010001"&gt;DWORD dwLengthBufQuery &lt;/span&gt;= &lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;bufQuery&lt;/span&gt;);&lt;br/&gt;&lt;span style="color: #010001"&gt;BOOL bQuery &lt;/span&gt;= ::&lt;span style="color: #010001"&gt;HttpQueryInfo&lt;/span&gt;(&lt;span style="color: #010001"&gt;hHttpFile&lt;/span&gt;,&lt;br/&gt;                              &lt;span style="color: #010001"&gt;HTTP_QUERY_CONTENT_LENGTH&lt;/span&gt;, &lt;br/&gt;                              &lt;span style="color: #010001"&gt;bufQuery&lt;/span&gt;, &lt;br/&gt;                              &amp;amp;&lt;span style="color: #010001"&gt;dwLengthBufQuery&lt;/span&gt;,&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;) ;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: green"&gt;// Convert length from ASCII string to a DWORD.&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #010001"&gt;DWORD dwFileSize &lt;/span&gt;= (&lt;span style="color: #010001"&gt;DWORD&lt;/span&gt;)&lt;span style="color: #010001"&gt;atol&lt;/span&gt;(&lt;span style="color: #010001"&gt;bufQuery&lt;/span&gt;) ;&lt;br/&gt;&lt;span style="color: green"&gt;// Allocate a buffer for the file.   &lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;char&lt;/span&gt;* &lt;span style="color: #010001"&gt;buffer &lt;/span&gt;= &lt;span style="color: blue"&gt;new char&lt;/span&gt;[&lt;span style="color: #010001"&gt;dwFileSize&lt;/span&gt;+1] ;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: green"&gt;// Read the file into the buffer. &lt;br/&gt;&lt;/span&gt;&lt;span style="color: #010001"&gt;DWORD dwBytesRead &lt;/span&gt;;&lt;br/&gt;&lt;span style="color: #010001"&gt;BOOL bRead &lt;/span&gt;= ::&lt;span style="color: #010001"&gt;InternetReadFile&lt;/span&gt;(&lt;span style="color: #010001"&gt;hHttpFile&lt;/span&gt;,&lt;br/&gt;                                &lt;span style="color: #010001"&gt;buffer&lt;/span&gt;,&lt;br/&gt;                                &lt;span style="color: #010001"&gt;dwFileSize&lt;/span&gt;+1, &lt;br/&gt;                                &amp;amp;&lt;span style="color: #010001"&gt;dwBytesRead&lt;/span&gt;);&lt;br/&gt;&lt;span style="color: #010001"&gt;buffer&lt;/span&gt;[&lt;span style="color: #010001"&gt;dwBytesRead&lt;/span&gt;] = 0 ;&lt;/span&gt;&lt;p&gt;Other functions&lt;/p&gt;&lt;p&gt;&lt;strong&gt;HttpAddRequestHeaders&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Adds one or more HTTP request headers to the HTTP request handle.&lt;/p&gt;&lt;p&gt;参考:&lt;a href="http://www.cnblogs.com/songsu/articles/1346782.html"&gt;http://www.cnblogs.com/songsu/articles/1346782.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;InternetSetCookie&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Creates a cookie associated with the specified URL.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;InternetGetCookie&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Retrieves the cookie for the specified URL.&lt;/p&gt;&lt;span class="notranslate"&gt;&lt;span style="color: #010001"&gt;BOOL res&lt;/span&gt;=&lt;span style="color: #010001"&gt;InternetSetCookie&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;http://www.microsoft.com&amp;quot;&lt;/span&gt;,&lt;span style="color: #a31515"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;,&lt;span style="color: #a31515"&gt;&amp;quot;test&amp;quot;&lt;/span&gt;);&lt;br/&gt;&lt;span style="color: #010001"&gt;TCHAR cookie&lt;/span&gt;[1024];&lt;br/&gt;&lt;span style="color: #010001"&gt;DWORD leh&lt;/span&gt;;&lt;br/&gt;&lt;span style="color: #010001"&gt;res&lt;/span&gt;=&lt;span style="color: #010001"&gt;InternetGetCookie&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;http://www.microsoft.com&amp;quot;&lt;/span&gt;,&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;,&lt;span style="color: #010001"&gt;cookie&lt;/span&gt;,&amp;amp;&lt;span style="color: #010001"&gt;leh&lt;/span&gt;);&lt;/span&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2265348.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2265348.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2264882.html</id><title type="text">WinINet function(1)</title><summary type="text">一.Url相关函数 1.InternetCreateUrl Cracks a URL into its component parts. #define URL_STRING_TEST ...</summary><published>2011-11-27T02:48:00Z</published><updated>2011-11-27T02:48:00Z</updated><author><name>Clingingboy</name><uri>http://www.cnblogs.com/Clingingboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2264882.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2264882.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;一.Url相关函数&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1.InternetCreateUrl&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Cracks a URL into its component parts.&lt;/p&gt;  &lt;span class="notranslate"&gt;&lt;span style="color: blue"&gt;#define &lt;/span&gt;&lt;span style="color: #010001"&gt;URL_STRING_TEST    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;http://www.cnblogs.com/Clingingboy/archive/2011/11/20/2256200.html&amp;quot;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;void &lt;/span&gt;&lt;span style="color: #010001"&gt;main&lt;/span&gt;()&lt;br/&gt;{   &lt;br/&gt;    &lt;span style="color: #010001"&gt;TCHAR szHostName&lt;/span&gt;[128];&lt;br/&gt;    &lt;span style="color: #010001"&gt;TCHAR szUrlPath&lt;/span&gt;[256];&lt;br/&gt;    &lt;span style="color: #010001"&gt;URL_COMPONENTS crackedURL&lt;/span&gt;;&lt;br/&gt;    &lt;span style="color: #010001"&gt;ZeroMemory&lt;/span&gt;(&amp;amp;&lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;, &lt;span style="color: blue"&gt;sizeof &lt;/span&gt;(&lt;span style="color: #010001"&gt;URL_COMPONENTS&lt;/span&gt;));&lt;br/&gt;    &lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;.&lt;span style="color: #010001"&gt;dwStructSize     &lt;/span&gt;= &lt;span style="color: blue"&gt;sizeof &lt;/span&gt;(&lt;span style="color: #010001"&gt;URL_COMPONENTS&lt;/span&gt;);&lt;br/&gt;    &lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;.&lt;span style="color: #010001"&gt;lpszHostName     &lt;/span&gt;= &lt;span style="color: #010001"&gt;szHostName&lt;/span&gt;;&lt;br/&gt;    &lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;.&lt;span style="color: #010001"&gt;dwHostNameLength &lt;/span&gt;= &lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;szHostName&lt;/span&gt;);&lt;br/&gt;    &lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;.&lt;span style="color: #010001"&gt;lpszUrlPath      &lt;/span&gt;= &lt;span style="color: #010001"&gt;szUrlPath&lt;/span&gt;;&lt;br/&gt;    &lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;.&lt;span style="color: #010001"&gt;dwUrlPathLength  &lt;/span&gt;= &lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;szUrlPath&lt;/span&gt;);&lt;br/&gt;    &lt;span style="color: #010001"&gt;InternetCrackUrl&lt;/span&gt;(&lt;span style="color: #010001"&gt;URL_STRING_TEST&lt;/span&gt;,(&lt;span style="color: #010001"&gt;DWORD&lt;/span&gt;)&lt;span style="color: #010001"&gt;strlen&lt;/span&gt;(&lt;span style="color: #010001"&gt;URL_STRING_TEST&lt;/span&gt;),0,&amp;amp;&lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;);&lt;br/&gt;}&lt;/span&gt;&lt;p&gt;&lt;strong&gt;2.InternetCreateUrl&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Creates a URL from its component parts.&lt;/p&gt;&lt;span class="notranslate"&gt;&lt;span style="color: #010001"&gt;DWORD urlLength&lt;/span&gt;;&lt;br/&gt;&lt;span style="color: #010001"&gt;InternetCreateUrl&lt;/span&gt;(&amp;amp;&lt;span style="color: #010001"&gt;crackedURL&lt;/span&gt;,&lt;span style="color: #010001"&gt;ICU_ESCAPE&lt;/span&gt;,&lt;span style="color: #010001"&gt;szUrlPath&lt;/span&gt;,&amp;amp;&lt;span style="color: #010001"&gt;urlLength&lt;/span&gt;);&lt;/span&gt;&lt;p&gt;&lt;strong&gt;3.InternetCanonicalizeUrl&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Canonicalizes a URL, which includes converting unsafe characters and spaces into escape sequences.&lt;/p&gt;&lt;span class="notranslate"&gt;&lt;span style="color: #010001"&gt;InternetCanonicalizeUrl&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;http://www.xxx.com/viewthread.php?action=printable&amp;amp;amp;tid=99     &amp;quot;&lt;/span&gt;,&lt;span style="color: #010001"&gt;szUrlPath&lt;/span&gt;,&amp;amp;&lt;span style="color: #010001"&gt;urlLength&lt;/span&gt;,&lt;span style="color: #010001"&gt;ICU_ENCODE_SPACES_ONLY&lt;/span&gt;);&lt;/span&gt;&lt;p&gt;&lt;strong&gt;4.InternetCombineUrl&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Combines a base and relative URL into a single URL. &lt;/p&gt;&lt;span class="notranslate"&gt;&lt;span style="color: #010001"&gt;InternetCombineUrl&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;http://www.xxx.com/&amp;quot;&lt;/span&gt;,&lt;span style="color: #a31515"&gt;&amp;quot;2256200.html&amp;quot;&lt;/span&gt;,&lt;span style="color: #010001"&gt;szUrlPath&lt;/span&gt;,&amp;amp;&lt;span style="color: #010001"&gt;urlLength&lt;/span&gt;,&lt;span style="color: #010001"&gt;ICU_BROWSER_MODE&lt;/span&gt;);&lt;/span&gt;&lt;p&gt;&lt;strong&gt;二.Internet基本应用相关函数&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.InternetOpen&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Initializes an application's use of the WinINet functions.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.InternetOpenUrl&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Opens a resource specified by a complete FTP, Gopher, or HTTP URL.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.InternetReadFile&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Reads data from a handle opened by the &lt;a href="ms-help://ms.msdnqtr.v90.chs/wininet/wininet/internetopenurl.htm"&gt;&lt;b&gt;InternetOpenUrl&lt;/b&gt;&lt;/a&gt;, &lt;a href="ms-help://ms.msdnqtr.v90.chs/wininet/wininet/ftpopenfile.htm"&gt;&lt;b&gt;FtpOpenFile&lt;/b&gt;&lt;/a&gt;, &lt;a href="ms-help://ms.msdnqtr.v90.chs/wininet/wininet/gopheropenfile.htm"&gt;&lt;b&gt;GopherOpenFile&lt;/b&gt;&lt;/a&gt;, or &lt;a href="ms-help://ms.msdnqtr.v90.chs/wininet/wininet/httpopenrequest.htm"&gt;&lt;b&gt;HttpOpenRequest&lt;/b&gt;&lt;/a&gt; function&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4.InternetCloseHandle&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Closes a single Internet handle.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;应用1:打开因特网上指定的文件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Clingingboy/201111/201111271048285209.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/Clingingboy/201111/201111271048281588.png" width="685" height="387" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;span class="notranslate"&gt;&lt;span style="color: blue"&gt;void &lt;/span&gt;&lt;span style="color: #010001"&gt;Download&lt;/span&gt;()&lt;br/&gt;{&lt;br/&gt;&lt;br/&gt;    &lt;span style="color: #010001"&gt;DWORD byteread&lt;/span&gt;=0;&lt;br/&gt;    &lt;span style="color: blue"&gt;char &lt;/span&gt;&lt;span style="color: #010001"&gt;buffer&lt;/span&gt;[100];&lt;br/&gt;    &lt;span style="color: #010001"&gt;memset&lt;/span&gt;(&lt;span style="color: #010001"&gt;buffer&lt;/span&gt;,0,100);&lt;br/&gt;    &lt;span style="color: #010001"&gt;HINTERNET internetopen&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;    &lt;span style="color: #010001"&gt;internetopen&lt;/span&gt;=&lt;span style="color: #010001"&gt;InternetOpen&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Testing&amp;quot;&lt;/span&gt;,&lt;span style="color: #010001"&gt;INTERNET_OPEN_TYPE_PRECONFIG&lt;/span&gt;,&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;,&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;,0);&lt;br/&gt;    &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #010001"&gt;internetopen&lt;/span&gt;==&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;)&lt;br/&gt;    { &lt;br/&gt;        &lt;span style="color: #010001"&gt;cout&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #a31515"&gt;&amp;quot;Internet open failed!&amp;quot;&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #010001"&gt;endl&lt;/span&gt;;&lt;br/&gt;        &lt;span style="color: blue"&gt;return&lt;/span&gt;;&lt;br/&gt;    }&lt;br/&gt;    &lt;span style="color: #010001"&gt;HINTERNET internetopenurl&lt;/span&gt;;&lt;br/&gt;    &lt;span style="color: #010001"&gt;internetopenurl&lt;/span&gt;=&lt;span style="color: #010001"&gt;InternetOpenUrl&lt;/span&gt;(&lt;span style="color: #010001"&gt;internetopen&lt;/span&gt;,&lt;span style="color: #a31515"&gt;&amp;quot;http://www.cnblogs.com/Clingingboy/archive/2011/11/20/2256200.html&amp;quot;&lt;/span&gt;,&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;,0,&lt;span style="color: #010001"&gt;INTERNET_FLAG_RELOAD&lt;/span&gt;,0);  &lt;br/&gt;    &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #010001"&gt;internetopenurl&lt;/span&gt;==&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;)&lt;br/&gt;    { &lt;br/&gt;        &lt;span style="color: #010001"&gt;cout&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #a31515"&gt;&amp;quot;Internet open url failed!&amp;quot;&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #010001"&gt;endl&lt;/span&gt;; &lt;br/&gt;        &lt;span style="color: blue"&gt;goto &lt;/span&gt;&lt;span style="color: #010001"&gt;there&lt;/span&gt;;&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    &lt;span style="color: #010001"&gt;BOOL hwrite&lt;/span&gt;;&lt;br/&gt;    &lt;span style="color: #010001"&gt;DWORD written&lt;/span&gt;;&lt;br/&gt;    &lt;span style="color: #010001"&gt;HANDLE createfile&lt;/span&gt;;&lt;br/&gt;    &lt;span style="color: #010001"&gt;createfile&lt;/span&gt;=&lt;span style="color: #010001"&gt;CreateFile&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;C://a.html&amp;quot;&lt;/span&gt;,&lt;span style="color: #010001"&gt;GENERIC_WRITE&lt;/span&gt;,0,0,&lt;span style="color: #010001"&gt;CREATE_ALWAYS&lt;/span&gt;,&lt;span style="color: #010001"&gt;FILE_ATTRIBUTE_NORMAL&lt;/span&gt;,0);&lt;br/&gt;    &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #010001"&gt;createfile&lt;/span&gt;==&lt;span style="color: #010001"&gt;INVALID_HANDLE_VALUE&lt;/span&gt;)&lt;br/&gt;    {  &lt;br/&gt;        &lt;span style="color: #010001"&gt;cout&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #a31515"&gt;&amp;quot;Create File failed!&amp;quot;&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #010001"&gt;endl&lt;/span&gt;;&lt;br/&gt;        &lt;span style="color: blue"&gt;goto &lt;/span&gt;&lt;span style="color: #010001"&gt;next&lt;/span&gt;;&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    &lt;span style="color: #010001"&gt;BOOL internetreadfile&lt;/span&gt;;&lt;br/&gt;    &lt;span style="color: blue"&gt;while&lt;/span&gt;(1)&lt;br/&gt;    {&lt;br/&gt;        &lt;span style="color: #010001"&gt;internetreadfile&lt;/span&gt;=&lt;span style="color: #010001"&gt;InternetReadFile&lt;/span&gt;(&lt;span style="color: #010001"&gt;internetopenurl&lt;/span&gt;,&lt;span style="color: #010001"&gt;buffer&lt;/span&gt;,&lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;buffer&lt;/span&gt;),&amp;amp;&lt;span style="color: #010001"&gt;byteread&lt;/span&gt;);&lt;br/&gt;        &lt;span style="color: blue"&gt;if&lt;/span&gt;(&lt;span style="color: #010001"&gt;byteread&lt;/span&gt;==0)  &lt;br/&gt;            &lt;span style="color: blue"&gt;break&lt;/span&gt;;&lt;br/&gt;        &lt;span style="color: #010001"&gt;hwrite&lt;/span&gt;=&lt;span style="color: #010001"&gt;WriteFile&lt;/span&gt;(&lt;span style="color: #010001"&gt;createfile&lt;/span&gt;,&lt;span style="color: #010001"&gt;buffer&lt;/span&gt;,&lt;span style="color: blue"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #010001"&gt;buffer&lt;/span&gt;),&amp;amp;&lt;span style="color: #010001"&gt;written&lt;/span&gt;,&lt;span style="color: #010001"&gt;NULL&lt;/span&gt;);&lt;br/&gt;        &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: #010001"&gt;hwrite&lt;/span&gt;==0)&lt;br/&gt;        {&lt;br/&gt;            &lt;span style="color: #010001"&gt;cout&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #a31515"&gt;&amp;quot;Write to file failed!&amp;quot;&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #010001"&gt;endl&lt;/span&gt;;&lt;br/&gt;            &lt;span style="color: blue"&gt;goto &lt;/span&gt;&lt;span style="color: #010001"&gt;here&lt;/span&gt;;&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    &lt;span style="color: #010001"&gt;cout&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #a31515"&gt;&amp;quot;Finished downloading!&amp;quot;&lt;/span&gt;&amp;lt;&amp;lt;&lt;span style="color: #010001"&gt;endl&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #010001"&gt;here&lt;/span&gt;:&lt;br/&gt;    &lt;span style="color: #010001"&gt;CloseHandle&lt;/span&gt;(&lt;span style="color: #010001"&gt;createfile&lt;/span&gt;);&lt;br/&gt;&lt;span style="color: #010001"&gt;next&lt;/span&gt;: &lt;br/&gt;    &lt;span style="color: #010001"&gt;InternetCloseHandle&lt;/span&gt;(&lt;span style="color: #010001"&gt;internetopenurl&lt;/span&gt;);&lt;br/&gt;&lt;span style="color: #010001"&gt;there&lt;/span&gt;:&lt;br/&gt;    &lt;span style="color: #010001"&gt;InternetCloseHandle&lt;/span&gt;(&lt;span style="color: #010001"&gt;internetopen&lt;/span&gt;);&lt;br/&gt;&lt;br/&gt;}&lt;/span&gt;&lt;p&gt;&lt;strong&gt;三.连接检查函数&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.InternetCheckConnection&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Allows an application to check if a connection to the Internet can be established.&lt;/p&gt;&lt;span class="notranslate"&gt;&lt;span style="color: #010001"&gt;BOOL result&lt;/span&gt;=&lt;span style="color: #010001"&gt;InternetCheckConnection&lt;/span&gt;(&lt;span style="color: #010001"&gt;URL_STRING_TEST&lt;/span&gt;,&lt;span style="color: #010001"&gt;FLAG_ICC_FORCE_CONNECTION&lt;/span&gt;,0);&lt;/span&gt;&lt;p&gt;&lt;strong&gt;2.InternetAttemptConnect&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Attempts to make a connection to the Internet.&lt;/p&gt;&lt;span class="notranslate"&gt;&lt;span style="color: #010001"&gt;BOOL result&lt;/span&gt;=&lt;span style="color: #010001"&gt;InternetAttemptConnect&lt;/span&gt;(0);&lt;/span&gt;&lt;img src="http://www.cnblogs.com/Clingingboy/aggbug/2264882.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2011/11/27/2264882.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
