﻿<?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++博客-天下-随笔分类-Win32</title><link>http://www.cppblog.com/aaxron/category/15296.html</link><description>记录修行的印记
</description><language>zh-cn</language><lastBuildDate>Thu, 18 May 2017 07:06:27 GMT</lastBuildDate><pubDate>Thu, 18 May 2017 07:06:27 GMT</pubDate><ttl>60</ttl><item><title>MoveWindow() SetWindowPos()的区别与联系</title><link>http://www.cppblog.com/aaxron/archive/2017/05/17/214944.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Wed, 17 May 2017 10:56:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2017/05/17/214944.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/214944.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2017/05/17/214944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/214944.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/214944.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; width: 98%; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">MoveWindow()&nbsp;SetWindowPos()的区别与联系<br /></span><span style="color: #008000">转自<a href="http://www.cnblogs.com/songliquan/p/3359002.html">http://www.cnblogs.com/songliquan/p/3359002.html</a><br /></span><span style="color: #000000"><br />先看MoveWindow()函数，用于改变窗口的位置和尺寸，对于顶层窗口，按照屏幕对齐与左上角，对于子窗口，则对齐与父窗口的左上角。<br /><br />BOOL&nbsp;MoveWindow(&nbsp;HWND&nbsp;hWnd,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;x,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;y,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;nWidth,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;nHeight,BOOL&nbsp;bRepaint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;TRUE);<br />参数hWnd表示窗口句柄；<br />参数x,y表示窗口的左上角起点；<br />参数nwidth，nHeight&nbsp;表示窗口高度和宽度；<br />最后一个bRepaint表示是否立即重绘。为true时系统会立即发送WM_PAINT到窗口程序（会调用UpdateWindow()函数），为false时不会发生任何类型的重绘操作。<br /><br />MoveWindow会给窗口发送WM_WINDOWPOSCHANGING，WM_WINDOWPOSCHANGED，WM_MOVE，WM_SIZE和WM_NCCALCSIZE消息。<br /><br />接下来看SetWindowPos(),这个函数同样用来实现窗口移动操作，只不过功能更多一点。<br /><br />BOOL&nbsp;SetWindowPos(HWND&nbsp;hWnd,</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;CWnd</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pWndInsertAfter,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;x,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;y,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cx,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cy,&nbsp;UINT&nbsp;nFlags);<br />第一个参数是窗口句柄；<br />第二个参数是窗口的Z&nbsp;order，就是有多个窗口时，本窗口显示的顺序，最上面或者最下面，可选参数有:HWND_BOTTOM,HWND_NOTOPMOST,HWND_TOP,HWND_TOPMOST.<br />HWND_BOTTOM：将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口，则窗口失去顶级位置，并且被置在其他窗口的底部。&nbsp;&nbsp;　　&nbsp;<br />HWND_NOTOPMOST：将窗口置于所有非顶层窗口之上（即在所有顶层窗口之后）。如果窗口已经是非顶层窗口则该标志不起作用。&nbsp;&nbsp;　　&nbsp;<br />HWND_TOP:将窗口置于Z序的顶部。&nbsp;&nbsp;　　&nbsp;<br />HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。&nbsp;<br />接下来四个参数是窗口的位置和尺寸。<br />最后一个参数nFlags是窗口显示方式的标志，这个参数很多，可以组合使用，详细如下：<br />SWP_ASNCWINDOWPOS：如果调用进程不拥有窗口，系统会向拥有窗口的线程发出需求。这就防止调用线程在其他线程处理需求的时候发生死锁。&nbsp;&nbsp;　　<br />SWP_DEFERERASE：防止产生WM_SYNCPAINT消息。&nbsp;&nbsp;　　<br />SWP_DRAWFRAME：在窗口周围画一个边框（定义在窗口类描述中）。&nbsp;&nbsp;　　<br />SWP_FRAMECHANGED：给窗口发送WM_NCCALCSIZE消息，即使窗口尺寸没有改变也会发送该消息。如果未指定这个标志，只有在改变了窗口尺寸时才发送WM_NCCALCSIZE。&nbsp;<br />SWP_HIDEWINDOW;隐藏窗口。&nbsp;<br />SWP_NOACTIVATE：不激活窗口。如果未设置标志，则窗口被激活，并被设置到其他最高级窗口或非最高级组的顶部（根据参数hWndlnsertAfter设置）。&nbsp;<br />SWP_NOCOPYBITS：清除客户区的所有内容。如果未设置该标志，客户区的有效内容被保存并且在窗口尺寸更新和重定位后拷贝回客户区。&nbsp;<br />SWP_NOMOVE：维持当前位置（忽略X和Y参数）。&nbsp;&nbsp;　　<br />SWP_NOOWNERZORDER：不改变z序中的所有者窗口的位置。&nbsp;<br />SWP_NOREDRAW:不重画改变的内容。如果设置了这个标志，则不发生任何重画动作。适用于客户区和非客户区（包括标题栏和滚动条）和任何由于窗回移动而露出的父窗口的所有部分。如果设置了这个标志，应用程序必须明确地使窗口无效并重画窗口的任何部分和父窗口需要重画的部分。&nbsp;<br />SWP_NOREPOSITION；与SWP_NOOWNERZORDER标志相同。&nbsp;&nbsp;　&nbsp;&nbsp;&nbsp;SWP_NOSENDCHANGING：防止窗口接收WM_WINDOWPOSCHANGING消息。&nbsp;<br />SWP_NOSIZE：维持当前尺寸（忽略cx和Cy参数）。&nbsp;<br />SWP_NOZORDER：维持当前Z序（忽略hWndlnsertAfter参数）。&nbsp;<br />SWP_SHOWWINDOW：显示窗口。<br />注意事项：<br />使用SetWindowPos()如果设置了SWP_SHOWWINDOWS或者SWP_HIDEWINDOW，那么窗口将不能被移动和改变大小，我使用时就是设置了SWP_SHOWWINDOW,从而导致不能重绘背景。<br /><br />两者的比较：<br />两者都能实现移动和改变窗口大小。<br /><br />MoveWindow()功能比较单一，只能移动和改变窗口大小，而SetWindowPos()可以设置更多的参数，实现Zorder及显示方式标志。<br /><br />MoveWindow()发送WM_WINDOWPOSCHANGING，WM_WINDOWPOSCHANGED，WM_MOVE，WM_SIZE和WM_NCCALCSIZE等消息到窗口，SetWindowPos()只发送WM_WINDOWPOSCHANGED消息到窗口。所以说如果需要发送更多消息时还是使用MoveWindow()的好。</span></div><img src ="http://www.cppblog.com/aaxron/aggbug/214944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2017-05-17 18:56 <a href="http://www.cppblog.com/aaxron/archive/2017/05/17/214944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Xtreme ToolKit 日志控件</title><link>http://www.cppblog.com/aaxron/archive/2017/05/16/214936.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 16 May 2017 03:06:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2017/05/16/214936.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/214936.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2017/05/16/214936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/214936.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/214936.html</trackback:ping><description><![CDATA[<img style="border-top-color: ; border-left-color: ; border-bottom-color: ; border-right-color: " border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/aaxron/2017-05-16_105919.png" width="490" longdesc="" height="357" /><br /><br /><a style="color: " href="/Files/aaxron/OppoTestX.rar">/Files/aaxron/OppoTestX.rar</a><img src ="http://www.cppblog.com/aaxron/aggbug/214936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2017-05-16 11:06 <a href="http://www.cppblog.com/aaxron/archive/2017/05/16/214936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]VC中常用的文档类，视图类，框架类，应用程序类，自定义类中获取其它四个类的方法 </title><link>http://www.cppblog.com/aaxron/archive/2016/05/30/213608.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 30 May 2016 06:02:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/05/30/213608.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/213608.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/05/30/213608.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/213608.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/213608.html</trackback:ping><description><![CDATA[<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">[转]VC中常用的文档类，视图类，框架类，应用程序类，自定义类中获取其它四个类的方法&nbsp;<br />A:&nbsp;<br />GET&nbsp;App&nbsp;<br />&nbsp;&nbsp;&nbsp;AfxGetInstanceHandle()&nbsp;<br />&nbsp;&nbsp;&nbsp;AfxGetApp()&nbsp;<br />GET&nbsp;Frame</span><span style="color: #000000">-&gt;</span><span style="color: #000000">View</span><span style="color: #000000">-&gt;</span><span style="color: #000000">Document&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SDI&nbsp;&nbsp;&nbsp;AfxGetMainWnd()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetActiveView()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetDocument()&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MDI&nbsp;&nbsp;&nbsp;AfxGetMainWnd()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">MDIGetActive()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetActiveView()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetDocument()&nbsp;<br />GET&nbsp;Menu&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMenu&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pMenu</span><span style="color: #000000">=</span><span style="color: #000000">AfxGetApp()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">m_pMainWnd</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetMenu();&nbsp;<br />GET&nbsp;ToolBar，StatusBar&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(CMainFrame&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">)GetParent()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">m_wndToolBar;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(CMainFrame&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">)GetParent()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">m_wndStatusBar;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CStatusBar&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pStatusBa</span><span style="color: #000000">=</span><span style="color: #000000">(CStatusBar</span><span style="color: #000000">*</span><span style="color: #000000">)AfxGetMainWnd()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetDescendantWindow(AFX_IDW_STATUS_BAR);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CToolBar&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pToolBar</span><span style="color: #000000">=</span><span style="color: #000000">(CtoolBar</span><span style="color: #000000">*</span><span style="color: #000000">)AfxGetMainWnd()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetDescendantWindow(AFX_IDW_TOOLBAR);&nbsp;<br />Get&nbsp;View&nbsp;from&nbsp;Document&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetFirstViewPosition&nbsp;和&nbsp;GetNextView&nbsp;函数得到指针。&nbsp;<br />最后提醒:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;在提取到各个句柄之后，因为初次提取的都是标准类句柄，所以，在使用时要注意将标准句柄转换成自己的类的句柄。<br />&nbsp;&nbsp;&nbsp;&nbsp;((CMyApp</span><span style="color: #000000">*</span><span style="color: #000000">)AfxGetApp())</span><span style="color: #000000">-&gt;</span><span style="color: #000000">XXXX（）；</span><span style="color: #008000">//</span><span style="color: #008000">这的xxxx()就是你定义的类中间的成员。</span><span style="color: #008000"><br /></span><span style="color: #000000"><br /></span><span style="color: #000000">**********************************************************************************************************</span><span style="color: #000000"><br /></span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;在View中获得Doc指针&nbsp;<br /></span><span style="color: #000000">2</span><span style="color: #000000">)&nbsp;在App中获得MainFrame指针&nbsp;<br /></span><span style="color: #000000">3</span><span style="color: #000000">)&nbsp;在View中获得MainFrame指针&nbsp;<br /></span><span style="color: #000000">4</span><span style="color: #000000">)&nbsp;获得View（已建立）指针&nbsp;<br /></span><span style="color: #000000">5</span><span style="color: #000000">)&nbsp;获得当前文档指针&nbsp;<br /></span><span style="color: #000000">6</span><span style="color: #000000">)&nbsp;获得状态栏与工具栏指针&nbsp;<br /></span><span style="color: #000000">7</span><span style="color: #000000">)&nbsp;获得状态栏与工具栏变量&nbsp;<br /></span><span style="color: #000000">8</span><span style="color: #000000">)&nbsp;在Mainframe获得菜单指针&nbsp;<br /></span><span style="color: #000000">9</span><span style="color: #000000">)&nbsp;在任何类中获得应用程序类&nbsp;<br /></span><span style="color: #000000">10</span><span style="color: #000000">)&nbsp;从文档类取得视图类的指针(</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;<br /></span><span style="color: #000000">11</span><span style="color: #000000">)&nbsp;在App中获得文档模板指针&nbsp;<br /></span><span style="color: #000000">12</span><span style="color: #000000">)&nbsp;从文档模板获得文档类指针&nbsp;<br /></span><span style="color: #000000">13</span><span style="color: #000000">)&nbsp;在文档类中获得文档模板指针&nbsp;<br /></span><span style="color: #000000">14</span><span style="color: #000000">)&nbsp;从文档类取得视图类的指针(</span><span style="color: #000000">2</span><span style="color: #000000">)&nbsp;<br /></span><span style="color: #000000">15</span><span style="color: #000000">)&nbsp;从一个视图类取得另一视图类的指针&nbsp;<br /><br />VC中编程对于刚刚开始学习的同学，最大的障碍和问题就是消息机制和指针获取与操作。其实这些内容基本上是每本VC学习工具书上必讲的内容，而且通过MSDN很多问题都能解决。下面文字主要是个人在编程中指针使用的一些体会，说的不当的地方请指正。一般我们使用的框架是VC提供的Wizard生成的MFC&nbsp;App&nbsp;Wizard(exe)框架，&nbsp;<br />无论是多文档还是单文档，都存在指针获取和操作问题。下面这节内容主要是一般的框架，然后再讲多线程中的指针使用。使用到的类需要包含响应的头文件。首先一般获得本类(视，文档，对话框都支持)实例指针this，用this的目的，主要可以通过类中的函数向其他类或者函数中发指针，以便于在非本类中操作和使用本类中的&nbsp;<br />功能。&nbsp;<br /><br /></span><span style="color: #000000">1</span><span style="color: #000000">）&nbsp;在View中获得Doc指针&nbsp;CYouSDIDoc&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pDoc</span><span style="color: #000000">=</span><span style="color: #000000">GetDocument();一个视只能有一个文档。&nbsp;<br /></span><span style="color: #000000">2</span><span style="color: #000000">)&nbsp;在App中获得MainFrame指针&nbsp;<br />CWinApp&nbsp;中的&nbsp;m_pMainWnd变量就是MainFrame的指针&nbsp;<br />也可以：&nbsp;CMainFrame&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pMain&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">(CMainFrame&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">)AfxGetMainWnd();&nbsp;<br /></span><span style="color: #000000">3</span><span style="color: #000000">)&nbsp;在View中获得MainFrame指针&nbsp;CMainFrame&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pMain</span><span style="color: #000000">=</span><span style="color: #000000">(CmaimFrame&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">)AfxGetApp()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">m_pMainWnd;&nbsp;<br /></span><span style="color: #000000">4</span><span style="color: #000000">)&nbsp;获得View（已建立）指针CyouView&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pView</span><span style="color: #000000">=</span><span style="color: #000000">(CyouView&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">)pMain</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetActiveView();&nbsp;<br /></span><span style="color: #000000">5</span><span style="color: #000000">)&nbsp;获得当前文档指针&nbsp;CDocument&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pCurrentDoc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">(CFrameWnd&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">)m_pMainWnd</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetActiveDocument();&nbsp;<br /></span><span style="color: #000000">6</span><span style="color: #000000">)&nbsp;获得状态栏与工具栏指针&nbsp;CStatusBar&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pStatusBar＝(CStatusBar&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">)AfxGetMainWnd()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetDescendantWindow(AFX_IDW_STATUS_BAR);&nbsp;<br />CToolBar&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pToolBar</span><span style="color: #000000">=</span><span style="color: #000000">(CtoolBar&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">)AfxGetMainWnd()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetDescendantWindow(AFX_IDW_TOOLBAR);&nbsp;<br /><br /></span><span style="color: #000000">7</span><span style="color: #000000">)&nbsp;如果框架中加入工具栏和状态栏变量还可以这样&nbsp;<br />(CMainFrame&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">)GetParent()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">m_wndToolBar;&nbsp;<br />(CMainFrame&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">)GetParent()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">m_wndStatusBar;&nbsp;<br /><br /></span><span style="color: #000000">8</span><span style="color: #000000">)&nbsp;在Mainframe获得菜单指针&nbsp;<br />CMenu&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pMenu</span><span style="color: #000000">=</span><span style="color: #000000">m_pMainWnd</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetMenu();&nbsp;<br /><br /></span><span style="color: #000000">9</span><span style="color: #000000">)&nbsp;在任何类中获得应用程序类&nbsp;<br />用MFC全局函数AfxGetApp()获得。&nbsp;<br /><br /></span><span style="color: #000000">10</span><span style="color: #000000">)&nbsp;从文档类取得视图类的指针&nbsp;<br />CDocument类提供了两个函数用于视图类的定位：&nbsp;<br />GetFirstViewPosition()和GetNextView()&nbsp;<br /></span><span style="color: #0000ff">virtual</span><span style="color: #000000">&nbsp;POSITION&nbsp;GetFirstViewPosition()&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">;&nbsp;<br /></span><span style="color: #0000ff">virtual</span><span style="color: #000000">&nbsp;CView</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;GetNextView(POSITION</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;rPosition)&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">;&nbsp;<br /><br />注意：GetNextView()括号中的参数用的是引用方式，因此执行后值可能改变。&nbsp;<br />GetFirstViewPosition()用于返回第一个视图位置（返回的并非视图类指针，而是一个POSITION类型值），GetNextView()有两个功能：返回下一个视图类的指针以及用引用调用的方式来改变传入的POSITION类型参数的值。很明显，在Test程序中，只有一个视图类，因此只需将这两个函数调用一次即可得到CTestView的指针如下（需定义一个POSITION结构变量来辅助操作）：&nbsp;<br />CTestView</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pTestView;&nbsp;<br />POSITION&nbsp;pos</span><span style="color: #000000">=</span><span style="color: #000000">GetFirstViewPosition();&nbsp;<br />pTestView</span><span style="color: #000000">=</span><span style="color: #000000">GetNextView(pos);&nbsp;<br /><br />这样，便可到了CTestView类的指针pTestView.执行完几句后，变量pos</span><span style="color: #000000">=</span><span style="color: #000000">NULL,因为没有下一个视图类，自然也没有下一个视图类的POSITION.但是这几条语句太简单，不具有太强的通用性和安全特征；当象前面说的那样，当要在多个视图为中返回某个指定类的指针时，我们需要遍历所有视图类，直到找到指定类为止。判断一个类指针指向的是否某个类的实例时，可用IsKindOf()成员函数时行检查，如：&nbsp;<br />pView</span><span style="color: #000000">-&gt;</span><span style="color: #000000">IsKindOf(RUNTIME_CLASS(CTestView));&nbsp;<br />即可检查pView所指是否是CTestView类。&nbsp;<br /><br />有了以上基础，我们已经可以从文档类取得任何类的指针。为了方便，我们将其作为一个文档类的成员函数，它有一个参数，表示要获得哪个类的指针。实现如下：&nbsp;<br />CView</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;CTestDoc::GetView(CRuntimeClass</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pClass)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CView</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pView;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;POSITION&nbsp;pos</span><span style="color: #000000">=</span><span style="color: #000000">GetFirstViewPosition();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(pos</span><span style="color: #000000">!=</span><span style="color: #000000">NULL)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pView</span><span style="color: #000000">=</span><span style="color: #000000">GetNextView(pos);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">pView</span><span style="color: #000000">-&gt;</span><span style="color: #000000">IsKindOf(pClass))&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">pView</span><span style="color: #000000">-&gt;</span><span style="color: #000000">IsKindOf(pClass))&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox(</span><span style="color: #000000">"</span><span style="color: #000000">Connt&nbsp;Locate&nbsp;the&nbsp;View.\r\n</span><span style="color: #000000">"</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;NULL;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;pView;&nbsp;<br />}&nbsp;<br /><br />其中用了两次视图类的成员函数IsKindOf()来判断，是因为退出while循环有三种&nbsp;<br />可能：&nbsp;<br /></span><span style="color: #000000">1</span><span style="color: #000000">.pos为NULL，即已经不存在下一个视图类供操作；&nbsp;<br /></span><span style="color: #000000">2</span><span style="color: #000000">.pView已符合要求。&nbsp;<br /><br />1和2同是满足。这是因为GetNextView()的功能是将当前视图指针改变成一个视图的位置同时返回当前视图指针，因此pos是pView的下一个视图类的POSITION,完全有可能既是pos</span><span style="color: #000000">==</span><span style="color: #000000">NULL又是pView符合需要。当所需的视图是最后一个视图是最后一个视图类时就如引。因此需采用两次判断。&nbsp;使用该函数应遵循如下格式（以取得CTestView指针为例）：&nbsp;<br />CTestView</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pTestView</span><span style="color: #000000">=</span><span style="color: #000000">(CTestView</span><span style="color: #000000">*</span><span style="color: #000000">)GetView(RUNTIME_CLASS(CTestView));&nbsp;<br />RUNTIME_CLASS是一个宏，可以简单地理解它的作用：将类的名字转化为&nbsp;<br />CRuntimeClass为指针。至于强制类型转换也是为了安全特性考虑的，因为从同一个基类之间的指针类型是互相兼容的。这种强制类型转换也许并不必要，但能避免一些可能出现的麻烦。&nbsp;<br /><br /></span><span style="color: #000000">3</span><span style="color: #000000">.从一个视图类取得另一视图类的指针&nbsp;综合1和2，很容易得出视图类之间互相获得指针的方法：就是用文档类作中转，先用1的方法得到文档类的指针，再用2的方法，以文档类的视图定位函数取得另一个视图类。同样，可以实现成一个函数：&nbsp;<br />（假设要从CTestAView中取得指向其它视图类的指针）&nbsp;<br />CView</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;CTestAView::GetView(CRuntimeClass</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pClass)&nbsp;<br />{&nbsp;<br />CTestDoc</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pDoc</span><span style="color: #000000">=</span><span style="color: #000000">(CTestDoc</span><span style="color: #000000">*</span><span style="color: #000000">)GetDocument();&nbsp;<br />CView</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pView;&nbsp;<br />POSITION&nbsp;pos</span><span style="color: #000000">=</span><span style="color: #000000">pDoc</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetFirstViewPosition();&nbsp;<br /></span><span style="color: #0000ff">while</span><span style="color: #000000">(pos</span><span style="color: #000000">!=</span><span style="color: #000000">NULL){&nbsp;<br />pView</span><span style="color: #000000">=</span><span style="color: #000000">pDoc</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetNextView(pos);&nbsp;<br /></span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">pView</span><span style="color: #000000">-&gt;</span><span style="color: #000000">IsKindOf(pClass))&nbsp;<br /></span><span style="color: #0000ff">break</span><span style="color: #000000">;&nbsp;<br />}&nbsp;<br /></span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">pView</span><span style="color: #000000">-&gt;</span><span style="color: #000000">IsKindOf(pClass)){&nbsp;<br />AfxMessageBox(</span><span style="color: #000000">"</span><span style="color: #000000">Connt&nbsp;Locate&nbsp;the&nbsp;View.</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br /></span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;NULL;&nbsp;<br />}&nbsp;<br /></span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;pView;&nbsp;<br />}&nbsp;<br />这个函数和2中的GetView()相比，一是多了第一句以取得文档类指针，二是在GetFirstViewPosition()和GetNextView()前加上了文档类指针，以表示它们是文档&nbsp;<br />类成员函数。有了此函数；当要从CTestAView中取得CTestBView的指针时，只需如下：CTestBView</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pTestbView</span><span style="color: #000000">=</span><span style="color: #000000">(CTestView</span><span style="color: #000000">*</span><span style="color: #000000">)GetView(RUNTIME_CLASS(CTestBView));&nbsp;<br /><br /><br /></span><span style="color: #000000">11</span><span style="color: #000000">）对于单文档中也可以加入多个文档模板，但是一般的开发就使用MDI方式开发多文档模板，其方法与上述视图的获取方法很接近，这里稍做解释，如果不清楚，请查阅MSDN<br /><br />可以用CWinApp::GetFirstDocTemplatePostion获得应用程序注册的第一个文档模板&nbsp;<br />的位置；利用该值来调用CWinApp::GetNextDocTemplate函数，获得第一个CDocTemplate对象指针。&nbsp;<br />POSITION&nbsp;GetFirstDocTemplate(&nbsp;)&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">;&nbsp;<br />CDocTemplate&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">GetNextDocTemplate(&nbsp;POSITION&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;pos&nbsp;)&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">;&nbsp;<br /><br />第二个函数返回由pos&nbsp;标识的文档模板。POSITION是MFC定义的一个用于迭代或对象指针检索的值。通过这两个函数，应用程序可以遍历整个文档模板列表。如果被检索的文档模板是模板列表中的最后一个，则pos参数被置为NULL。&nbsp;<br /><br /></span><span style="color: #000000">12</span><span style="color: #000000">）一个文档模板可以有多个文档，每个文档模板都保留并维护了一个所有对应文档的指针列表。&nbsp;<br />用CDocTemplate::GetFirstDocPosition函数获得与文档模板相关的文档集合中第一个文档的位置，并用POSITION值作为CDocTemplate::GetNextDoc的参数来重复遍历与模板相关的文档列表。函数原形为：&nbsp;<br />viaual&nbsp;POSITION&nbsp;GetFirstDocPosition(&nbsp;)&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;<br />visual&nbsp;CDocument&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">GetNextDoc(POSITION&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;rPos)&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;<br />如果列表为空，则rPos被置为NULL.&nbsp;<br /><br /></span><span style="color: #000000">13</span><span style="color: #000000">）在文档中可以调用CDocument::GetDocTemplate获得指向该文档模板的指针。&nbsp;<br />函数原形如下：&nbsp;CDocTemplate&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;GetDocTemplate&nbsp;(&nbsp;)&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">;&nbsp;<br />如果该文档不属于文档模板管理，则返回值为NULL。&nbsp;<br /><br /></span><span style="color: #000000">14</span><span style="color: #000000">)一个文档可以有多个视。每一个文档都保留并维护一个所有相关视的列表。&nbsp;<br />CDocument::AddView将一个视连接到文档上，将该视加入到文档相联系的视的列表中，并将视的文档指针指向该文档。当有File</span><span style="color: #000000">/</span><span style="color: #000000">New、File</span><span style="color: #000000">/</span><span style="color: #000000">Open、Windows</span><span style="color: #000000">/</span><span style="color: #000000">New或Window</span><span style="color: #000000">/</span><span style="color: #000000">Split的命令而将一个新创建的视的对象连接到文档上时，&nbsp;MFC会自动调用该函数，框架通过文档</span><span style="color: #000000">/</span><span style="color: #000000">视的结构将文档和视联系起来。当然，程序员也可以根据自己的需要调用该函数。&nbsp;<br />Virtual&nbsp;POSITION&nbsp;GetFirstViewPosition(&nbsp;)&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">;&nbsp;<br />Virtual&nbsp;CView&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;GetNextView(&nbsp;POSITION&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">rPosition)&nbsp;cosnt;&nbsp;<br /><br />应用程序可以调用CDocument::GetFirstViewPosition返回与调用文档相联系的视的列表中的第一个视的位置，并调用CDocument::GetNextView返回指定位置的视，并将rPositon的值置为列表中下一个视的POSITION值。如果找到的视为列表中的最后一个视，则将rPosition置为NULL.&nbsp;<br /><br /></span><span style="color: #000000">15</span><span style="color: #000000">)从一个视图类取得另一视图类的指针&nbsp;<br />这个应用在多视的应用程序中很多见，一般如果自己在主程序或者主框架中做好变量记号，也可以获得，还有比较通用的就是用文档类作中转，以文档类的视图遍历&nbsp;<br />定位，取得另一个视图类。这个功能从本文第10项中可以得到。&nbsp;</span></div><img src ="http://www.cppblog.com/aaxron/aggbug/213608.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-05-30 14:02 <a href="http://www.cppblog.com/aaxron/archive/2016/05/30/213608.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CreateProcess+Pipe 交互运行命令</title><link>http://www.cppblog.com/aaxron/archive/2016/05/27/213597.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 27 May 2016 09:13:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/05/27/213597.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/213597.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/05/27/213597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/213597.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/213597.html</trackback:ping><description><![CDATA[<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">BOOL&nbsp;CNeowayAndroidCheckToolView::PipeSendCmd(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;HANDLE</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;handle,LPCTSTR&nbsp;cmd)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;_cmd(cmd);<br />&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bRet;<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwWrited;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;_cmd.Append(</span><span style="color: #000000">"</span><span style="color: #000000">\r\n</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;WriteFile(handle,_cmd,_cmd.GetLength(),</span><span style="color: #000000">&amp;</span><span style="color: #000000">dwWrited,NULL);<br />}<br />BOOL&nbsp;CNeowayAndroidCheckToolView::PipeRead(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;HANDLE</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;handle,CString</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;result,DWORD&nbsp;dwMilliseconds)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;FALSE;<br />&nbsp;&nbsp;&nbsp;&nbsp;CHAR&nbsp;buffer[</span><span style="color: #000000">4100</span><span style="color: #000000">];<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwReaded;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;result.Empty();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">1</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(dwMilliseconds);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;PeekNamedPipe(handle,buffer,</span><span style="color: #000000">1</span><span style="color: #000000">,</span><span style="color: #000000">&amp;</span><span style="color: #000000">dwReaded,NULL,NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">bRet)&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;_flag_exit;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(dwReaded</span><span style="color: #000000">&gt;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ReadFile(handle,&nbsp;buffer,</span><span style="color: #000000">4096</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">dwReaded,&nbsp;NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">bRet)&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;_flag_exit;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer[dwReaded]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">\0</span><span style="color: #000000">'</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;buffer;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />_flag_exit:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;bRet;<br />}<br />BOOL&nbsp;CNeowayAndroidCheckToolView::TestGpio()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;init_cmd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Path::Combine(&nbsp;Path::GetAppDirectory(),</span><span style="color: #000000">"</span><span style="color: #000000">adb.exe&nbsp;shell</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">CString&nbsp;init_cmd&nbsp;=&nbsp;"cmd.exe";</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;cmd;<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;result;<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;exit_code&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;STARTUPINFO&nbsp;si;<br />&nbsp;&nbsp;&nbsp;&nbsp;PROCESS_INFORMATION&nbsp;pi;<br />&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hStdOutRead</span><span style="color: #000000">=</span><span style="color: #000000">NULL,&nbsp;hStdOutPipe</span><span style="color: #000000">=</span><span style="color: #000000">NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hStdInWrite</span><span style="color: #000000">=</span><span style="color: #000000">NULL,&nbsp;hStdInPipe</span><span style="color: #000000">=</span><span style="color: #000000">NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;SECURITY_ATTRIBUTES&nbsp;saRead,saWrite;<br />&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bRet;<br />&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bSucceed;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwReaded;<br />&nbsp;&nbsp;&nbsp;&nbsp;std::vector</span><span style="color: #000000">&lt;</span><span style="color: #000000">CString</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;lines;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;saRead.nLength&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(SECURITY_ATTRIBUTES);<br />&nbsp;&nbsp;&nbsp;&nbsp;saRead.bInheritHandle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;TRUE;<br />&nbsp;&nbsp;&nbsp;&nbsp;saRead.lpSecurityDescriptor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;saWrite&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;saRead;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CreatePipe(</span><span style="color: #000000">&amp;</span><span style="color: #000000">hStdOutRead,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">hStdOutPipe,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">saRead,&nbsp;</span><span style="color: #000000">4096</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">bRet)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;_flag_exit;<br />&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CreatePipe(</span><span style="color: #000000">&amp;</span><span style="color: #000000">hStdInPipe,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">hStdInWrite,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">saWrite,&nbsp;</span><span style="color: #000000">4096</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">bRet)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;_flag_exit;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;memset(</span><span style="color: #000000">&amp;</span><span style="color: #000000">si,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(si));<br />&nbsp;&nbsp;&nbsp;&nbsp;si.cb&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(si);<br />&nbsp;&nbsp;&nbsp;&nbsp;si.dwFlags&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;STARTF_USESTDHANDLES&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;STARTF_USESHOWWINDOW;<br />&nbsp;&nbsp;&nbsp;&nbsp;si.wShowWindow&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;SW_HIDE;<br />&nbsp;&nbsp;&nbsp;&nbsp;si.hStdOutput&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;hStdOutPipe;<br />&nbsp;&nbsp;&nbsp;&nbsp;si.hStdInput&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;hStdInPipe;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CreateProcess(NULL,&nbsp;(LPSTR)(LPCTSTR)init_cmd,&nbsp;NULL,&nbsp;NULL,&nbsp;TRUE,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;NULL,&nbsp;NULL,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">si,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">pi);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">bRet)&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;_flag_exit;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hStdOutPipe);hStdOutPipe&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hStdInPipe);hStdInPipe&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;PipeRead(hStdOutRead,result,</span><span style="color: #000000">50</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">bRet)&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;_flag_exit;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;PipeSendCmd(hStdInWrite,</span><span style="color: #000000">"</span><span style="color: #000000">cd&nbsp;sys/gpio_test</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;(</span><span style="color: #000000">!</span><span style="color: #000000">bRet)&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;_exit_adb;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;PipeRead(hStdOutRead,result,</span><span style="color: #000000">50</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">bRet)&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;_exit_adb;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;PipeSendCmd(hStdInWrite,</span><span style="color: #000000">"</span><span style="color: #000000">echo&nbsp;\</span><span style="color: #000000">"</span><span style="color: #000000">1</span><span style="color: #000000">\</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&gt;&nbsp;start</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;(</span><span style="color: #000000">!</span><span style="color: #000000">bRet)&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;_exit_adb;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;PipeRead(hStdOutRead,result,</span><span style="color: #000000">50</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">bRet)&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;_exit_adb;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;PipeSendCmd(hStdInWrite,</span><span style="color: #000000">"</span><span style="color: #000000">cat&nbsp;result</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;(</span><span style="color: #000000">!</span><span style="color: #000000">bRet)&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;_exit_adb;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;PipeRead(hStdOutRead,result,</span><span style="color: #000000">50</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">bRet)&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;_exit_adb;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(result.Find(</span><span style="color: #000000">"</span><span style="color: #000000">OK</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #000000">&gt;=</span><span style="color: #000000">0</span><span style="color: #000000">);<br />_exit_adb:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">PipeSendCmd(hStdInWrite,</span><span style="color: #000000">"</span><span style="color: #000000">exit</span><span style="color: #000000">"</span><span style="color: #000000">))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;FALSE;&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;_flag_exit;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WaitForSingleObject(&nbsp;pi.hProcess,&nbsp;</span><span style="color: #000000">5000</span><span style="color: #000000">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">GetExitCodeProcess(pi.hProcess,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">exit_code))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;FALSE;&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;_flag_exit;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;bRet&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;(exit_code</span><span style="color: #000000">==</span><span style="color: #000000">0</span><span style="color: #000000">);<br />_flag_exit:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;&nbsp;(hStdOutRead</span><span style="color: #000000">!=</span><span style="color: #000000">NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hStdOutRead);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;&nbsp;(hStdOutPipe</span><span style="color: #000000">!=</span><span style="color: #000000">NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hStdOutPipe);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;&nbsp;(hStdInWrite</span><span style="color: #000000">!=</span><span style="color: #000000">NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hStdInWrite);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;&nbsp;(hStdInPipe</span><span style="color: #000000">!=</span><span style="color: #000000">NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hStdInPipe);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;bRet;<br />}</span></div><img src ="http://www.cppblog.com/aaxron/aggbug/213597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-05-27 17:13 <a href="http://www.cppblog.com/aaxron/archive/2016/05/27/213597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC单文档界面的微调</title><link>http://www.cppblog.com/aaxron/archive/2016/05/24/213576.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 24 May 2016 09:23:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/05/24/213576.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/213576.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/05/24/213576.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/213576.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/213576.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; width: 98%; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><br />BOOL&nbsp;CMainFrame::PreCreateWindow(CREATESTRUCT&amp;&nbsp;cs)<br />{<br />&nbsp;<span style="color: #0000ff">if</span>(&nbsp;!CFrameWnd::PreCreateWindow(cs)&nbsp;)<br />&nbsp;&nbsp;<span style="color: #0000ff">return</span>&nbsp;FALSE;<br /><br />&nbsp;cs.style&nbsp;&amp;=&nbsp;~FWS_ADDTOTITLE;<span style="color: #008000">//</span><span style="color: #008000">屏蔽&#8220;无标题&#8221;字样</span><span style="color: #008000"><br /></span>&nbsp;cs.style&nbsp;&amp;=&nbsp;~WS_MAXIMIZEBOX;<span style="color: #008000">//</span><span style="color: #008000">屏蔽屏幕最大化<br />&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">cs.style&nbsp;&amp;=&nbsp;~WS_THICKFRAME;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">不可改变大小</span><span style="color: #008000"><br /></span>&nbsp;<span style="color: #0000ff">return</span>&nbsp;TRUE;<br />}<br /><br /><br /><span style="color: #008000">//</span><span style="color: #008000">调整状态栏大小</span><span style="color: #008000"><br /></span><span style="color: #0000ff">int</span>&nbsp;CMainFrame::OnCreate(LPCREATESTRUCT&nbsp;lpCreateStruct)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">if</span>&nbsp;(!m_wndStatusBar.Create(<span style="color: #0000ff">this</span>))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE0("未能创建状态栏\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">return</span>&nbsp;-1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">//</span><span style="color: #008000">&nbsp;未能创建</span><span style="color: #008000"><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;m_wndStatusBar.SetIndicators(indicators,&nbsp;<span style="color: #0000ff">sizeof</span>(indicators)/<span style="color: #0000ff">sizeof</span>(UINT));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;m_wndStatusBar.SetPaneInfo(0,m_wndStatusBar.GetDlgCtrlID(),SBPS_NORMAL,230);&nbsp;<span style="color: #008000">//</span><span style="color: #008000">调整大小<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000"><img alt="" src="http://www.cppblog.com/Images/dot.gif" />.</span><span style="color: #008000"><br /></span>}<br /><br /><span style="color: #008000">//</span><span style="color: #008000">固定MainFrame大小</span><span style="color: #008000"><br /></span><span style="color: #0000ff">void</span>&nbsp;CMainFrame::OnGetMinMaxInfo(MINMAXINFO*&nbsp;lpMMI)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;POINT&nbsp;p&nbsp;=&nbsp;{365,400};<br />&nbsp;&nbsp;&nbsp;&nbsp;lpMMI-&gt;ptMaxTrackSize&nbsp;=&nbsp;p;<br />&nbsp;&nbsp;&nbsp;&nbsp;lpMMI-&gt;ptMinTrackSize&nbsp;=&nbsp;p;<br />&nbsp;&nbsp;&nbsp;&nbsp;CFrameWnd::OnGetMinMaxInfo(lpMMI);<br />}</div><br />// MainFrm.h&nbsp; 增加<br />public:<br />&nbsp;POINT m_TrackSize;<br />&nbsp;void SetAutoSize();<br /><br />// MainFrm.cpp<br />void CMainFrame::SetAutoSize()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp; CRect rc;<br />&nbsp;&nbsp;&nbsp;&nbsp; GetWindowRect(&amp;rc);<br />&nbsp;&nbsp;&nbsp;&nbsp; m_TrackSize = CPoint(rc.Width(),rc.Height());<br />}<br /><br />void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)<br />{<br />&nbsp;if (m_TrackSize.x &amp;&amp; m_TrackSize.x)<br />&nbsp;{<br />&nbsp;&nbsp;lpMMI-&gt;ptMinTrackSize = m_TrackSize;<br />&nbsp;&nbsp;lpMMI-&gt;ptMaxTrackSize = m_TrackSize;<br />&nbsp;}<br />&nbsp;CXTPFrameWnd::OnGetMinMaxInfo(lpMMI);<br />}<br /><br />// OppoTest6View.cpp<br />void COppoTest6View::OnInitialUpdate()<br />{<br />&nbsp;CFormView::OnInitialUpdate();<br />&nbsp;GetParentFrame()-&gt;RecalcLayout();<br />&nbsp;ResizeParentToFit();<br />&nbsp;<br />&nbsp;CMainFrame* MainFrame = (CMainFrame*)GetParentFrame();<br />&nbsp;MainFrame-&gt;SetAutoSize();<br />}<img src ="http://www.cppblog.com/aaxron/aggbug/213576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-05-24 17:23 <a href="http://www.cppblog.com/aaxron/archive/2016/05/24/213576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在vc中使用PCRE</title><link>http://www.cppblog.com/aaxron/archive/2016/03/02/212909.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Wed, 02 Mar 2016 02:04:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/03/02/212909.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212909.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/03/02/212909.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212909.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212909.html</trackback:ping><description><![CDATA[<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">在vc中使用PCRE<br /></span><span style="color: #000000">1</span><span style="color: #000000">.&nbsp;PCRE简介<br />正则表达式(regular&nbsp;expression)，通常简写为regex、regexp或RE，使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。<br />PCRE(Perl&nbsp;Compatible&nbsp;Regular&nbsp;Expressions)，是一个函数库，由Philip&nbsp;Hazel开发，该函数库使用与Perl5一样的语法和语义实现了正则表达式的模式匹配功能。PCRE是免费开源的，它是由C语言实现。很多著名的开源软件如Apache、PHP、KDE、Nginx&nbsp;等都使用了PCRE。官方主页&#8211;http:</span><span style="color: #008000">//</span><span style="color: #008000">www.pcre.org，目前（2016.03）最新版本是8.38。</span><span style="color: #008000"><br /></span><span style="color: #000000"><br /></span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;编译&nbsp;PCRE<br />PCRE的作者Philip&nbsp;Hazel是在linux上工作的，所以编译PCRE最好的办法自然是configure,&nbsp;make,&nbsp;make&nbsp;install三步曲了。在windows下，&nbsp;cygwin或者MinGW都支持这么做。<br />在windows下编译&nbsp;PCRE要用CMake。<br />先从&nbsp;http:</span><span style="color: #008000">//</span><span style="color: #008000">www.cmake.org&nbsp;上下载最新版的CMake，</span><span style="color: #008000"><br /></span><span style="color: #000000">在解压缩后的PCRE目录下建个子目录build，比如我的D:\pcre</span><span style="color: #000000">-</span><span style="color: #000000">8.38</span><span style="color: #000000">\build。<br />设置要编译的源代码的路径以及编译好的二进制文件存放的路径<br />CMake&nbsp;会读取源代码目录下的文件&nbsp;CMakeLists.txt&nbsp;，然后将读到的配置以红颜色显示出来，此时可以根据我们的需要适当的选择或去掉一些配置，比如加上&nbsp;PCRE_SUPPORT_UTF，去掉PCRE_SUPPORT_JIT(不需要嵌入式的代码)、PCRE_BUILD_PCRECPP(我只想要c形式的库)；还可以修改一些配置的值，比如把PCRE_NEWLINE从LF改成CRLF。然后再点一下</span><span style="color: #000000">"</span><span style="color: #000000">Configure&#8221;,最后点</span><span style="color: #000000">"</span><span style="color: #000000">Generate&#8221;，你会发现在build目录里生成了一系列的vc6的工程文件以及一些.h文件和.c文件。<br /><br /></span><span style="color: #000000">3</span><span style="color: #000000">&nbsp;在工程中使用PCRE<br />包含头文件&nbsp;#include&nbsp;&#8220;pcre.h&#8221;<br />链接静态库&nbsp;#pragma&nbsp;comment(lib,&#8220;pcre.lib&#8221;)<br />在项目&#8221;预处理器定义&#8220;中加上PCRE_STATIC<br /><br />示例代码：<br />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">stdafx.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;PCRE_STATIC</span><span style="color: #000000"><br />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">pcrecpp.h</span><span style="color: #000000">"</span><span style="color: #000000"><br />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">vector</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">iostream</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">string</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />#pragma&nbsp;comment(lib,</span><span style="color: #000000">"</span><span style="color: #000000">lib/pcrecppd.lib</span><span style="color: #000000">"</span><span style="color: #000000">)<br />#pragma&nbsp;comment(lib,</span><span style="color: #000000">"</span><span style="color: #000000">lib/pcred.lib</span><span style="color: #000000">"</span><span style="color: #000000">)<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;pcrecpp;<br /><br /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;Test1()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;OVECCOUNT&nbsp;30&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;should&nbsp;be&nbsp;a&nbsp;multiple&nbsp;of&nbsp;3&nbsp;*/</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;pcre&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">re;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">error;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;erroffset;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ovector[OVECCOUNT];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rc,&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src&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">111&nbsp;&lt;title&gt;Hello&nbsp;World&lt;/title&gt;&nbsp;222</span><span style="color: #000000">"</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&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">&lt;title&gt;(.*)&lt;/title&gt;</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">String&nbsp;:&nbsp;%s\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;src);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">Pattern:&nbsp;\</span><span style="color: #000000">"</span><span style="color: #000000">%</span><span style="color: #000000">s\</span><span style="color: #000000">"</span><span style="color: #000000">\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pattern);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;re&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pcre_compile(pattern,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">error,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">erroffset,&nbsp;NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(re&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;NULL)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">PCRE&nbsp;compilation&nbsp;failed&nbsp;at&nbsp;offset&nbsp;%d:&nbsp;%s\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;erroffset,&nbsp;error);<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">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;rc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pcre_exec(re,&nbsp;NULL,&nbsp;src,&nbsp;strlen(src),&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;ovector,&nbsp;OVECCOUNT);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(rc&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(rc&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;PCRE_ERROR_NOMATCH)&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">Sorry,&nbsp;no&nbsp;match&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">Matching&nbsp;error&nbsp;%d\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;rc);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(re);<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">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">\nOK,&nbsp;has&nbsp;matched&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />\n\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;rc;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">substring_start&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;src&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;ovector[</span><span style="color: #000000">2</span><span style="color: #000000">*</span><span style="color: #000000">i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;substring_length&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ovector[</span><span style="color: #000000">2</span><span style="color: #000000">*</span><span style="color: #000000">i</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;ovector[</span><span style="color: #000000">2</span><span style="color: #000000">*</span><span style="color: #000000">i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">%2d:&nbsp;%.*s\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;i,&nbsp;substring_length,&nbsp;substring_start);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;free(re);<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">;&nbsp;<br />}<br /><br /><br /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()&nbsp;&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Test1();<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 />}&nbsp;&nbsp;<br /><br /><br /></span></div><img src ="http://www.cppblog.com/aaxron/aggbug/212909.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-03-02 10:04 <a href="http://www.cppblog.com/aaxron/archive/2016/03/02/212909.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WM_COMMAND（BN_CLICKED）实现</title><link>http://www.cppblog.com/aaxron/archive/2016/01/20/212690.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Wed, 20 Jan 2016 03:23:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/01/20/212690.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212690.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/01/20/212690.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212690.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212690.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;"stdafx.h"<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TestControl.c&nbsp;<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">转自http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">www.cnblogs.com/memset/archive/2013/05/16/3081082.html&nbsp;，稍加修改</span><span style="color: #008000; "><br /></span><br /><span style="color: #0000FF; ">#define</span>&nbsp;_ATL_CSTRING_EXPLICIT_CONSTRUCTORS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;某些&nbsp;CString&nbsp;构造函数将是显式的</span><br />#include&nbsp;&lt;atlbase.h&gt;<br />#include&nbsp;&lt;atlstr.h&gt;<br /><br />#include&nbsp;&lt;WindowsX.h&gt;<br /><br />LRESULT&nbsp;CALLBACK&nbsp;ControlWindowProc(HWND&nbsp;hWnd,UINT&nbsp;uMsg,WPARAM&nbsp;wParam,LPARAM&nbsp;lParam);<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;RegisterControlClass(HINSTANCE&nbsp;hInstance)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;WNDCLASSEXW&nbsp;wce={0};<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;wce.cbSize&nbsp;=&nbsp;<span style="color: #0000FF; ">sizeof</span>(wce);<br />&nbsp;&nbsp;&nbsp;&nbsp;wce.hbrBackground&nbsp;=&nbsp;(HBRUSH)GetStockObject(WHITE_BRUSH);<br />&nbsp;&nbsp;&nbsp;&nbsp;wce.hInstance&nbsp;=&nbsp;hInstance;<br />&nbsp;&nbsp;&nbsp;&nbsp;wce.lpfnWndProc&nbsp;=&nbsp;ControlWindowProc;<br />&nbsp;&nbsp;&nbsp;&nbsp;wce.lpszClassName&nbsp;=&nbsp;L"ControlClass";<br />&nbsp;&nbsp;&nbsp;&nbsp;wce.style&nbsp;=&nbsp;CS_HREDRAW|CS_VREDRAW;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;RegisterClassExW(&amp;wce);<br /><br />}<br /><br /><br /><br />LRESULT&nbsp;CALLBACK&nbsp;ControlWindowProc(HWND&nbsp;hWnd,UINT&nbsp;uMsg,WPARAM&nbsp;wParam,LPARAM&nbsp;lParam)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;HBRUSH&nbsp;hbrBlack,hbrRed;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>(uMsg)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;WM_CREATE:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hbrBlack&nbsp;=&nbsp;CreateSolidBrush(#000000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hbrRed&nbsp;=&nbsp;CreateSolidBrush(#ff0000);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;WM_PAINT:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAINTSTRUCT&nbsp;ps;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;hdc;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hdc&nbsp;=&nbsp;BeginPaint(hWnd,&amp;ps);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SelectObject(hdc,hbrBlack);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rectangle(hdc,0,0,100,50);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;text;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::GetWindowText(hWnd,text.GetBuffer(100),100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text.ReleaseBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextOutW(hdc,10,10,text,text.GetLength());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EndPaint(hWnd,&amp;ps);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;WM_LBUTTONDOWN:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;hdc;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hdc&nbsp;=&nbsp;GetDC(hWnd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SelectObject(hdc,hbrRed);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rectangle(hdc,0,0,100,50);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetTextColor(hdc,#ff0000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;text;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::GetWindowText(hWnd,text.GetBuffer(100),100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text.ReleaseBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextOutW(hdc,10,10,text,text.GetLength());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReleaseDC(hWnd,hdc);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCapture(hWnd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;WM_LBUTTONUP:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;hdc;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hdc&nbsp;=&nbsp;GetDC(hWnd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SelectObject(hdc,hbrBlack);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rectangle(hdc,0,0,100,50);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetTextColor(hdc,#000000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;text;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::GetWindowText(hWnd,text.GetBuffer(100),100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text.ReleaseBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextOutW(hdc,10,10,text,text.GetLength());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReleaseDC(hWnd,hdc);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bRet&nbsp;=&nbsp;&nbsp;(GetCapture()==hWnd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReleaseCapture();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HWND&nbsp;parent&nbsp;=&nbsp;::GetParent(hWnd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HMENU&nbsp;hMenu&nbsp;=&nbsp;::GetMenu(hWnd);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">POINT&nbsp;pt&nbsp;=&nbsp;MAKEPOINTS(lParam);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POINT&nbsp;pt&nbsp;=&nbsp;{&nbsp;GET_X_LPARAM(lParam),&nbsp;GET_Y_LPARAM(lParam)&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RECT&nbsp;rect;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::GetClientRect(hWnd,&amp;rect);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;=&nbsp;bRet&nbsp;&amp;&amp;&nbsp;::PtInRect(&amp;rect,pt);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(bRet)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::SendMessage(parent,WM_COMMAND,(WPARAM)hMenu,NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;WM_DESTROY:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeleteObject(hbrBlack);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeleteObject(hbrRed);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;DefWindowProcW(hWnd,uMsg,wParam,lParam);<br />}<br /><br /><br />LRESULT&nbsp;CALLBACK&nbsp;MainWindowProc(HWND&nbsp;hWnd,UINT&nbsp;uMsg,WPARAM&nbsp;wParam,LPARAM&nbsp;lParam)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>(uMsg)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;WM_CREATE:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HINSTANCE&nbsp;hInstance&nbsp;=&nbsp;GetModuleHandleW(NULL);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateWindowExW(0,L"Button",L"按键",WS_CHILD|WS_VISIBLE,0,0,100,50,hWnd,(HMENU)101,hInstance,NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateWindowExW(0,L"ControlClass",L"哈哈",WS_CHILD|WS_VISIBLE,200,200,100,50,hWnd,(HMENU)100,hInstance,NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateWindowExW(0,L"ControlClass",L"呵呵",WS_CHILD|WS_VISIBLE,400,400,100,50,hWnd,(HMENU)102,hInstance,NULL);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;WM_COMMAND:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;wmId&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;LOWORD(wParam);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;msg;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.Format(L"hWmd:0x%08x,wmId:%d",hWnd,wmId);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(hWnd,msg,L"提示",MB_OK|MB_ICONINFORMATION);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;WM_DESTROY:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostQuitMessage(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">default</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;DefWindowProcW(hWnd,uMsg,wParam,lParam);<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;WINAPI&nbsp;wWinMain(HINSTANCE&nbsp;hInstance,HINSTANCE&nbsp;hPrevInstance,LPWSTR&nbsp;lpCmdLine,<span style="color: #0000FF; ">int</span>&nbsp;nShowCmd)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;HWND&nbsp;hWnd;<br />&nbsp;&nbsp;&nbsp;&nbsp;WNDCLASSEXW&nbsp;wce&nbsp;=&nbsp;{0};<br />&nbsp;&nbsp;&nbsp;&nbsp;MSG&nbsp;msg;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;RegisterControlClass(hInstance);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;wce.cbSize&nbsp;=&nbsp;<span style="color: #0000FF; ">sizeof</span>(wce);<br />&nbsp;&nbsp;&nbsp;&nbsp;wce.hbrBackground&nbsp;=&nbsp;(HBRUSH)GetStockObject(WHITE_BRUSH);<br />&nbsp;&nbsp;&nbsp;&nbsp;wce.hCursor&nbsp;=&nbsp;LoadCursor(NULL,IDC_ARROW);<br />&nbsp;&nbsp;&nbsp;&nbsp;wce.hIcon&nbsp;=&nbsp;LoadIcon(NULL,IDI_APPLICATION);<br />&nbsp;&nbsp;&nbsp;&nbsp;wce.hInstance&nbsp;=&nbsp;hInstance;<br />&nbsp;&nbsp;&nbsp;&nbsp;wce.lpfnWndProc&nbsp;=&nbsp;MainWindowProc;<br />&nbsp;&nbsp;&nbsp;&nbsp;wce.lpszClassName&nbsp;=&nbsp;L"MyWindowClass";<br />&nbsp;&nbsp;&nbsp;&nbsp;wce.style&nbsp;=&nbsp;CS_HREDRAW|CS_VREDRAW;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;RegisterClassExW(&amp;wce);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;hWnd&nbsp;=&nbsp;CreateWindowExW(0,L"MyWindowClass",L"测试",WS_OVERLAPPEDWINDOW,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;UpdateWindow(hWnd);<br />&nbsp;&nbsp;&nbsp;&nbsp;ShowWindow(hWnd,nShowCmd);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(GetMessageW(&amp;msg,NULL,0,0))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TranslateMessage(&amp;msg);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DispatchMessageW(&amp;msg);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><img src ="http://www.cppblog.com/aaxron/aggbug/212690.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-01-20 11:23 <a href="http://www.cppblog.com/aaxron/archive/2016/01/20/212690.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>窗口子类化的一般方法</title><link>http://www.cppblog.com/aaxron/archive/2015/08/10/211517.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 10 Aug 2015 02:02:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/08/10/211517.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/211517.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/08/10/211517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/211517.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/211517.html</trackback:ping><description><![CDATA[<div>实现子类化的一般方法</div><div>从上面可以看出，子类化主要使用几个API函数，这几乎是所有实现子类化相同的方法。相关API说明如下：</div><div>1、 WINUSERAPI LONG WINAPI GetWindowLongA(HWND hWnd, int nIndex);</div><div>WINUSERAPI LONG WINAPI GetWindowLongW(HWND hWnd,int nIndex);</div><div>2、 SetWindowLong 与 CallWindowProc 函数这不再列出来了，都是粉容易的！</div><div>使用 ComCtl32.dll version 6 实现窗口子类化</div><div>Windows XP 带的ComCtl32.dll version 6 提供了4个可以让创建子类化更简单，并且可以消除前面提到的缺陷的函数。这些新的函数封装了对多组参考数据（multiple sets of reference data）的管理操作，使得开发者能将精力集中到具体的程序特性而不是对子类的管理上。这些新的函数为：</div><div>SetWindowSubclass</div><div>GetWindowSubclass</div><div>RemoveWindowSubclass</div><div>DefSubclassProc</div><div>下面是对这些函数的描述。</div><div>SetWindowSubclass</div><div>这个函数用来子类化一个窗口。每个子类可以用p pfnSubclass 和 uIdSubclass （SetWindowSubclass的参数）唯一标识。多个子类可以共享同一个子类过程，而用标识（ID）来区分。改变参考数据可以提供再一次调用SetWindowSubclass 来实现。一个重要的优点是每一个子类实例可以拥有自己的参考数据。</div><div>子类过程的声明和传统的窗口过程有点细微的差别，它多了两个参数：子类ID和参考数据。参看下面这个函数声明的最后两个参数：</div><div>LRESULT CALLBACK MyWndProc (HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass,</div><div>DWORD_PTR dwRefData);</div><div>每次新的窗口过程收到一个消息时，它同时得到了一个子类ID和参考数据。</div><div>注意：所有作为参数传递给该函数的字符串均为Unicode，不管有没有定义Unicode编译选项。</div><div>GetWindowSubclass</div><div>该函数取回一个子类的信息。比如你可以用GetWindowSubclass 来访问参考数据。</div><div>RemoveWindowSubclass</div><div>该函数移除一个子类. RemoveWindowSubclass 和 SetWindowSubclass 联合使用可以动态添加和删除子类.</div><div>DefSubclassProc</div><div>这个函数调用子类链中的下一个处理者。这个函数可以自行取得正确的ID和参考数据并传递给下一个窗口过程。</div><div>大家都知道每个窗口都有默认的窗口函数来进行对窗口消息的处理.</div><div></div><div>OutputDebugString</div><div>SetProp()</div><div>SetWindowSubclass</div><div>BOOL SetWindowSubclass( &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; HWND hWnd,</div><div>&nbsp; &nbsp; SUBCLASSPROC pfnSubclass,</div><div>&nbsp; &nbsp; UINT_PTR uIdSubclass,</div><div>&nbsp; &nbsp; DWORD_PTR dwRefData</div><div>);</div><div>SUBCLASSPROC</div><div>DefSubclassProc</div><div></div><div>LRESULT CALLBACK MyWndProc (HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass,DWORD_PTR dwRefData);</div><img src ="http://www.cppblog.com/aaxron/aggbug/211517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-08-10 10:02 <a href="http://www.cppblog.com/aaxron/archive/2015/08/10/211517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>窗口销毁的相关函数与消息</title><link>http://www.cppblog.com/aaxron/archive/2015/08/01/211447.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Sat, 01 Aug 2015 06:24:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/08/01/211447.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/211447.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/08/01/211447.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/211447.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/211447.html</trackback:ping><description><![CDATA[<div>窗口销毁的相关函数与消息</div><div></div><div>DestroyWindow函数</div><div>DestroyWindow销毁窗口的正牌函数。</div><div></div><div>DestroyWindows的MSDN说明如下：</div><div></div><div>The DestroyWindow function destroys the specified window. The function sends WM_DESTROY and WM_NCDESTROY messages to the window to deactivate it and remove the keyboard focus from it. The function also destroys the window's menu, flushes the thread message queue, destroys timers, removes clipboard ownership, and breaks the clipboard viewer chain (if the window is at the top of the viewer chain).</div><div></div><div>If the specified window is a parent or owner window, DestroyWindow automatically destroys the associated child or owned windows when it destroys the parent or owner window. The function first destroys child or owned windows, and then it destroys the parent or owner window.</div><div></div><div>DestroyWindow also destroys modeless dialog boxes created by the CreateDialog function.</div><div></div><div>A thread cannot use DestroyWindow to destroy a window created by a different thread.</div><div></div><div>If the window being destroyed is a child window that does not have the WS_EX_NOPARENTNOTIFY style, a WM_PARENTNOTIFY message is sent to the parent.</div><div></div><div>DestroyWindow的处理过程总结要点如下：&nbsp;</div><div>1. 向父窗口发送WM_PARENTNOTIFY消息（仅当窗口具有WS_EX_NOPARENTNOTIFY样式）；&nbsp;</div><div>2. 向窗口发送WM_DESTROY消息；&nbsp;</div><div>3. 使窗口转入非活动状态，移除键盘焦点；&nbsp;</div><div>4. 销毁子窗口（应该是通过递归调用DestroyWindow完成）；&nbsp;</div><div>5. 销毁目标窗口资源：销毁菜单，清空线程的消息队列，销毁与窗口过程相关的定时器，解除窗口对剪贴板的拥有权，打断剪贴板器的查看链；&nbsp;</div><div>6. 向窗口发送WM_NCDESTROY消息；</div><div></div><div>上述条目大致从前往后执行（1、2、3的顺序不一定，5、6的顺序不一定）。依据是：&nbsp;</div><div>1. 根据WM_PARENTNOTIFY说明：销毁窗口时，系统在任何销毁窗口的操作执行前发送WM_PARENTNOTIFY至父窗口；&nbsp;</div><div>2. 根据WM_DESTROY说明：此消息先被发送至目标窗口，然后发送给目标窗口的所有子窗口，处理此消息时，可以假定所有子窗口还存在着；&nbsp;</div><div>3. 根据DestroyWindow说明：函数先销毁子窗口及所拥有的窗口，然后销毁目标窗口；&nbsp;</div><div>4. 根据WM_NCDESTROY说明：与WM_DESTROY相反的是，此消息在所有子窗口销毁之后发送； 没有去看汇编代码，只是根据各个MSDN说明来大致推测的，基本够用了吧。</div><div></div><div>根据MSDN说明，不能在非创建线程上调用DestroyWindow；若要在其它线程上关闭窗口，不可以直接调用DestroyWindow（错误"拒绝访问"），也不可以只发送WM_DESTROY，因为DestroyWindow才能完整的关闭窗口，WM_DESTROY消息只是关闭流程的一部分，甚至是最"无用"的一部分--WM_DESTROY只是用户响应的接口，而真正清理窗口的工作由DestroyWindow的其它部分完成。&nbsp;</div><div>要在其它线程上关闭窗口，可以向窗口发送WM_CLOSE消息，若窗口过程未在WM_CLOSE的处理中取消关闭操作，则DefWindowProc会默认调用DestroyWindow（彼时自然是在窗口的创建线程上）。</div><div></div><div>WM_CLOSE消息</div><div>WM_CLOSE的MSDN说明如下：</div><div></div><div>An application can prompt the user for confirmation, prior to destroying a window, by processing the WM_CLOSE message and calling the&nbsp;</div><div>DestroyWindow function only if the user confirms the choice.</div><div></div><div>By default, the DefWindowProc function calls the DestroyWindow function to destroy the window.</div><div></div><div>WM_CLOSE消息提供取消关闭窗口操作的接口，也可以作为窗口关闭的关联处理的统一入口。点击窗口右上角的关闭按钮将导致窗口收到WM_CLOSE消息，一般情况下，菜单中的Exit项的处理代码中也应向窗口发送WM_CLOSE消息，这样可以使无论何种方式触发的窗口关闭操作，其程序流均会流入WM_CLOSE消息的处理过程。在WM_CLOSE中可以对程序状态进行确认，自动或由用户确认是否取消关闭操作。&nbsp;</div><div>与接下来的其它消息相比，WM_CLOSE的特殊之处在于它发生在销毁过程启动之前。用户处理完WM_CLOSE消息后，如未取消，则DefWindowProc将调用DestroyWindow来关闭窗口，一旦进入DestroyWindow，则关闭过程将不可逆转。</div><div></div><div>WM_DESTROY消息</div><div>WM_DESTROY的MSDN说明如下：</div><div></div><div>The WM_DESTROY message is sent when a window is being destroyed. It is sent to the window procedure of the window being destroyed after the window is removed from the screen.</div><div></div><div>This message is sent first to the window being destroyed and then to the child windows (if any) as they are destroyed. During the processing of the message, it can be assumed that all child windows still exist.</div><div></div><div>A window receives this message through its WindowProc function.</div><div></div><div>If the window being destroyed is part of the clipboard viewer chain (set by calling the SetClipboardViewer function), the window must remove itself from the chain by processing the ChangeClipboardChain function before returning from the WM_DESTROY message.</div><div></div><div>最后一句值得注意，不过对剪贴板涉猎不多，暂且不究。</div><div></div><div>WM_PARENTNOTIFY消息</div><div>WM_PARENTNOTIFY的MSDN说明如下：</div><div></div><div>The WM_PARENTNOTIFY message is sent to the parent of a child window when the child window is created or destroyed, or when the user clicks a mouse button while the cursor is over the child window. When the child window is being created, the system sends WM_PARENTNOTIFY just before the CreateWindow or CreateWindowEx function that creates the window returns. When the child window is being destroyed, the system sends the message before any processing to destroy the window takes place.</div><div></div><div>A window receives this message through its WindowProc function.</div><div></div><div>WM_NCDESTROY消息</div><div>WM_NCDESTROY的MSDN说明如下：</div><div></div><div>The WM_NCDESTROY message informs a window that its nonclient area is being destroyed. The DestroyWindow function sends the WM_NCDESTROY message to the window following the WM_DESTROY message. WM_DESTROY is used to free the allocated memory object associated with the window. The WM_NCDESTROY message is sent after the child windows have been destroyed. In contrast, WM_DESTROY is sent before the child windows are destroyed. A window receives this message through its WindowProc function. This message frees any memory internally allocated for the window.</div><div></div><div>关于WM_DESTROY与WM_NCDESTROY，从各种说明可以看出，一个大约充当关闭操作启动时的通知接口，一个大约充当关闭操作完成时的通知接口。这也是我认为在DestroyWindow的处理流程中，第6条在第5条之后的原因。&nbsp;</div><div>另外，说明中有个值得一提的地方在于：WM_DESTROY用于释放关联到（associated to）窗口的已分配内存对象，WM_NCDESTROY用于释放内部为窗口分配的（internally allocated for）内存。 可以想象，后者应当指窗口的内核数据，但前者则有各种可能，菜单资源？GDI资源？异或是子窗口资源？这个就不好说了。 而且，根据这两句话的表述，似乎这两个清理操作是在消息的处理过程中发生的，然而显然又不是由用户来完成的工作，那么就应当是在DefWindowProc中完成的了。为什么不直接拿到Destroywindow中来执行呢？</div><div></div><div>ActiveX控件的销毁</div><div>销毁控件的最好方法是销毁宿主窗口。可以通过调用 CWindow::DestroyWindow 或 DestroyWindow API 显式地进行销毁，或者让宿主窗口的父级窗口的毁坏导致其死亡，从而隐式地进行销毁。这些方法的任何一种都将安全地销毁寄宿的控件。请注意，CAxWindow 对象的毁坏"不会"导致基础"AtlAxWin7"窗口的毁坏。&nbsp;</div><div>来自：http://technet.microsoft.com/zh-cn/query/cc468138</div><img src ="http://www.cppblog.com/aaxron/aggbug/211447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-08-01 14:24 <a href="http://www.cppblog.com/aaxron/archive/2015/08/01/211447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IniFileGetValue,IniFileSetValue</title><link>http://www.cppblog.com/aaxron/archive/2015/07/10/211216.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 10 Jul 2015 09:25:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/07/10/211216.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/211216.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/07/10/211216.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/211216.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/211216.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: #0000FF; ">static</span>&nbsp;CString&nbsp;GetAppDirectory()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;sPath;<br />&nbsp;&nbsp;&nbsp;&nbsp;GetModuleFileName(NULL,sPath.GetBuffer(MAX_PATH+1),MAX_PATH);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">GetCurrentDirectory(MAX_PATH,sPath.GetBuffer(MAX_PATH+1));</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;sPath.ReleaseBuffer&nbsp;();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nPos;<br />&nbsp;&nbsp;&nbsp;&nbsp;nPos=sPath.ReverseFind&nbsp;('\\');<br />&nbsp;&nbsp;&nbsp;&nbsp;sPath=sPath.Left(nPos+1);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sPath;<br />}<br /><br /><span style="color: #0000FF; ">static</span>&nbsp;CString&nbsp;IniFileGetValue(<span style="color: #0000FF; ">const</span>&nbsp;CString&amp;&nbsp;strFileName,<span style="color: #0000FF; ">const</span>&nbsp;CString&amp;&nbsp;strKeyPath,<span style="color: #0000FF; ">const</span>&nbsp;CString&amp;&nbsp;strDefault="")<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CStringArray&nbsp;strKeys;<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strValue;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;last_pos&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;pos;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;new_pos;<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strKey;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos&nbsp;=&nbsp;strKeyPath.Find("/",last_pos);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new_pos&nbsp;=&nbsp;pos;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pos==-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new_pos&nbsp;=&nbsp;strKeyPath.GetLength();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strKey&nbsp;&nbsp;&nbsp;=&nbsp;strKeyPath.Mid(last_pos,new_pos&nbsp;-&nbsp;last_pos);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last_pos&nbsp;=&nbsp;pos+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!strKey.IsEmpty())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strKeys.Add(strKey);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pos==-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(strKeys.GetSize()!=2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;strDefault;<br />&nbsp;&nbsp;&nbsp;&nbsp;GetPrivateProfileString(strKeys[0],strKeys[1],0,strValue.GetBuffer(4096),4095,strFileName);<br />&nbsp;&nbsp;&nbsp;&nbsp;strValue.ReleaseBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(strValue.IsEmpty())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;strDefault;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;strValue;<br />}<br /><br /><span style="color: #0000FF; ">static</span>&nbsp;BOOL&nbsp;IniFileSetValue(<span style="color: #0000FF; ">const</span>&nbsp;CString&amp;&nbsp;strFileName,<span style="color: #0000FF; ">const</span>&nbsp;CString&amp;&nbsp;strKeyPath,<span style="color: #0000FF; ">const</span>&nbsp;CString&amp;&nbsp;strValue)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CStringArray&nbsp;strKeys;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;last_pos&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;pos;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;new_pos;<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strKey;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos&nbsp;=&nbsp;strKeyPath.Find("/",last_pos);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new_pos&nbsp;=&nbsp;pos;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pos==-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new_pos&nbsp;=&nbsp;strKeyPath.GetLength();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strKey&nbsp;&nbsp;&nbsp;=&nbsp;strKeyPath.Mid(last_pos,new_pos&nbsp;-&nbsp;last_pos);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last_pos&nbsp;=&nbsp;pos+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!strKey.IsEmpty())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strKeys.Add(strKey);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pos==-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(strKeys.GetSize()!=2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;FALSE;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;WritePrivateProfileString(strKeys[0],strKeys[1],strValue,strFileName);<br />}</div><img src ="http://www.cppblog.com/aaxron/aggbug/211216.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-07-10 17:25 <a href="http://www.cppblog.com/aaxron/archive/2015/07/10/211216.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Win32添加自定义消息</title><link>http://www.cppblog.com/aaxron/archive/2014/07/04/207508.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 04 Jul 2014 00:33:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2014/07/04/207508.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/207508.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2014/07/04/207508.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/207508.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/207508.html</trackback:ping><description><![CDATA[<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: #008000">//</span><span style="color: #008000">1、注册消息</span><span style="color: #008000"><br /></span><span style="color: #000000">UINT32&nbsp;MSG_SUBTHREAD_CMD&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;::RegisterWindowMessage(</span><span style="color: #000000">"</span><span style="color: #000000">MSG_SUBTHREAD_CMD</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">2、添加消息处理函数</span><span style="color: #008000"><br /></span><span style="color: #000000">BEGIN_MESSAGE_MAP(CApplicationService1Dlg,&nbsp;CDialogEx)<br />&nbsp;&nbsp;&nbsp;&nbsp;ON_WM_PAINT()<br />&nbsp;&nbsp;&nbsp;&nbsp;ON_WM_QUERYDRAGICON()<br />&nbsp;&nbsp;&nbsp;&nbsp;ON_BN_CLICKED(ID_BTN_SERVICE_RUN,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">CApplicationService1Dlg::OnBnClickedBtnServiceRun)<br />&nbsp;&nbsp;&nbsp;&nbsp;ON_REGISTERED_MESSAGE(MSG_SUBTHREAD_CMD,</span><span style="color: #000000">&amp;</span><span style="color: #000000">CApplicationService1Dlg::OnMsgSubThreadCmd)<br />END_MESSAGE_MAP()<br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">2.1&nbsp;消息处理函数</span><span style="color: #008000"><br /></span><span style="color: #000000">LRESULT&nbsp;CApplicationService1Dlg::OnMsgSubThreadCmd(WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam)<br />{<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">3.发送消息</span><span style="color: #008000"><br /></span><span style="color: #000000">LRESULT&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;::SendMessage(AfxGetApp()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetMainWnd()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetSafeHwnd(),MSG_SUBTHREAD_CMD,(WPARAM)</span><span style="color: #000000">&amp;</span><span style="color: #000000">request,(LPARAM)</span><span style="color: #000000">&amp;</span><span style="color: #000000">response);<br />TRACE(</span><span style="color: #000000">"</span><span style="color: #000000">%d</span><span style="color: #000000">"</span><span style="color: #000000">,result);</span></div> <img src ="http://www.cppblog.com/aaxron/aggbug/207508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2014-07-04 08:33 <a href="http://www.cppblog.com/aaxron/archive/2014/07/04/207508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows 清除网络密码</title><link>http://www.cppblog.com/aaxron/archive/2014/04/09/206511.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Wed, 09 Apr 2014 01:21:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2014/04/09/206511.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/206511.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2014/04/09/206511.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/206511.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/206511.html</trackback:ping><description><![CDATA[<font color="#000000" face="Verdana">net use * /d /y</font><img src ="http://www.cppblog.com/aaxron/aggbug/206511.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2014-04-09 09:21 <a href="http://www.cppblog.com/aaxron/archive/2014/04/09/206511.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>调试VC的控制台程序，提示找不到mmvcr70.dll,mmvcp70.dll等。。。</title><link>http://www.cppblog.com/aaxron/archive/2013/12/12/204748.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 12 Dec 2013 07:29:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2013/12/12/204748.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/204748.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2013/12/12/204748.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/204748.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/204748.html</trackback:ping><description><![CDATA[<div><span style="font-size: 12px;">调试VC的控制台程序，提示找不到mmvcr70.dll,mmvcp70.dll等。。。</span></div><div><span style="font-size: 12px;">&#8220;找不到coredll.dll&#8221;?</span></div><div><span style="font-size: 12px;">dll磁盘application测试编译器system</span></div><div><span style="font-size: 12px;">&nbsp;重装系统后又重装了VS2008 &nbsp;写了一个win32 console application的helloworld做测试，结果提示&#8220;找不到coredll.dll&#8221;，下载到该dll到system32下，又提示找不到mmvcr70.dll,mmvcp70.dll。全部下载后再次编译，提示&#8220;无法定位序数于...上&#8221;。</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; 初步分析为dll库版本问题，但苦于找不到正确的版本。在另一台机器上拷贝时发现该机器也没有上述DLL文件。但用该机器新建工程测试通过，故分析错误应该是出于工程设置或库路径等处。后在JAVAEYE上找到解决方案，在项目-属性-清单工具中将使用FAT32解决办法改为&#8220;是&#8221;，重新生成，测试通过。</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; 最终找出问题的原因应该在于磁盘格式，我的TEST工程是建立在FAT32格式的盘中，这里应该属于VS2008的一个BUG，即安装在FAT32格式磁盘下或工程路径在FAT32格式磁盘下时，编译器即会报上述错误。</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">Project/Properties/Manifest Tool/General/Use FAT32 Work-around =&gt; Yes</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">"链接器"/"清单文件"/"生成清单"选"是"</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"")</span></div><div><span style="font-size: 12px;"><br /></span></div><div style="font-family: Tahoma; font-size: 11px;"></div><img src ="http://www.cppblog.com/aaxron/aggbug/204748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2013-12-12 15:29 <a href="http://www.cppblog.com/aaxron/archive/2013/12/12/204748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Win32设备上下文(Device Contexts)</title><link>http://www.cppblog.com/aaxron/archive/2013/06/04/200786.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 04 Jun 2013 01:08:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2013/06/04/200786.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/200786.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2013/06/04/200786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/200786.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/200786.html</trackback:ping><description><![CDATA[<div style="widows: 2; text-transform: none; text-indent: 0px; font: 12px 新宋体; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">
<div>
<div>设备上下文(设备内容)</div>
<div>Device Contexts</div>
<div>A device context is a structure that defines a set of graphic objects and their associated attributes, as well as the graphic modes that affect output. The graphic objects include a pen for line drawing, a brush for painting and filling, a bitmap for copying or scrolling parts of the screen, a palette for defining the set of available colors, a region for clipping and other operations, and a path for painting and drawing operations. The remainder of this section is divided into the following three areas.&nbsp;</div>
<div><br /></div>
<div>About Device Contexts</div>
<div>Device independence is one of the chief features of Microsoft Windows. Applications can draw and print output on a variety of devices. The software that supports this device independence is contained in two dynamic-link libraries. The first, Gdi.dll, is referred to as the graphics device interface (GDI); the second is referred to as a device driver. The name of the second depends on the device where the application draws output. For example, if the application draws output in the client area of its window on a VGA display, this library is Vga.dll; if the application prints output on an Epson FX-80 printer, this library is Epson9.dll.&nbsp;</div>
<div><br /></div>
<div>An application must inform GDI to load a particular device driver and, once the driver is loaded, to prepare the device for drawing operations (such as selecting a line color and width, a brush pattern and color, a font typeface, a clipping region, and so on). These tasks are accomplished by creating and maintaining a device context (DC). A DC is a structure that defines a set of graphic objects and their associated attributes, and the graphic modes that affect output. The graphic objects include a pen for line drawing, a brush for painting and filling, a bitmap for copying or scrolling parts of the screen, a palette for defining the set of available colors, a region for clipping and other operations, and a path for painting and drawing operations. Unlike most of the structures, an application never has direct access to the DC; instead, it operates on the structure indirectly by calling various functions.&nbsp;</div>
<div><br /></div>
<div>This overview provides information on the following topics:&nbsp;</div>
<div><br /></div>
<div>Graphic Objects&nbsp;</div>
<div>Graphic Modes&nbsp;</div>
<div>Device Context Types&nbsp;</div>
<div>Device Context Operations&nbsp;</div>
<div>ICM-Enabled Device Context Functions&nbsp;</div>
<div>An important concept is the layout of a DC or a window, which describes the order in which GDI objects and text are revealed (either left-to-right or right-to-left). For more information, see "Window Layout and Mirroring" in Window Features and the GetLayout and SetLayout functions.&nbsp;</div>
<div><br /></div>
<div>Device Context Types</div>
<div>There are four types of DCs: display, printer, memory (or compatible), and information. Each type serves a specific purpose, as described in the following table.&nbsp;</div>
<div><br /></div>
<div>Device context Description&nbsp;</div>
<div>Display Supports drawing operations on a video display.&nbsp;</div>
<div>Printer Supports drawing operations on a printer or plotter.&nbsp;</div>
<div>Memory Supports drawing operations on a bitmap.&nbsp;</div>
<div>Information Supports the retrieval of device data.&nbsp;</div>
<div><br /></div>
<div>设备上下文是windows编程中最重要的概念之一。widnows下的所有绘图都是通过设备上下文进行的。&nbsp;</div>
<div>设备上下文是一种包含有关某个设备（如显示器或打印机）的绘制属性信息的 Windows 数据结构。所有绘制调用都通过设备上下文对象进行，这些对象封装了用于绘制线条、形状和文本的 Windows API。设备上下文允许在 Windows 中进行与设备无关的绘制。设备上下文可用于绘制到屏幕、打印机或者图元文件。</div>
<div><br /></div>
<div>设备上下文（Device Context）DC&nbsp;</div>
<div>DC实际上是GDI内部保存的数据结构。</div>
<div>DC与特定的显示设备（如显示器或打印机）相关。</div>
<div>对于显示器，DC总是与显示器上的特定视窗相关。</div>
<div>DC中的有些值是图形「属性」，这些属性定义了GDI绘图函数工作的细节。</div>
<div>例如，对於TextOut，DC的属性确定了文字的颜色、文字的背景色、x坐标和y坐标映射到视窗的显示区域的方式，以及显示文字时Windows使用的字体。</div>
<div>MSDN的解释: 一个DC是一个结构，它定义了一系列图形对象的集合以及它们相关的属性，以及影响输出效果的一些图形模式。这些图形对象包括一个画线的笔，一个填充和painting的画刷，一个用来向屏幕拷贝的位图，一个定义了一系列颜色集合的调色板，一个用来剪裁等操作的区域，一个做painting和drawing操作的路径。</div>
<div><br /></div>
<div>设备上下文</div>
<div>当您想在一个图形输出设备（诸如屏幕或者打印机）上绘图时，您首先必须获得一个设备上下文（或者DC）的句柄。将句柄传回给程序时，Windows就给了您使用设备的权限。然后您在GDI函数中将这个句柄作为一个参数，向Windows标识您想在其上进行绘图的设备。</div>
<div><br /></div>
<div>设备上下文中包含许多确定GDI函数如何在设备上工作的目前「属性」，这些属性允许传递给GDI函数的参数只包含起始坐标或者尺寸信息，而不必包含Windows在设备上显示对象时需要的所有其它信息。例如，呼叫TextOut时，您只需要在函数中给出设备上下文句柄、起始坐标、文字和文字的长度。您不必指定字体、文字颜色、文字后面的背景色彩以及字符间距，因为这些属性都是设备上下文的一部分。当您想改变这些属性之一时，您呼叫一个可以改变设备上下文中属性的函数，以后针对该设备上下文的TextOut呼叫来使用改变后的属性。</div>
<div>取得设备上下文句柄</div>
<div><br /></div>
<div>Windows提供了几种取得设备上下文句柄的方法。如果在处理一个消息时取得了设备上下文句柄，应该在退出窗口函数之前释放它（或者删除它）。一旦释放了句柄，它就不再有效了。对于打印机设备上下文句柄，规则就没有这么严格。在第十三章会讨论打印。</div>
<div>最常用的取得并释放设备上下文句柄的方法是，在处理WM_PAINT消息时，使用BeginPaint和EndPaint呼叫：</div>
<div>hdc = BeginPaint (hwnd, &amp;ps) ;</div>
<div>//do something</div>
<div>EndPaint (hwnd, &amp;ps) ;</div>
<div><br /></div>
<div>Windows程序还可以在处理非WM_PAINT消息时取得设备上下文句柄：</div>
<div>hdc = GetDC (hwnd) ;</div>
<div>//do something</div>
<div>ReleaseDC (hwnd, hdc) ;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div>
<div>Windows程序还可以取得适用于整个窗口（而不仅限于窗口的显示区域）的设备上下文句柄：</div>
<div>hdc = GetWindowDC (hwnd) ;</div>
<div>//do something</div>
<div>ReleaseDC (hwnd, hdc) ;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div>
<div>这个设备上下文除了显示区域之外，还包括窗口的标题列、菜单、滚动条和框架（frame）。GetWindowDC函数很少使用，如果想尝试用一用它，则必须拦截处理WM_NCPAINT消息，Windows使用该消息在窗口的非显示区域上绘图。</div>
<div>BeginPaint、GetDC和GetWindowDC获得的设备上下文都与视讯显示器上的某个特定窗口相关。取得设备上下文句柄的另一个更通用的函数是CreateDC：</div>
<div>hdc = CreateDC (pszDriver, pszDevice, pszOutput, pData) ;</div>
<div>//do something</div>
<div>DeleteDC (hdc) ;</div>
<div><br /></div>
<div><br /></div>
<div>设备上下文就是一个windows对象,即DC的句柄，而windows则是一种图形环境，其图形系统令人难以自信地灵活和强大。而实质上，widnows下的所有绘图都是通过设备上下文进行的，而不是直接对窗口和设备本身进行。</div>
<div><br /></div>
<div>作为windows的对象，设备上下文实际上是一种windows内部的数据结构。</div>
<div>设备上下文同样具有着它自身的属性，只是属性比较多而已，如下表&#8758;</div>
<div><br /></div>
<div>设备上下文属性<span style="white-space: pre" class="Apple-tab-span"> </span>属性默认值</div>
<div>背景色(background color)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>白色(white)</div>
<div>背景模式(background mode)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>不透明(opaque)</div>
<div>位图(bitmap)<span style="white-space: pre" class="Apple-tab-span"> </span>无(none)</div>
<div>刷子(brush)<span style="white-space: pre" class="Apple-tab-span"> </span>白色刷子(white brush)</div>
<div>刷子起点(brush origin)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>0,0</div>
<div>剪切区(clipping region)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>整个窗口或设备表面(entire window or device surface)</div>
<div>调色板(color palette)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>默认调色板(default palette)</div>
<div>画笔位置(pen position)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>0,0</div>
<div>绘图模式(drawing mode)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>r2_copypen</div>
<div>字体(font)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>系统字体</div>
<div>字间距(intercharater spacing)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>0</div>
<div>影射模式(mapping mode)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>mm_text</div>
<div>画笔(pen)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>黑色(black)</div>
<div>多边形填充模式(mapping mode)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>alternate</div>
<div>伸缩模式(stretching mode)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>blackonwhite</div>
<div>文本色(text color)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>黑色(black)</div>
<div>视口起点(viewport origin)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>0,0</div>
<div>视口范围(viewport extents)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>1,1</div>
<div>窗口起点(window origin)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>0,0</div>
<div>窗口范围(window extents)<span class="Apple-converted-space">&nbsp;</span><span style="white-space: pre" class="Apple-tab-span"> </span>1,1</div></div></div><br class="Apple-interchange-newline" /><img src ="http://www.cppblog.com/aaxron/aggbug/200786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2013-06-04 09:08 <a href="http://www.cppblog.com/aaxron/archive/2013/06/04/200786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux分析命令行参数getopt</title><link>http://www.cppblog.com/aaxron/archive/2013/04/16/199484.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 16 Apr 2013 07:40:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2013/04/16/199484.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/199484.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2013/04/16/199484.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/199484.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/199484.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 />-->getopt<br />getopt（分析命令行参数）<br />相关函数<br />表头文件<br />#include&lt;unistd.h&gt;<br />定义函数:<br /><span style="color: #0000FF; ">int</span>&nbsp;getopt(<span style="color: #0000FF; ">int</span>&nbsp;argc,<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;argv[&nbsp;],<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;optstring);<br /><span style="color: #0000FF; ">extern</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*optarg;<br /><span style="color: #0000FF; ">extern</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;optind,&nbsp;opterr,&nbsp;optopt;<br />函数说明&nbsp;getopt()用来分析命令行参数。参数argc和argv是由main()传递的参数个数和内容。<br />参数optstring为选项字符串，告知&nbsp;getopt()可以处理哪个选项以及哪个选项需要参数，如果选项字符串里的字母后接着冒号&#8220;:&#8221;，则表示还有相关的参数，<br />全域变量optarg&nbsp;即会指向此额外参数。如果在处理期间遇到了不符合optstring指定的其他选项getopt()将显示一个错误消息，并将全域变量optarg设为&#8220;?&#8221;字符，如果不希望getopt()打印出错信息，则只要将全域变量opterr设为0即可。<br />getopt()&nbsp;所设置的全局变量包括：<br />optarg&#8212;&#8212;指向当前选项参数（如果有）的指针。&nbsp;<br />optind&#8212;&#8212;再次调用&nbsp;getopt()&nbsp;时的下一个&nbsp;argv&nbsp;指针的索引。&nbsp;<br />optopt&#8212;&#8212;最后一个已知选项。<br />补充说明下optstring中的指定的内容的意义（例如getopt(argc,&nbsp;argv,&nbsp;"ab:c:de::");<br />1.单个字符，表示选项，（如上例中的abcde各为一个选项）<br />2.单个字符后接一个冒号：表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。（如上例中的b:c:）<br />3&nbsp;单个字符后跟两个冒号，表示该选项后必须跟一个参数。参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(如上例中的e::)</div><img src ="http://www.cppblog.com/aaxron/aggbug/199484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2013-04-16 15:40 <a href="http://www.cppblog.com/aaxron/archive/2013/04/16/199484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>win32下使用getopt,从qt中弄了个getop.c</title><link>http://www.cppblog.com/aaxron/archive/2013/04/16/199482.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 16 Apr 2013 07:24:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2013/04/16/199482.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/199482.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2013/04/16/199482.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/199482.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/199482.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; ">getopt.h</span><span style="color: #008000; "><br /></span>#pragma&nbsp;once<br />#ifdef&nbsp;__cplusplus<br /><span style="color: #0000FF; ">extern</span>&nbsp;"C"&nbsp;{<br /><span style="color: #0000FF; ">#endif</span><br /><br /><span style="color: #0000FF; ">extern</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;opterr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;if&nbsp;error&nbsp;message&nbsp;should&nbsp;be&nbsp;printed&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">extern</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;optind;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;index&nbsp;into&nbsp;parent&nbsp;argv&nbsp;vector&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">extern</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;optopt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;character&nbsp;checked&nbsp;for&nbsp;validity&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">extern</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;optreset;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;reset&nbsp;getopt&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">extern</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;&nbsp;&nbsp;&nbsp;*optarg;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;argument&nbsp;associated&nbsp;with&nbsp;option&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">int</span>&nbsp;getopt(<span style="color: #0000FF; ">int</span>&nbsp;argc,&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;argv[],&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*optstring);<br /><br />#ifdef&nbsp;__cplusplus<br />}&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">#endif</span></div><br />
getopt.c 从qt中弄的,一行都没改<br />
<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: #008000; ">//</span><span style="color: #008000; ">getopt.c&nbsp;从qt中弄的,一行都没改</span><span style="color: #008000; "><br />
</span><br />
<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;$Id:&nbsp;getopt.c,v&nbsp;1.2&nbsp;2005/07/07&nbsp;16:34:06&nbsp;dron&nbsp;Exp&nbsp;$&nbsp;</span><span style="color: #008000; ">*/</span><br />
<br />
<span style="color: #008000; ">/*</span><span style="color: #008000; "><br />
&nbsp;*&nbsp;Copyright&nbsp;(c)&nbsp;1987,&nbsp;1993,&nbsp;1994<br />
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;Regents&nbsp;of&nbsp;the&nbsp;University&nbsp;of&nbsp;California.&nbsp;&nbsp;All&nbsp;rights&nbsp;reserved.<br />
&nbsp;*<br />
&nbsp;*&nbsp;Redistribution&nbsp;and&nbsp;use&nbsp;in&nbsp;source&nbsp;and&nbsp;binary&nbsp;forms,&nbsp;with&nbsp;or&nbsp;without<br />
&nbsp;*&nbsp;modification,&nbsp;are&nbsp;permitted&nbsp;provided&nbsp;that&nbsp;the&nbsp;following&nbsp;conditions<br />
&nbsp;*&nbsp;are&nbsp;met:<br />
&nbsp;*&nbsp;1.&nbsp;Redistributions&nbsp;of&nbsp;source&nbsp;code&nbsp;must&nbsp;retain&nbsp;the&nbsp;above&nbsp;copyright<br />
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;notice,&nbsp;this&nbsp;list&nbsp;of&nbsp;conditions&nbsp;and&nbsp;the&nbsp;following&nbsp;disclaimer.<br />
&nbsp;*&nbsp;2.&nbsp;Redistributions&nbsp;in&nbsp;binary&nbsp;form&nbsp;must&nbsp;reproduce&nbsp;the&nbsp;above&nbsp;copyright<br />
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;notice,&nbsp;this&nbsp;list&nbsp;of&nbsp;conditions&nbsp;and&nbsp;the&nbsp;following&nbsp;disclaimer&nbsp;in&nbsp;the<br />
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;documentation&nbsp;and/or&nbsp;other&nbsp;materials&nbsp;provided&nbsp;with&nbsp;the&nbsp;distribution.<br />
&nbsp;*&nbsp;3.&nbsp;Neither&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;University&nbsp;nor&nbsp;the&nbsp;names&nbsp;of&nbsp;its&nbsp;contributors<br />
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;may&nbsp;be&nbsp;used&nbsp;to&nbsp;endorse&nbsp;or&nbsp;promote&nbsp;products&nbsp;derived&nbsp;from&nbsp;this&nbsp;software<br />
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;without&nbsp;specific&nbsp;prior&nbsp;written&nbsp;permission.<br />
&nbsp;*<br />
&nbsp;*&nbsp;THIS&nbsp;SOFTWARE&nbsp;IS&nbsp;PROVIDED&nbsp;BY&nbsp;THE&nbsp;REGENTS&nbsp;AND&nbsp;CONTRIBUTORS&nbsp;``AS&nbsp;IS''&nbsp;AND<br />
&nbsp;*&nbsp;ANY&nbsp;EXPRESS&nbsp;OR&nbsp;IMPLIED&nbsp;WARRANTIES,&nbsp;INCLUDING,&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO,&nbsp;THE<br />
&nbsp;*&nbsp;IMPLIED&nbsp;WARRANTIES&nbsp;OF&nbsp;MERCHANTABILITY&nbsp;AND&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE<br />
&nbsp;*&nbsp;ARE&nbsp;DISCLAIMED.&nbsp;&nbsp;IN&nbsp;NO&nbsp;EVENT&nbsp;SHALL&nbsp;THE&nbsp;REGENTS&nbsp;OR&nbsp;CONTRIBUTORS&nbsp;BE&nbsp;LIABLE<br />
&nbsp;*&nbsp;FOR&nbsp;ANY&nbsp;DIRECT,&nbsp;INDIRECT,&nbsp;INCIDENTAL,&nbsp;SPECIAL,&nbsp;EXEMPLARY,&nbsp;OR&nbsp;CONSEQUENTIAL<br />
&nbsp;*&nbsp;DAMAGES&nbsp;(INCLUDING,&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO,&nbsp;PROCUREMENT&nbsp;OF&nbsp;SUBSTITUTE&nbsp;GOODS<br />
&nbsp;*&nbsp;OR&nbsp;SERVICES;&nbsp;LOSS&nbsp;OF&nbsp;USE,&nbsp;DATA,&nbsp;OR&nbsp;PROFITS;&nbsp;OR&nbsp;BUSINESS&nbsp;INTERRUPTION)<br />
&nbsp;*&nbsp;HOWEVER&nbsp;CAUSED&nbsp;AND&nbsp;ON&nbsp;ANY&nbsp;THEORY&nbsp;OF&nbsp;LIABILITY,&nbsp;WHETHER&nbsp;IN&nbsp;CONTRACT,&nbsp;STRICT<br />
&nbsp;*&nbsp;LIABILITY,&nbsp;OR&nbsp;TORT&nbsp;(INCLUDING&nbsp;NEGLIGENCE&nbsp;OR&nbsp;OTHERWISE)&nbsp;ARISING&nbsp;IN&nbsp;ANY&nbsp;WAY<br />
&nbsp;*&nbsp;OUT&nbsp;OF&nbsp;THE&nbsp;USE&nbsp;OF&nbsp;THIS&nbsp;SOFTWARE,&nbsp;EVEN&nbsp;IF&nbsp;ADVISED&nbsp;OF&nbsp;THE&nbsp;POSSIBILITY&nbsp;OF<br />
&nbsp;*&nbsp;SUCH&nbsp;DAMAGE.<br />
&nbsp;</span><span style="color: #008000; ">*/</span><br />
<br />
<span style="color: #0000FF; ">#if</span>&nbsp;0<br />
<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;sccsid[]&nbsp;=&nbsp;"@(#)getopt.c&nbsp;&nbsp;&nbsp;&nbsp;8.3&nbsp;(Berkeley)&nbsp;4/27/95";<br />
__RCSID("$NetBSD:&nbsp;getopt.c,v&nbsp;1.26&nbsp;2003/08/07&nbsp;16:43:40&nbsp;agc&nbsp;Exp&nbsp;$");<br />
<span style="color: #0000FF; ">#endif</span><br />
<br />
#include&nbsp;&lt;stdio.h&gt;<br />
#include&nbsp;&lt;<span style="color: #0000FF; ">string</span>.h&gt;<br />
<br />
<span style="color: #0000FF; ">int</span>&nbsp;&nbsp;&nbsp;&nbsp;opterr&nbsp;=&nbsp;1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;if&nbsp;error&nbsp;message&nbsp;should&nbsp;be&nbsp;printed&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;optind&nbsp;=&nbsp;1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;index&nbsp;into&nbsp;parent&nbsp;argv&nbsp;vector&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;optopt,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;character&nbsp;checked&nbsp;for&nbsp;validity&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;optreset;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;reset&nbsp;getopt&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #0000FF; ">char</span>&nbsp;&nbsp;&nbsp;&nbsp;*optarg;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;argument&nbsp;associated&nbsp;with&nbsp;option&nbsp;</span><span style="color: #008000; ">*/</span><br />
<br />
<span style="color: #0000FF; ">#define</span>&nbsp;&nbsp;&nbsp;&nbsp;BADCH&nbsp;&nbsp;&nbsp;&nbsp;(int)'?'<br />
<span style="color: #0000FF; ">#define</span>&nbsp;&nbsp;&nbsp;&nbsp;BADARG&nbsp;&nbsp;&nbsp;&nbsp;(int)':'<br />
<span style="color: #0000FF; ">#define</span>&nbsp;&nbsp;&nbsp;&nbsp;EMSG&nbsp;&nbsp;&nbsp;&nbsp;""<br />
<br />
<span style="color: #008000; ">/*</span><span style="color: #008000; "><br />
&nbsp;*&nbsp;getopt&nbsp;--<br />
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;Parse&nbsp;argc/argv&nbsp;argument&nbsp;vector.<br />
&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #0000FF; ">int</span>&nbsp;getopt(<span style="color: #0000FF; ">int</span>&nbsp;argc,&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;argv[],&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*optstring)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*place&nbsp;=&nbsp;EMSG;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;option&nbsp;letter&nbsp;processing&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*oli;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;option&nbsp;letter&nbsp;list&nbsp;index&nbsp;</span><span style="color: #008000; ">*/</span><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(optreset&nbsp;||&nbsp;*place&nbsp;==&nbsp;0)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;update&nbsp;scanning&nbsp;pointer&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;optreset&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;place&nbsp;=&nbsp;argv[optind];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(optind&nbsp;&gt;=&nbsp;argc&nbsp;||&nbsp;*place++&nbsp;!=&nbsp;'-')&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Argument&nbsp;is&nbsp;absent&nbsp;or&nbsp;is&nbsp;not&nbsp;an&nbsp;option&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;place&nbsp;=&nbsp;EMSG;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(-1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;optopt&nbsp;=&nbsp;*place++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(optopt&nbsp;==&nbsp;'-'&nbsp;&amp;&amp;&nbsp;*place&nbsp;==&nbsp;0)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;"--"&nbsp;=&gt;&nbsp;end&nbsp;of&nbsp;options&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++optind;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;place&nbsp;=&nbsp;EMSG;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(-1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(optopt&nbsp;==&nbsp;0)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Solitary&nbsp;'-',&nbsp;treat&nbsp;as&nbsp;a&nbsp;'-'&nbsp;option<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;the&nbsp;program&nbsp;(eg&nbsp;su)&nbsp;is&nbsp;looking&nbsp;for&nbsp;it.&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;place&nbsp;=&nbsp;EMSG;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(strchr(optstring,&nbsp;'-')&nbsp;==&nbsp;NULL)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;optopt&nbsp;=&nbsp;'-';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;optopt&nbsp;=&nbsp;*place++;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;See&nbsp;if&nbsp;option&nbsp;letter&nbsp;is&nbsp;one&nbsp;the&nbsp;caller&nbsp;wanted<img src="http://www.cppblog.com/Images/dot.gif" alt="" />&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(optopt&nbsp;==&nbsp;':'&nbsp;||&nbsp;(oli&nbsp;=&nbsp;strchr(optstring,&nbsp;optopt))&nbsp;==&nbsp;NULL)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(*place&nbsp;==&nbsp;0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++optind;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(opterr&nbsp;&amp;&amp;&nbsp;*optstring&nbsp;!=&nbsp;':')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span style="color: #0000FF; ">void</span>)fprintf(stderr,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"unknown&nbsp;option&nbsp;--&nbsp;%c\n",&nbsp;optopt);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(BADCH);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Does&nbsp;this&nbsp;option&nbsp;need&nbsp;an&nbsp;argument?&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(oli[1]&nbsp;!=&nbsp;':')&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;don't&nbsp;need&nbsp;argument&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;optarg&nbsp;=&nbsp;NULL;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(*place&nbsp;==&nbsp;0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++optind;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Option-argument&nbsp;is&nbsp;either&nbsp;the&nbsp;rest&nbsp;of&nbsp;this&nbsp;argument&nbsp;or&nbsp;the<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entire&nbsp;next&nbsp;argument.&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(*place)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;optarg&nbsp;=&nbsp;place;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(argc&nbsp;&gt;&nbsp;++optind)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;optarg&nbsp;=&nbsp;argv[optind];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;option-argument&nbsp;absent&nbsp;</span><span style="color: #008000; ">*/</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;place&nbsp;=&nbsp;EMSG;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(*optstring&nbsp;==&nbsp;':')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(BADARG);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(opterr)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span style="color: #0000FF; ">void</span>)fprintf(stderr,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"option&nbsp;requires&nbsp;an&nbsp;argument&nbsp;--&nbsp;%c\n",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;optopt);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(BADCH);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;place&nbsp;=&nbsp;EMSG;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++optind;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(optopt);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;return&nbsp;option&nbsp;letter&nbsp;</span><span style="color: #008000; ">*/</span><br />
}</div>
<br />
gnu getopt的使用:<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: #008000; ">//</span><span style="color: #008000; ">main.c</span><span style="color: #008000; "><br />
</span>#include&lt;stdio.h&gt;<br />
#ifdef&nbsp;WIN32<br />
&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;"getopt.h"<br />
<span style="color: #0000FF; ">#else</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;#include&lt;unistd.h&gt;<br />
<span style="color: #0000FF; ">#endif</span><br />
<br />
<span style="color: #0000FF; ">int</span>&nbsp;main(<span style="color: #0000FF; ">int</span>&nbsp;argc,<span style="color: #0000FF; ">char</span>&nbsp;**argv)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ch;<br />
&nbsp;&nbsp;&nbsp;&nbsp;opterr&nbsp;=&nbsp;1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>((ch&nbsp;=&nbsp;getopt(argc,argv,"a:bcde"))!=&nbsp;-1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>(ch)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;'a':&nbsp;printf("option&nbsp;a:'%s'\n",optarg);&nbsp;<span style="color: #0000FF; ">break</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;'b':&nbsp;printf("option&nbsp;b&nbsp;:b\n");&nbsp;<span style="color: #0000FF; ">break</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">default</span>:&nbsp;&nbsp;printf("other&nbsp;option&nbsp;:%c\n",ch);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf("optopt&nbsp;+%c\n",optopt);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">system("pause");</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />
<br />
}</div><img src ="http://www.cppblog.com/aaxron/aggbug/199482.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2013-04-16 15:24 <a href="http://www.cppblog.com/aaxron/archive/2013/04/16/199482.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC的CFileDialog的使用</title><link>http://www.cppblog.com/aaxron/archive/2013/03/08/198294.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 08 Mar 2013 07:04:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2013/03/08/198294.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/198294.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2013/03/08/198294.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/198294.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/198294.html</trackback:ping><description><![CDATA[<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: #008000">//</span><span style="color: #008000">保存文件,指定相应的扩展名</span><span style="color: #008000"><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">char</span><span style="color: #000000">&nbsp;szFilter[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">指纹模板文件(*.dat)|*.dat|</span><span style="color: #000000">"</span><span style="color: #000000">;<br /></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszExt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">.dat</span><span style="color: #000000">"</span><span style="color: #000000">;<br />DWORD&nbsp;dwFlag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;OFN_HIDEREADONLY&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;OFN_OVERWRITEPROMPT&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;OFN_EXTENSIONDIFFERENT;<br />CFileDialog&nbsp;dlg(FALSE,pszExt,NULL,dwFlag,szFilter);<br /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(dlg.DoModal()</span><span style="color: #000000">!=</span><span style="color: #000000">IDOK)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br />}<br /><br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">打开文件</span><span style="color: #008000"><br /></span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;szFilter[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">utf-8编码的文本文件(*.txt)|*.txt|</span><span style="color: #000000">"</span><span style="color: #000000">;<br />CFileDialog&nbsp;dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;OFN_OVERWRITEPROMPT,szFilter);<br /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(dlg.DoModal()</span><span style="color: #000000">!=</span><span style="color: #000000">IDOK)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br />}<br /></span></div><img src ="http://www.cppblog.com/aaxron/aggbug/198294.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2013-03-08 15:04 <a href="http://www.cppblog.com/aaxron/archive/2013/03/08/198294.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC判断目录是否存在及遍历目录指定的文件.</title><link>http://www.cppblog.com/aaxron/archive/2013/01/10/197177.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 10 Jan 2013 10:22:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2013/01/10/197177.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/197177.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2013/01/10/197177.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/197177.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/197177.html</trackback:ping><description><![CDATA[<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: #008000">//</span><span style="color: #008000">&nbsp;MakePhotoLog.cpp&nbsp;:&nbsp;Defines&nbsp;the&nbsp;entry&nbsp;point&nbsp;for&nbsp;the&nbsp;console&nbsp;application.</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">stdafx.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /><br />#pragma&nbsp;pack(</span><span style="color: #000000">1</span><span style="color: #000000">)<br />typedef&nbsp;</span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;__tag_file_info<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;length;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">文件长度</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;crc32;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">暂未使用</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;name[</span><span style="color: #000000">38</span><span style="color: #000000">];</span><span style="color: #008000">//</span><span style="color: #008000">文件名</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;res[</span><span style="color: #000000">4</span><span style="color: #000000">];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;file_info;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Total&nbsp;=&nbsp;50</span><span style="color: #008000"><br /></span><span style="color: #000000">#pragma&nbsp;pack()<br /><br /></span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;GetLocalFileSize(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;szFileName)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;stat&nbsp;f_stat;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(stat(szFileName,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">f_stat)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</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">-</span><span style="color: #000000">1</span><span style="color: #000000">;<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: #0000ff">long</span><span style="color: #000000">)f_stat.st_size;<br />}<br /><br />BOOL&nbsp;IsDirectory(CString&nbsp;strPath)&nbsp;<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;WIN32_FIND_DATA&nbsp;wfd;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hFind&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;FindFirstFile(strPath,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">wfd);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;((hFind</span><span style="color: #000000">!=</span><span style="color: #000000">INVALID_HANDLE_VALUE)&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;&nbsp;(wfd.dwFileAttributes</span><span style="color: #000000">&amp;</span><span style="color: #000000">FILE_ATTRIBUTE_DIRECTORY));<br />&nbsp;&nbsp;&nbsp;&nbsp;FindClose(hFind);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;bRet;&nbsp;<br />}<br /><br /><br /><br /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;argc,&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;WIN32_FIND_DATA&nbsp;wfd;<br />&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hFind;<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strPath;<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strFileName;<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strFind;<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strJpgFile;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(argc</span><span style="color: #000000">&lt;</span><span style="color: #000000">2</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">Usage:%s&nbsp;&lt;photo-log&nbsp;path&gt;\r\n</span><span style="color: #000000">"</span><span style="color: #000000">,argv[</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">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;strPath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;argv[</span><span style="color: #000000">1</span><span style="color: #000000">];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">IsDirectory(strPath))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</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">s\</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;not&nbsp;found\r\n</span><span style="color: #000000">"</span><span style="color: #000000">,argv[</span><span style="color: #000000">1</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">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PathAddBackslash(strPath.GetBuffer(strPath.GetLength()</span><span style="color: #000000">+</span><span style="color: #000000">2</span><span style="color: #000000">));<br />&nbsp;&nbsp;&nbsp;&nbsp;strPath.ReleaseBuffer();<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;strFileName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strPath;<br />&nbsp;&nbsp;&nbsp;&nbsp;strFileName&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">photo_log.dat</span><span style="color: #000000">"</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;FILE</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;fp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fopen(</span><span style="color: #000000">"</span><span style="color: #000000">photo_log.dat</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">w+b</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;(fp</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;printf(</span><span style="color: #000000">"</span><span style="color: #000000">open&nbsp;\</span><span style="color: #000000">"</span><span style="color: #000000">%</span><span style="color: #000000">s\</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;error&nbsp;\r\n</span><span style="color: #000000">"</span><span style="color: #000000">,(LPCTSTR)strFileName);<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">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;strFind&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strPath&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">*.jpg</span><span style="color: #000000">"</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;hFind&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;FindFirstFile(strFind,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">wfd);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(hFind&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;INVALID_HANDLE_VALUE)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(</span><span style="color: #000000">"</span><span style="color: #000000">Invalid&nbsp;File&nbsp;Handle.&nbsp;GetLastError&nbsp;reports&nbsp;%d\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;GetLastError&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">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;TRUE;<br />&nbsp;&nbsp;&nbsp;&nbsp;file_info&nbsp;fi;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;nSucced&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(bRet)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strJpgFile&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strPath&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;wfd.cFileName;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(strlen(wfd.cFileName)</span><span style="color: #000000">&gt;</span><span style="color: #000000">32</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">continue</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(</span><span style="color: #000000">&amp;</span><span style="color: #000000">fi,</span><span style="color: #000000">0</span><span style="color: #000000">,</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(fi));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi.length&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;wfd.nFileSizeLow;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(fi.name,wfd.cFileName);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(fwrite(</span><span style="color: #000000">&amp;</span><span style="color: #000000">fi,</span><span style="color: #000000">1</span><span style="color: #000000">,</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(fi),fp)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(fi))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nSucced</span><span style="color: #000000">++</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">%d.&nbsp;make&nbsp;photo-log(%s)&nbsp;succed\r\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;nSucced,(LPCTSTR)strJpgFile&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">make&nbsp;photo-log(%s)&nbsp;failed\r\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;(LPCTSTR)strJpgFile&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;FindNextFile(hFind,</span><span style="color: #000000">&amp;</span><span style="color: #000000">wfd);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">make&nbsp;photo-log(%d)&nbsp;succed\r\n</span><span style="color: #000000">"</span><span style="color: #000000">,nSucced);<br />&nbsp;&nbsp;&nbsp;&nbsp;FindClose(hFind);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(fp</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;fclose(fp);<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 /><br /><br /><br /></span></div><img src ="http://www.cppblog.com/aaxron/aggbug/197177.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2013-01-10 18:22 <a href="http://www.cppblog.com/aaxron/archive/2013/01/10/197177.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>经典win32 SDK 程序</title><link>http://www.cppblog.com/aaxron/archive/2012/08/30/188701.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 30 Aug 2012 00:54:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/08/30/188701.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/188701.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/08/30/188701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/188701.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/188701.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 />-->#include&nbsp;&lt;windows.h&gt;<br />#include&nbsp;&lt;stdlib.h&gt;<br />#include&nbsp;&lt;malloc.h&gt;<br />#include&nbsp;&lt;memory.h&gt;<br />#include&nbsp;&lt;tchar.h&gt;<br /><br /><span style="color: #0000FF; ">#define</span>&nbsp;_ATL_CSTRING_EXPLICIT_CONSTRUCTORS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;some&nbsp;CString&nbsp;constructors&nbsp;will&nbsp;be&nbsp;explicit</span><br /><br />#include&nbsp;&lt;atlbase.h&gt;<br />#include&nbsp;&lt;atlstr.h&gt;<br /><br /><span style="color: #0000FF; ">#define</span>&nbsp;MAX_LOADSTRING&nbsp;100<br /><br />HINSTANCE&nbsp;hInst;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;current&nbsp;instance</span><span style="color: #008000; "><br /></span>TCHAR&nbsp;szTitle[MAX_LOADSTRING]&nbsp;=&nbsp;"Test&nbsp;Windows&nbsp;Message";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;The&nbsp;title&nbsp;bar&nbsp;text</span><span style="color: #008000; "><br /></span>TCHAR&nbsp;szWindowClass[MAX_LOADSTRING]&nbsp;=&nbsp;"MyTestWindows";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;the&nbsp;main&nbsp;window&nbsp;class&nbsp;name</span><span style="color: #008000; "><br /></span><br />HWND&nbsp;main_hWnd;<br />HWND&nbsp;btn_hwnd;<br />DWORD&nbsp;btn_style&nbsp;=&nbsp;WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|WS_CHILD;<br /><span style="color: #0000FF; ">int</span>&nbsp;times&nbsp;=&nbsp;0;<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Forward&nbsp;declarations&nbsp;of&nbsp;functions&nbsp;included&nbsp;in&nbsp;this&nbsp;code&nbsp;module:</span><span style="color: #008000; "><br /></span>ATOM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyRegisterClass(HINSTANCE&nbsp;hInstance);<br />BOOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitInstance(HINSTANCE,&nbsp;<span style="color: #0000FF; ">int</span>);<br />LRESULT&nbsp;CALLBACK&nbsp;&nbsp;&nbsp;&nbsp;WndProc(HWND,&nbsp;UINT,&nbsp;WPARAM,&nbsp;LPARAM);<br /><br /><span style="color: #0000FF; ">#define</span>&nbsp;MY_BUTTON_ID&nbsp;(1001)<br /><br /><br /><span style="color: #0000FF; ">int</span>&nbsp;APIENTRY&nbsp;WinMain(HINSTANCE&nbsp;hInstance,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HINSTANCE&nbsp;hPrevInstance,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPTSTR&nbsp;&nbsp;&nbsp;&nbsp;lpCmdLine,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nCmdShow)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;UNREFERENCED_PARAMETER(hPrevInstance);<br />&nbsp;&nbsp;&nbsp;&nbsp;UNREFERENCED_PARAMETER(lpCmdLine);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MSG&nbsp;msg;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MyRegisterClass(hInstance);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!InitInstance&nbsp;(hInstance,&nbsp;nCmdShow))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;FALSE;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(GetMessage(&amp;msg,&nbsp;NULL,&nbsp;0,&nbsp;0))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(msg.hwnd&nbsp;==&nbsp;main_hWnd)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ATLTRACE("%04u,[Loop&nbsp;Main]MSG:0x%04X,HWND:0x%06x&nbsp;\r\n",times++,msg.message,msg.hwnd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(msg.hwnd==btn_hwnd)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ATLTRACE("%04u,[Loop&nbsp;Button]MSG:0x%04X,HWND:0x%06x&nbsp;\r\n",times++,msg.message,msg.hwnd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TranslateMessage(&amp;msg);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DispatchMessage(&amp;msg);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(<span style="color: #0000FF; ">int</span>)&nbsp;msg.wParam;<br />}<br /><br /><br /><br />ATOM&nbsp;MyRegisterClass(HINSTANCE&nbsp;hInstance)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;WNDCLASSEX&nbsp;wcex;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;wcex.cbSize&nbsp;=&nbsp;<span style="color: #0000FF; ">sizeof</span>(WNDCLASSEX);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;wcex.style&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;CS_HREDRAW&nbsp;|&nbsp;CS_VREDRAW;<br />&nbsp;&nbsp;&nbsp;&nbsp;wcex.lpfnWndProc&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;WndProc;<br />&nbsp;&nbsp;&nbsp;&nbsp;wcex.cbClsExtra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;wcex.cbWndExtra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;wcex.hInstance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;hInstance;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">wcex.hIcon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;LoadIcon(hInstance,&nbsp;MAKEINTRESOURCE(IDI_WIN05));</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;wcex.hIcon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;wcex.hCursor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;LoadCursor(NULL,&nbsp;IDC_ARROW);<br />&nbsp;&nbsp;&nbsp;&nbsp;wcex.hbrBackground&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(HBRUSH)(COLOR_WINDOW+1);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">wcex.lpszMenuName&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;MAKEINTRESOURCE(IDC_WIN05);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;wcex.lpszMenuName&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;wcex.lpszClassName&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;szWindowClass;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">wcex.hIconSm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;LoadIcon(wcex.hInstance,&nbsp;MAKEINTRESOURCE(IDI_SMALL));</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;wcex.hIconSm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NULL;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;RegisterClassEx(&amp;wcex);<br />}<br /><br />BOOL&nbsp;InitInstance(HINSTANCE&nbsp;hInstance,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nCmdShow)<br />{<br /><br /><br />&nbsp;&nbsp;&nbsp;hInst&nbsp;=&nbsp;hInstance;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;main_hWnd&nbsp;=&nbsp;CreateWindow(szWindowClass,&nbsp;szTitle,&nbsp;WS_OVERLAPPEDWINDOW,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CW_USEDEFAULT,&nbsp;0,&nbsp;300,&nbsp;200,&nbsp;NULL,&nbsp;NULL,&nbsp;hInstance,&nbsp;NULL);<br /><br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!main_hWnd)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;FALSE;<br />&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;ShowWindow(main_hWnd,&nbsp;nCmdShow);<br />&nbsp;&nbsp;&nbsp;UpdateWindow(main_hWnd);<br /><br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;TRUE;<br />}<br /><br /><br />LRESULT&nbsp;CALLBACK&nbsp;WndProc(HWND&nbsp;hWnd,&nbsp;UINT&nbsp;message,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;wmId,&nbsp;wmEvent;<br />&nbsp;&nbsp;&nbsp;&nbsp;PAINTSTRUCT&nbsp;ps;<br />&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;hdc;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ATLTRACE("%04u,[Main&nbsp;WndProc]MSG:0x%04X,HWND:0x%06x&nbsp;\r\n",times++,message,hWnd);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>&nbsp;(message)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;WM_CREATE:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">ATLTRACE("Main&nbsp;HWND:0x%06x&nbsp;\r\n",main_hWnd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">ATLTRACE("WndProc&nbsp;HWND:0x%06x&nbsp;\r\n",hWnd);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn_hwnd&nbsp;=&nbsp;CreateWindowEx(0,"BUTTON","My&nbsp;button",btn_style,10,10,100,50,hWnd,(HMENU)(UINT_PTR)MY_BUTTON_ID,hInst,NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">ATLTRACE("Button&nbsp;HWND:0x%06x&nbsp;\r\n",btn_hwnd);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;WM_COMMAND:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wmId&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;LOWORD(wParam);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wmEvent&nbsp;=&nbsp;HIWORD(wParam);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Parse&nbsp;the&nbsp;menu&nbsp;selections:</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>&nbsp;(wmId)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;1001:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">MessageBox(hWnd,"abc","bcd",MB_OK);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">default</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;DefWindowProc(hWnd,&nbsp;message,&nbsp;wParam,&nbsp;lParam);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;WM_PAINT:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hdc&nbsp;=&nbsp;BeginPaint(hWnd,&nbsp;&amp;ps);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EndPaint(hWnd,&nbsp;&amp;ps);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;WM_DESTROY:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostQuitMessage(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">default</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;DefWindowProc(hWnd,&nbsp;message,&nbsp;wParam,&nbsp;lParam);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><img src ="http://www.cppblog.com/aaxron/aggbug/188701.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-08-30 08:54 <a href="http://www.cppblog.com/aaxron/archive/2012/08/30/188701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vc2010 tr1 regexp 小试</title><link>http://www.cppblog.com/aaxron/archive/2012/05/15/174968.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 15 May 2012 06:00:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/05/15/174968.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/174968.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/05/15/174968.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/174968.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/174968.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: #000000; ">#include&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">stdafx.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">regex</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; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</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; ">map</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;argv[])<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;正则替换</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;puts(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">//c++&nbsp;0x&nbsp;regex_replace()</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;str&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Hello&nbsp;333world</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;tr1::regex&nbsp;rx(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\\d+world</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;replacement&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">planet</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;str2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;tr1::regex_replace(str,&nbsp;rx,&nbsp;replacement);<br />&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">result:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;str2&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;map&nbsp;+&nbsp;auto</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;puts(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\r\n//map&nbsp;+&nbsp;auto</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;map</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;m;<br />&nbsp;&nbsp;&nbsp;&nbsp;m[</span><span style="color: #000000; ">"</span><span style="color: #000000; ">aaa</span><span style="color: #000000; ">"</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">a111111</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;m[</span><span style="color: #000000; ">"</span><span style="color: #000000; ">bbb</span><span style="color: #000000; ">"</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">b22222</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;m[</span><span style="color: #000000; ">"</span><span style="color: #000000; ">ccc</span><span style="color: #000000; ">"</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">c33333</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(auto&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;m.begin();&nbsp;i&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;m.end();&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">first&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">second&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;c++&nbsp;0x&nbsp;regex_match()</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;puts(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\r\n//c++&nbsp;0x&nbsp;regex_match()&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;regex&nbsp;p(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">(\\w+)&nbsp;\\w+&nbsp;(\\d+)&nbsp;\\w+&nbsp;(\\d+).*</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">s&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">aaa&nbsp;bbb&nbsp;333&nbsp;eee&nbsp;555</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;cmatch&nbsp;re;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;ret&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;regex_match(s,&nbsp;re,&nbsp;p);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">if&nbsp;(ret)</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;t;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(auto&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;re.begin();&nbsp;i&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;re.end();&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">first;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;t.substr(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;i</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">second&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">first);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;t&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;c++&nbsp;0x&nbsp;regex_search()</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;puts(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\r\n//c++&nbsp;0x&nbsp;regex_search()</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">s2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">hello&nbsp;world.&nbsp;123</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;regex&nbsp;p2(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\\d+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;tr1::regex_constants::icase);<br />&nbsp;&nbsp;&nbsp;&nbsp;cmatch&nbsp;re2;<br />&nbsp;&nbsp;&nbsp;&nbsp;regex_search(s2,&nbsp;re2,&nbsp;p2);<br />&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Matched&nbsp;\</span><span style="color: #000000; ">""</span><span style="color: #000000; ">&nbsp;&nbsp;&lt;&lt;&nbsp;re2.str()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;after&nbsp;\</span><span style="color: #000000; ">""</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;re2.prefix()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;at&nbsp;offset:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;&lt;&lt;&nbsp;re2.position()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;with&nbsp;length:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;re2.length()<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;endl;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;tr1::regex&nbsp;r</span><span style="color: #000000; ">"</span><span style="color: #000000; ">(Hello&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">world</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;&nbsp;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;getchar();<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></div><img src ="http://www.cppblog.com/aaxron/aggbug/174968.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-05-15 14:00 <a href="http://www.cppblog.com/aaxron/archive/2012/05/15/174968.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不带缓存的I/O和标准I/O</title><link>http://www.cppblog.com/aaxron/archive/2012/05/10/174468.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 10 May 2012 08:53:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/05/10/174468.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/174468.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/05/10/174468.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/174468.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/174468.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: #000000; ">不带缓存的I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O和标准I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O<br /><br />首先说说不带缓存的I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O，UNIX的文件I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O&nbsp;read、write是不带缓存的。不带缓存是指每个read、write都调用内核的一个系统调用，它们是POSIX.1的组成部分。<br />二者的原型为：<br />ssize_t&nbsp;read(&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;fd,&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;buf,&nbsp;size_t&nbsp;nbytes&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;若成功返回读到的字节数</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">ssize_t&nbsp;write(&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;fd,&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;buf,&nbsp;size_t&nbsp;nbytes&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;若成功返回已写的字节数</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><br />注意，上面的buf不是指read、write带缓存，而是当read时用来存放读出的字节，write时存放待写的字节。对于read，nbytes表示每次最多读的字节数。但这个块的大小将影响I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O的效率，其值和具体系统有关。<br /><br />补充一下，不带缓存的I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O对文件描述符操作，下面带缓存的I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O是针对流的。<br /><br />标准I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O库就是带缓存的I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O，它由ANSI&nbsp;C标准说明。当然，标准I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O最终都会调用上面的I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O例程。标准I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O库代替用户处理很多细节，比如缓存分配、以优化长度执行I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O等。<br /><br />标准I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O提供缓存的目的就是减少调用read和write的次数，它对每个I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O流自动进行缓存管理（标准I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O函数通常调用malloc来分配缓存）。它提供了三种类型的缓存：<br /><br /></span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;全缓存。当填满标准I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O缓存后才执行I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O操作。磁盘上的文件通常是全缓存的。<br /><br /></span><span style="color: #000000; ">2</span><span style="color: #000000; ">)&nbsp;行缓存。当输入输出遇到新行符或缓存满时，才由标准I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O库执行实际I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O操作。stdin、stdout通常是行缓存的。<br /><br /></span><span style="color: #000000; ">3</span><span style="color: #000000; ">)&nbsp;无缓存。相当于read、write了。stderr通常是无缓存的，因为它必须尽快输出。<br /><br />一般而言，由系统选择缓存的长度，并自动分配。标准I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O库在关闭流的时候自动释放缓存。<br /><br />在标准I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O库中，一个效率不高的不足之处是需要复制的数据量。当每次使用行函数fgets和fputs时，通常需要复制两次数据：一次是在内核和标准I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O缓存之间（当调用read和write时），第二次是在标准I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O缓存（通常系统分配和管理）和用户程序中的行缓存（fgets的参数就需要一个用户行缓存指针）之间。<br /><br />不管上面讲的到底懂没懂，记住一点：<br /><br />使用标准I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O例程的一个优点是无需考虑缓存及最佳I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O长度的选择，并且它并不比直接调用read、write慢多少。<br /><br />带缓存的文件操作是标准C&nbsp;库的实现，第一次调用带缓存的文件操作函数时标准库会自动分配内存并且读出一段固定大小的内容存储在缓存中。所以以后每次的读写操作并不是针对硬盘上的文件直接进行的，而是针对内存中的缓存的。何时从硬盘中读取文件或者向硬盘中写入文件有标准库的机制控制。不带缓存的文件操作通常都是系统提供的系统调用，更加低级，直接从硬盘中读取和写入文件，由于IO瓶颈的原因，速度并不如意，而且原子操作需要程序员自己保证，但使用得当的话效率并不差。<br />另外标准库中的带缓存文件IO&nbsp;是调用系统提供的不带缓存IO实现的。<br /><br />&#8220;术语不带缓冲指的是每个read和write都调用内核中的一个系统调用。所有的磁盘I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O都要经过内核的块缓冲（也称内核的缓冲区高速缓存），唯一例外的是对原始磁盘设备的I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O。既然read或write的数据都要被内核缓冲，那么术语&#8220;不带缓冲的I</span><span style="color: #000000; ">/</span><span style="color: #000000; ">O&#8220;指的是在用户的进程中对这两个函数不会自动缓冲，每次read或write就要进行一次系统调用。&#8220;<br /><br /></span><span style="color: #000000; ">--------</span><span style="color: #000000; ">摘自</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">unix环境编程</span><span style="color: #000000; ">&gt;</span></div><img src ="http://www.cppblog.com/aaxron/aggbug/174468.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-05-10 16:53 <a href="http://www.cppblog.com/aaxron/archive/2012/05/10/174468.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows路径操作API函数</title><link>http://www.cppblog.com/aaxron/archive/2012/05/02/173495.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Wed, 02 May 2012 10:04:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/05/02/173495.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/173495.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/05/02/173495.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/173495.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/173495.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 路径截断与合并函数              &nbsp;                        &nbsp;              &nbsp;                        PathRemoveArgs              去除路径的参数                        PathRemoveBackslash              去除路径最...&nbsp;&nbsp;<a href='http://www.cppblog.com/aaxron/archive/2012/05/02/173495.html'>阅读全文</a><img src ="http://www.cppblog.com/aaxron/aggbug/173495.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-05-02 18:04 <a href="http://www.cppblog.com/aaxron/archive/2012/05/02/173495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CRC32算法（查表法）代码</title><link>http://www.cppblog.com/aaxron/archive/2012/04/18/171890.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Wed, 18 Apr 2012 10:02:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/04/18/171890.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/171890.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/04/18/171890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/171890.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/171890.html</trackback:ping><description><![CDATA[<div>
<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">windows.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">stdio.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;PrintCrcTable()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Poly&nbsp;=&nbsp;0xedb88320&nbsp;WinRAR&nbsp;Poly</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;Val;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(DWORD&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">256</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Val&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(DWORD&nbsp;k&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;k&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">8</span><span style="color: #000000">;&nbsp;k</span><span style="color: #000000">++</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(Val&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Val&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0xedb88320L</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">^</span><span style="color: #000000">&nbsp;(Val&nbsp;</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Val&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Val&nbsp;</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(</span><span style="color: #000000">"</span><span style="color: #000000">0x%08x,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Val);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;((i</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">)</span><span style="color: #000000">%</span><span style="color: #000000">6</span><span style="color: #000000">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(</span><span style="color: #000000">"</span><span style="color: #000000">\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br /><br /></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;DWORD&nbsp;Crc32Table[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000"><br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x00000000</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x77073096</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xee0e612c</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x990951ba</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x076dc419</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x706af48f</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xe963a535</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x9e6495a3</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x0edb8832</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x79dcb8a4</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xe0d5e91e</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x97d2d988</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x09b64c2b</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x7eb17cbd</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xe7b82d07</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x90bf1d91</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x1db71064</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x6ab020f2</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xf3b97148</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x84be41de</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x1adad47d</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x6ddde4eb</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xf4d4b551</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x83d385c7</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x136c9856</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x646ba8c0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xfd62f97a</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x8a65c9ec</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x14015c4f</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x63066cd9</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xfa0f3d63</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x8d080df5</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x3b6e20c8</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x4c69105e</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xd56041e4</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xa2677172</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x3c03e4d1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x4b04d447</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xd20d85fd</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xa50ab56b</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x35b5a8fa</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x42b2986c</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xdbbbc9d6</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xacbcf940</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x32d86ce3</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x45df5c75</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xdcd60dcf</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xabd13d59</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x26d930ac</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x51de003a</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xc8d75180</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xbfd06116</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x21b4f4b5</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x56b3c423</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xcfba9599</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xb8bda50f</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x2802b89e</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x5f058808</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xc60cd9b2</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xb10be924</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x2f6f7c87</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x58684c11</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xc1611dab</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xb6662d3d</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x76dc4190</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x01db7106</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x98d220bc</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xefd5102a</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x71b18589</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x06b6b51f</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x9fbfe4a5</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xe8b8d433</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x7807c9a2</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x0f00f934</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x9609a88e</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xe10e9818</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x7f6a0dbb</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x086d3d2d</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x91646c97</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xe6635c01</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x6b6b51f4</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x1c6c6162</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x856530d8</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xf262004e</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x6c0695ed</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x1b01a57b</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x8208f4c1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xf50fc457</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x65b0d9c6</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x12b7e950</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x8bbeb8ea</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xfcb9887c</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x62dd1ddf</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x15da2d49</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x8cd37cf3</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xfbd44c65</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x4db26158</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x3ab551ce</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xa3bc0074</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xd4bb30e2</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x4adfa541</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x3dd895d7</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xa4d1c46d</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xd3d6f4fb</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x4369e96a</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x346ed9fc</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xad678846</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xda60b8d0</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x44042d73</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x33031de5</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xaa0a4c5f</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xdd0d7cc9</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x5005713c</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x270241aa</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xbe0b1010</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xc90c2086</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x5768b525</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x206f85b3</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xb966d409</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xce61e49f</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x5edef90e</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x29d9c998</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xb0d09822</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xc7d7a8b4</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x59b33d17</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x2eb40d81</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xb7bd5c3b</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xc0ba6cad</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xedb88320</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x9abfb3b6</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x03b6e20c</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x74b1d29a</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xead54739</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x9dd277af</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x04db2615</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x73dc1683</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xe3630b12</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x94643b84</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x0d6d6a3e</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x7a6a5aa8</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xe40ecf0b</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x9309ff9d</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x0a00ae27</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x7d079eb1</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xf00f9344</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x8708a3d2</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x1e01f268</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x6906c2fe</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xf762575d</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x806567cb</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x196c3671</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x6e6b06e7</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xfed41b76</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x89d32be0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x10da7a5a</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x67dd4acc</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xf9b9df6f</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x8ebeeff9</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x17b7be43</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x60b08ed5</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xd6d6a3e8</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xa1d1937e</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x38d8c2c4</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x4fdff252</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xd1bb67f1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xa6bc5767</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x3fb506dd</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x48b2364b</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xd80d2bda</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xaf0a1b4c</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x36034af6</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x41047a60</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xdf60efc3</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xa867df55</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x316e8eef</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x4669be79</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xcb61b38c</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xbc66831a</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x256fd2a0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x5268e236</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xcc0c7795</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xbb0b4703</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x220216b9</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x5505262f</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xc5ba3bbe</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xb2bd0b28</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x2bb45a92</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x5cb36a04</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xc2d7ffa7</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xb5d0cf31</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x2cd99e8b</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x5bdeae1d</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x9b64c2b0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xec63f226</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x756aa39c</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x026d930a</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x9c0906a9</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xeb0e363f</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x72076785</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x05005713</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x95bf4a82</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xe2b87a14</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x7bb12bae</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x0cb61b38</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x92d28e9b</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xe5d5be0d</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x7cdcefb7</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x0bdbdf21</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x86d3d2d4</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xf1d4e242</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x68ddb3f8</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x1fda836e</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x81be16cd</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xf6b9265b</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x6fb077e1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x18b74777</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x88085ae6</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xff0f6a70</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x66063bca</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x11010b5c</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x8f659eff</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xf862ae69</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x616bffd3</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x166ccf45</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xa00ae278</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xd70dd2ee</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x4e048354</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x3903b3c2</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xa7672661</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xd06016f7</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x4969474d</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x3e6e77db</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xaed16a4a</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xd9d65adc</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x40df0b66</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x37d83bf0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xa9bcae53</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xdebb9ec5</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x47b2cf7f</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x30b5ffe9</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xbdbdf21c</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xcabac28a</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x53b39330</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x24b4a3a6</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xbad03605</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xcdd70693</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0x54de5729</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x23d967bf</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xb3667a2e</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xc4614ab8</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x5d681b02</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x2a6f2b94</span><span style="color: #000000">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">0xb40bbe37</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0xc30c8ea1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x5a05df1b</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0x2d02ef8d</span><span style="color: #000000"><br />};<br /><br />DWORD&nbsp;GenerateCrc32(DWORD&nbsp;PartialCrc,PUCHAR&nbsp;&nbsp;Buffer,DWORD&nbsp;&nbsp;&nbsp;Length)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;crc;<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Generate&nbsp;the&nbsp;CRC32&nbsp;checksum.</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;crc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;PartialCrc&nbsp;</span><span style="color: #000000">^</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0xffffffffL</span><span style="color: #000000">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;Length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;crc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Crc32Table[(crc&nbsp;</span><span style="color: #000000">^</span><span style="color: #000000">&nbsp;Buffer[i])&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0xff</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">^</span><span style="color: #000000">&nbsp;(crc&nbsp;</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">8</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(crc&nbsp;</span><span style="color: #000000">^</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0xffffffffL</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: #0000ff">int</span><span style="color: #000000">&nbsp;main(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;argc,</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;szFileName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(argc</span><span style="color: #000000">&lt;</span><span style="color: #000000">2</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">Usage:%s&nbsp;&lt;filename&gt;&nbsp;\r\n</span><span style="color: #000000">"</span><span style="color: #000000">,argv[</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">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;szFileName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;argv[</span><span style="color: #000000">1</span><span style="color: #000000">];<br />&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">fp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fopen(szFileName,</span><span style="color: #000000">"</span><span style="color: #000000">rb</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">(NULL&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;fp)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">Open&nbsp;%s&nbsp;error:%d&nbsp;\r\n</span><span style="color: #000000">"</span><span style="color: #000000">,szFileName);<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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;crc32&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;fread(</span><span style="color: #000000">&amp;</span><span style="color: #000000">c,</span><span style="color: #000000">1</span><span style="color: #000000">,</span><span style="color: #000000">1</span><span style="color: #000000">,fp))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;crc32&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GenerateCrc32(crc32,</span><span style="color: #000000">&amp;</span><span style="color: #000000">c,</span><span style="color: #000000">1</span><span style="color: #000000">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">CRC32&nbsp;=&nbsp;0x%08X</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;crc32);<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></div><img src ="http://www.cppblog.com/aaxron/aggbug/171890.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-04-18 18:02 <a href="http://www.cppblog.com/aaxron/archive/2012/04/18/171890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>条件编译宏小结 </title><link>http://www.cppblog.com/aaxron/archive/2012/04/18/171838.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Wed, 18 Apr 2012 02:41:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/04/18/171838.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/171838.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/04/18/171838.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/171838.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/171838.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: #000000; ">编码的时候经常要用到条件编译，每次都到网上去查比较浪费时间，今天总结一下以备后用<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;编译器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GCC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;__GNUC__<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;__GNUC__&nbsp;&gt;=&nbsp;3&nbsp;//&nbsp;GCC3.0以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Visual&nbsp;C++<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;_MSC_VER（非VC编译器很多地方也有定义）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;_MSC_VER&nbsp;&gt;=1000&nbsp;//&nbsp;VC++4.0以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;_MSC_VER&nbsp;&gt;=1100&nbsp;//&nbsp;VC++5.0以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;_MSC_VER&nbsp;&gt;=1200&nbsp;//&nbsp;VC++6.0以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;_MSC_VER&nbsp;&gt;=1300&nbsp;//&nbsp;VC2003以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;_MSC_VER&nbsp;&gt;=1400&nbsp;//&nbsp;VC2005以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Borland&nbsp;C++<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;__BORLANDC__<br />
&nbsp;&nbsp;&nbsp;&nbsp;UNIX<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UNIX<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;__unix<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;__unix__<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Linux<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;__linux<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;__linux__<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeBSD<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;__FreeBSD__<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NetBSD<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;__NetBSD__<br />
&nbsp;&nbsp;&nbsp;&nbsp;Windows<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32bit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;_WIN32（或者WIN32）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64bit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;_WIN64<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUI&nbsp;&nbsp;App<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;_WINDOWS&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CUI&nbsp;&nbsp;App<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;_CONSOLE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows的Ver&nbsp;&#8230;&nbsp;WINVER<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8251;&nbsp;PC机Windows（95/98/Me/NT/2000/XP/Vista）和Windows&nbsp;CE都定义了<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;(WINVER&nbsp;&gt;=&nbsp;0x030a)&nbsp;//&nbsp;Windows&nbsp;3.1以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;(WINVER&nbsp;&gt;=&nbsp;0x0400)&nbsp;//&nbsp;Windows&nbsp;95/NT4.0以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;(WINVER&nbsp;&gt;=&nbsp;0x0410)&nbsp;//&nbsp;Windows&nbsp;98以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;(WINVER&nbsp;&gt;=&nbsp;0x0500)&nbsp;//&nbsp;Windows&nbsp;Me/2000以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;(WINVER&nbsp;&gt;=&nbsp;0x0501)&nbsp;//&nbsp;Windows&nbsp;XP以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;(WINVER&nbsp;&gt;=&nbsp;0x0600)&nbsp;//&nbsp;Windows&nbsp;Vista以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;95/98/Me的Ver&nbsp;&#8230;&nbsp;_WIN32_WINDOWS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MFC&nbsp;App、PC机上（Windows&nbsp;CE没有定义）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;_WIN32_WINDOWS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;(_WIN32_WINDOWS&nbsp;&gt;=&nbsp;0x0400)&nbsp;//&nbsp;Windows&nbsp;95以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;(_WIN32_WINDOWS&nbsp;&gt;=&nbsp;0x0410)&nbsp;//&nbsp;Windows&nbsp;98以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;(_WIN32_WINDOWS&nbsp;&gt;=&nbsp;0x0500)&nbsp;//&nbsp;Windows&nbsp;Me以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;NT的Ver&nbsp;&#8230;&nbsp;_WIN32_WINNT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;(_WIN32_WINNT&nbsp;&gt;=&nbsp;0x0500)&nbsp;//&nbsp;Windows&nbsp;2000以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;(_WIN32_WINNT&nbsp;&gt;=&nbsp;0x0501)&nbsp;//&nbsp;Windows&nbsp;XP以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;(_WIN32_WINNT&nbsp;&gt;=&nbsp;0x0600)&nbsp;//&nbsp;Windows&nbsp;Vista以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;CE（PocketPC）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;_WIN32_WCE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;CE&nbsp;&#8230;&nbsp;WINCEOSVER<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;CE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WCE_IF<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Internet&nbsp;Explorer的Ver&nbsp;&#8230;&nbsp;_WIN32_IE&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Cygwin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cygwin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;__CYGWIN__<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32bit版Cygwin（现在好像还没有64bit版）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;__CYGWIN32__<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MinGW（-mno-cygwin指定）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifdef&nbsp;__MINGW32__<br />
</span></div>
<p>转：http://blog.csdn.net/immcss/article/details/3881827</p><img src ="http://www.cppblog.com/aaxron/aggbug/171838.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-04-18 10:41 <a href="http://www.cppblog.com/aaxron/archive/2012/04/18/171838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UTF-8字符串</title><link>http://www.cppblog.com/aaxron/archive/2012/03/27/169116.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 27 Mar 2012 03:30:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/03/27/169116.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/169116.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/03/27/169116.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/169116.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/169116.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 />-->#include&nbsp;&lt;atlbase.h&gt;<br />&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()<br />&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;pszOctText&nbsp;=&nbsp;"\344\270\273\346\234\272\345\220\215";&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">"主机名"&nbsp;,&nbsp;8进制格式,UTF-8编码</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;pszHexText&nbsp;=&nbsp;"\xe5\x8d\xa1\xe5\x8f\xb7";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">"卡号"&nbsp;,&nbsp;&nbsp;&nbsp;16进制格式,UTF-8编码</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*pszUnicodeText="\u73b0\u4ee3\u8857\u666f";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">现代街景,Unicode&nbsp;character</span><span style="color: #008000; "><br /></span>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strText1&nbsp;=&nbsp;CA2W(pszOctText,CP_UTF8);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strText2&nbsp;=&nbsp;CA2W(pszHexText,CP_UTF8);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">MessageBox(NULL,strText2,strText1,MB_OK);</span><span style="color: #008000; "><br /></span>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(CW2A(strText1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(CW2A(strText2,CP_ACP));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(pszUnicodeText);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("pause");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;}</div><img src ="http://www.cppblog.com/aaxron/aggbug/169116.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-27 11:30 <a href="http://www.cppblog.com/aaxron/archive/2012/03/27/169116.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>Win32SDK:GetModuleHandle</title><link>http://www.cppblog.com/aaxron/archive/2012/02/15/165648.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Wed, 15 Feb 2012 01:49:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/02/15/165648.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/165648.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/02/15/165648.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/165648.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/165648.html</trackback:ping><description><![CDATA[<div><div><div>当一个文件被映射到调用进程的地址空间时，GetModuleHandle函数得到其中某一模块的句柄。&nbsp;</div><div>使用GetModuleHandle函数格式：</div><div>HMODULE WINAPI GetModuleHandle( __in LPCTSTR lpModuleName );</div><div>&nbsp;</div><div>参数 lpModuleName：</div><div>[in]用指针指向一个包含模块名以NULL字符结尾的串，模块是.dll或.exe文件。</div><div>当指定一个路径时，确定要用反斜线（\），而不是斜线（/）。这个模块名将和当前映射到调用进程地址空间的模块名进行独立地比较。 &nbsp;</div><div>假如这个参数是NULL，函数将返回创建调用进程（.exe文件）的文件的句柄。　</div><div>　</div><div>返回值：&nbsp;</div><div>如果函数调用成功，返回值是某一模块的句柄。 如果函数调用失败，返回NULL。要得知更多的出错信息，调用GetLastError。　</div></div></div><img src ="http://www.cppblog.com/aaxron/aggbug/165648.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-15 09:49 <a href="http://www.cppblog.com/aaxron/archive/2012/02/15/165648.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>捕获控制台等异常</title><link>http://www.cppblog.com/aaxron/archive/2012/02/07/165082.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 07 Feb 2012 03:02:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/02/07/165082.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/165082.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/02/07/165082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/165082.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/165082.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: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;WIN32_LEAN_AND_MEAN&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">windows.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; ">tchar.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; ">iostream</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; ">signal.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /><br /><br />BOOL&nbsp;WINAPI&nbsp;ConsoleHandler(DWORD&nbsp;dwCtrlType&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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; ">int</span><span style="color: #000000; ">&nbsp;main(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(SetConsoleCtrlHandler(&nbsp;(PHANDLER_ROUTINE)ConsoleHandler,TRUE)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">FALSE)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;unable&nbsp;to&nbsp;install&nbsp;handler<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;display&nbsp;message&nbsp;to&nbsp;the&nbsp;user</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Unable&nbsp;to&nbsp;install&nbsp;handler!\n</span><span style="color: #000000; ">"</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; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />BOOL&nbsp;WINAPI&nbsp;ConsoleHandler(DWORD&nbsp;CEvent)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;mesg[</span><span style="color: #000000; ">128</span><span style="color: #000000; ">];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">switch</span><span style="color: #000000; ">(CEvent)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;CTRL_C_EVENT:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_T(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">CTRL+C&nbsp;received!</span><span style="color: #000000; ">"</span><span style="color: #000000; ">),_T(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">CEvent</span><span style="color: #000000; ">"</span><span style="color: #000000; ">),MB_OK);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">case&nbsp;CTRL_BREAK_EVENT:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_T("CTRL+BREAK&nbsp;received!"),_T("CEvent"),MB_OK);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">case&nbsp;CTRL_CLOSE_EVENT:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_T("Program&nbsp;being&nbsp;closed!"),_T("CEvent"),MB_OK);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">case&nbsp;CTRL_LOGOFF_EVENT:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_T("User&nbsp;is&nbsp;logging&nbsp;off!"),_T("CEvent"),MB_OK);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">case&nbsp;CTRL_SHUTDOWN_EVENT:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_T("User&nbsp;is&nbsp;logging&nbsp;off!"),_T("CEvent"),MB_OK);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;break;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;TRUE;<br />}</span></div><img src ="http://www.cppblog.com/aaxron/aggbug/165082.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-07 11:02 <a href="http://www.cppblog.com/aaxron/archive/2012/02/07/165082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>