﻿<?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++博客-    Update 牌...@ Blog-随笔分类-VC Function</title><link>http://www.cppblog.com/Lee7/category/4850.html</link><description>  当华美的叶片落尽，生命的脉络才历历可见。 －－ 聂鲁达    
</description><language>zh-cn</language><lastBuildDate>Sat, 27 Dec 2008 23:34:30 GMT</lastBuildDate><pubDate>Sat, 27 Dec 2008 23:34:30 GMT</pubDate><ttl>60</ttl><item><title>三方法改变每个标签页标题</title><link>http://www.cppblog.com/Lee7/archive/2008/12/25/70335.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Thu, 25 Dec 2008 08:08:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/12/25/70335.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/70335.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/12/25/70335.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/70335.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/70335.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: CPropertySheet 的选项卡中显示文本是通常取自的对话框模板资源中每个 CPropertyPage 标题。 还有一些其他方法， 可被用来选择对于每一页标题&nbsp;&nbsp;<a href='http://www.cppblog.com/Lee7/archive/2008/12/25/70335.html'>阅读全文</a><img src ="http://www.cppblog.com/Lee7/aggbug/70335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-12-25 16:08 <a href="http://www.cppblog.com/Lee7/archive/2008/12/25/70335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读写配置文件 ini</title><link>http://www.cppblog.com/Lee7/archive/2008/03/27/45498.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Thu, 27 Mar 2008 02:37:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/03/27/45498.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/45498.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/03/27/45498.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/45498.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/45498.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>首先介绍两个函数：<br><br>读取 ini 文件：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">DWORD&nbsp;GetPrivateProfileString(<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTR&nbsp;lpAppName,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;points&nbsp;</span><span style="COLOR: #0000ff">to</span><span style="COLOR: #000000">&nbsp;section&nbsp;name<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTR&nbsp;lpKeyName,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;points&nbsp;</span><span style="COLOR: #0000ff">to</span><span style="COLOR: #000000">&nbsp;key&nbsp;name<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTR&nbsp;lpDefault,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;points&nbsp;</span><span style="COLOR: #0000ff">to</span><span style="COLOR: #000000">&nbsp;default&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPTSTR&nbsp;lpReturnedString,&nbsp;&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;points&nbsp;</span><span style="COLOR: #0000ff">to</span><span style="COLOR: #000000">&nbsp;destination&nbsp;buffer<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;DWORD&nbsp;nSize,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;size&nbsp;of&nbsp;destination&nbsp;buffer<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTR&nbsp;lpFileName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;points&nbsp;</span><span style="COLOR: #0000ff">to</span><span style="COLOR: #000000">&nbsp;initialization&nbsp;filename<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>参数说明：<br>lpAppName ：ini 文件中的一个字段名<br>lpKeyName ：lpAppName 下的一个键名，也就是具体的变量名<br>lpDefault ：如果没有其前两个参数值，则将此值赋给变量<br>lpReturnedString ：接收INI文件中的值的CString对象,即目的缓存器<br>nSize ：目的缓存器的大小<br>lpFileName ：完整的INI文件路径名<br><br>写入ini 文件：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">BOOL&nbsp;WritePrivateProfileString(<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTRlpAppName,&nbsp;&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;section&nbsp;name<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTRlpKeyName,&nbsp;&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;key&nbsp;name<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTRlpString,&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">to</span><span style="COLOR: #000000">&nbsp;add<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTRlpFileName&nbsp;&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;initialization&nbsp;file<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>);</span></div>
参数说明：<br>lpAppName ：ini 文件中的一个字段名<br>lpKeyName ：lpAppName 下的一个键名，也就是具体的变量名<br>lpString ：是键值，也就是变量的值，必须为LPCTSTR或CString类型<br>lpFileName ：完整的INI文件路径名<br><br>读取整型值：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>UINT&nbsp;GetPrivateProfileInt(<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTRlpAppName,&nbsp;&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;section&nbsp;name<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTRlpKeyName,&nbsp;&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;key&nbsp;name<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;INTnDefault,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;return&nbsp;value&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;key&nbsp;name&nbsp;</span><span style="COLOR: #0000ff">not</span><span style="COLOR: #000000">&nbsp;found<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;LPCTSTRlpFileName&nbsp;&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;initialization&nbsp;file&nbsp;name<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>);</span></div>
<br>实例：<br><br>写入：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">CString&nbsp;StrName,Strtemp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nAge;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;filename[</span><span style="COLOR: #000000">20</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">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>StrName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">jacky</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>nAge&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>WritePrivateProfileString(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Student</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Name</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,StrName,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">res\\setting.ini</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
读取：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">CString&nbsp;SName;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>GetPrivateProfileString(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Student</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Name</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">DefaultName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,SName.GetBuffer(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">),</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">res\\setting.ini</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>SName.ReleaseBuffer();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>MessageBox(SName);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>
<img src ="http://www.cppblog.com/Lee7/aggbug/45498.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-03-27 10:37 <a href="http://www.cppblog.com/Lee7/archive/2008/03/27/45498.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> SetTimer函数的用法</title><link>http://www.cppblog.com/Lee7/archive/2008/03/20/44943.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Thu, 20 Mar 2008 06:04:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/03/20/44943.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/44943.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/03/20/44943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/44943.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/44943.html</trackback:ping><description><![CDATA[<p style="COLOR: #000080">什么时候我们需要用到SetTimer函数呢？当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了。 使用定时器的方法比较简单，通常告诉WINDOWS一个时间间隔，然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现：发送WM_TIMER消息和调用应用程序定义的回调函数。 <br>
<p style="COLOR: #000080">
<p style="COLOR: #000080">1.1 用WM_TIMER来设置定时器<br>
<p style="COLOR: #000080">先请看SetTimer这个API函数的原型 <br>
<p style="COLOR: #000080">UINT_PTR SetTimer(<br>&nbsp; HWND hWnd,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 窗口句柄<br>&nbsp; UINT_PTR nIDEvent,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 定时器ID，多个定时器时，可以通过该ID判断是哪个定时器<br>&nbsp; UINT uElapse,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 时间间隔,单位为毫秒<br>&nbsp; TIMERPROC lpTimerFunc&nbsp;&nbsp; // 回调函数<br>);<br>
<p style="COLOR: #000080">例如 <br>SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器<br>在MFC程序中SetTimer被封装在CWnd类中，调用就不用指定窗口句柄了<br>
<p style="COLOR: #000080">于是SetTimer函数的原型变为： <br>
<p style="COLOR: #000080">UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD)) <br>
<p style="COLOR: #000080">当使用SetTimer函数的时候，就会生成一个计时器。函数中nIDEvent指的是计时器的标识，也就是名字。nElapse指的是时间间隔，也就是每隔多长时间触发一次事件。第三个参数是一个回调函数，在这个函数里，放入你想要做的事情的代码，你可以将它设定为NULL，也就是使用系统默认的回调函数，系统默认认的是onTime函数。这个函数怎么生成的呢？你需要在需要计时器的类的生成onTime函数：在ClassWizard里，选择需要计时器的类，添加WM_TIME消息映射，就自动生成onTime函数了。然后在函数里添加代码，让代码实现功能。每隔一段时间就会自动执行一次。 <br>
<p style="COLOR: #000080">例： <br>
<p style="COLOR: #000080">SetTimer(1,1000,NULL); <br>
<p style="COLOR: #000080">1:计时器的名称； <br>
<p style="COLOR: #000080">1000：时间间隔，单位是毫秒； <br>
<p style="COLOR: #000080">NULL:使用onTime函数。 <br>
<p style="COLOR: #000080">当不需要计时器的时候调用KillTimer(nIDEvent); <br>
<p style="COLOR: #000080">例如：KillTimer(1); <br>
<p style="COLOR: #000080">1.2 调用回调函数<br>
<p style="COLOR: #000080">此方法首先写一个如下格式的回调函数<br>
<p style="COLOR: #000080">void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);<br>然后再用SetTimer(1,100,TimerProc)函数来建一个定时器，第三个参数就是回调函数地址。<br>
<p style="COLOR: #000080">二. 或许你会问，如果我要加入两个或者两个以上的 timer怎么办？ <br>
<p style="COLOR: #000080">继续用SetTimer函数吧，上次的timer的ID是1，这次可以是2，3，4。。。。 <br>
<p style="COLOR: #000080">SetTimer(2,1000,NULL); <br>
<p style="COLOR: #000080">SetTimer(3,500,NULL); <br>
<p style="COLOR: #000080">嗯，WINDOWS会协调他们的。当然onTimer函数体也要发生变化，要在函数体内添加每一个timer的处理代码： <br>
<p style="COLOR: #000080">onTimer(nIDEvent) <br>
<p style="COLOR: #000080">{ <br>
<p style="COLOR: #000080">switch(nIDEvent) <br>
<p style="COLOR: #000080">{ <br>
<p style="COLOR: #000080">case 1:........; <br>
<p style="COLOR: #000080">break; <br>
<p style="COLOR: #000080">case 2:.......; <br>
<p style="COLOR: #000080">break; <br>
<p style="COLOR: #000080">case 3:......; <br>
<p style="COLOR: #000080">break; <br>
<p style="COLOR: #000080">} <br>
<p style="COLOR: #000080">}<br>
<p style="COLOR: #000080">什么时候我们需要用到SetTimer函数呢？当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了。 使用定时器的方法比较简单，通常告诉WINDOWS一个时间间隔，然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现：发送WM_TIMER消息和调用应用程序定义的回调函数。 <br>
<p style="COLOR: #000080">
<p style="COLOR: #000080">1.1 用WM_TIMER来设置定时器<br>
<p style="COLOR: #000080">先请看SetTimer这个API函数的原型 <br>
<p style="COLOR: #000080">UINT_PTR SetTimer(<br>&nbsp; HWND hWnd,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 窗口句柄<br>&nbsp; UINT_PTR nIDEvent,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 定时器ID，多个定时器时，可以通过该ID判断是哪个定时器<br>&nbsp; UINT uElapse,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 时间间隔,单位为毫秒<br>&nbsp; TIMERPROC lpTimerFunc&nbsp;&nbsp; // 回调函数<br>);<br>
<p style="COLOR: #000080">例如 <br>SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器<br>在MFC程序中SetTimer被封装在CWnd类中，调用就不用指定窗口句柄了<br>
<p style="COLOR: #000080">于是SetTimer函数的原型变为： <br>
<p style="COLOR: #000080">UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD)) <br>
<p style="COLOR: #000080">当使用SetTimer函数的时候，就会生成一个计时器。函数中nIDEvent指的是计时器的标识，也就是名字。nElapse指的是时间间隔，也就是每隔多长时间触发一次事件。第三个参数是一个回调函数，在这个函数里，放入你想要做的事情的代码，你可以将它设定为NULL，也就是使用系统默认的回调函数，系统默认认的是onTime函数。这个函数怎么生成的呢？你需要在需要计时器的类的生成onTime函数：在ClassWizard里，选择需要计时器的类，添加WM_TIME消息映射，就自动生成onTime函数了。然后在函数里添加代码，让代码实现功能。每隔一段时间就会自动执行一次。 <br>
<p style="COLOR: #000080">例： <br>
<p style="COLOR: #000080">SetTimer(1,1000,NULL); <br>
<p style="COLOR: #000080">1:计时器的名称； <br>
<p style="COLOR: #000080">1000：时间间隔，单位是毫秒； <br>
<p style="COLOR: #000080">NULL:使用onTime函数。 <br>
<p style="COLOR: #000080">当不需要计时器的时候调用KillTimer(nIDEvent); <br>
<p style="COLOR: #000080">例如：KillTimer(1); <br>
<p style="COLOR: #000080">1.2 调用回调函数<br>
<p style="COLOR: #000080">此方法首先写一个如下格式的回调函数<br>
<p style="COLOR: #000080">void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);<br>然后再用SetTimer(1,100,TimerProc)函数来建一个定时器，第三个参数就是回调函数地址。<br>
<p style="COLOR: #000080">二. 或许你会问，如果我要加入两个或者两个以上的 timer怎么办？ <br>
<p style="COLOR: #000080">继续用SetTimer函数吧，上次的timer的ID是1，这次可以是2，3，4。。。。 <br>
<p style="COLOR: #000080">SetTimer(2,1000,NULL); <br>
<p style="COLOR: #000080">SetTimer(3,500,NULL); <br>
<p style="COLOR: #000080">嗯，WINDOWS会协调他们的。当然onTimer函数体也要发生变化，要在函数体内添加每一个timer的处理代码： <br>
<p style="COLOR: #000080">onTimer(nIDEvent) <br>
<p style="COLOR: #000080">{ <br>
<p style="COLOR: #000080">switch(nIDEvent) <br>
<p style="COLOR: #000080">{ <br>
<p style="COLOR: #000080">case 1:........; <br>
<p style="COLOR: #000080">break; <br>
<p style="COLOR: #000080">case 2:.......; <br>
<p style="COLOR: #000080">break; <br>
<p style="COLOR: #000080">case 3:......; <br>
<p style="COLOR: #000080">break; <br>
<p style="COLOR: #000080">} <br>
<p style="COLOR: #000080">} </p>
<img src ="http://www.cppblog.com/Lee7/aggbug/44943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-03-20 14:04 <a href="http://www.cppblog.com/Lee7/archive/2008/03/20/44943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WSAAsyncSelect()函数详解</title><link>http://www.cppblog.com/Lee7/archive/2008/03/20/44941.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Thu, 20 Mar 2008 05:46:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/03/20/44941.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/44941.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/03/20/44941.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/44941.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/44941.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: WSAAsyncSelect()<br>简述:   通知套接口有请求事件发生. <br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/Lee7/archive/2008/03/20/44941.html'>阅读全文</a><img src ="http://www.cppblog.com/Lee7/aggbug/44941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-03-20 13:46 <a href="http://www.cppblog.com/Lee7/archive/2008/03/20/44941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Win32 SDK注册表操作函数――RegQueryValue</title><link>http://www.cppblog.com/Lee7/archive/2008/02/29/43464.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Fri, 29 Feb 2008 05:29:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/02/29/43464.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/43464.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/02/29/43464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/43464.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/43464.html</trackback:ping><description><![CDATA[<p><strong>RegQueryValue</strong>函数找回给定注册表键的默认值或未命名值所关联的数据。这个数据必须是一个以空字符结束的字符串。</p>
<br><br>
<p>这个函数与Windows 3.1兼容。基于Win32的应用程序应该使用<a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_3wzc.htm"><strong><u><font color=#0000ff>RegQueryValueEx</font></u></strong></a>函数。 </p>
<pre><code><strong>LONG RegQueryValue(<br>  HKEY</strong><em> hKey</em><strong>,       </strong>// 要查询键的句柄<br><strong>  LPCTSTR</strong><em> lpSubKey</em><strong>,</strong><br><strong>                   </strong>// 要查询子键的名字<br><strong>  LPTSTR</strong><em> lpValue</em><strong>,  </strong>// 返回字符串的缓存<br><strong>  PLONG</strong><em> lpcbValue</em>  // 接收返回字符串的大小<br><strong>);</strong><br> </code></pre>
<br><br>
<h4>参数</h4>
<br><br>
<dl><br><br>
<dt><em>hKey</em> <br><br>
<dd>当前打开的键或下列已确定保留句柄值： <br><br>
<p><strong>HKEY_CLASSES_ROOT</strong><br><strong>HKEY_CURRENT_CONFIG</strong><br><strong>HKEY_CURRENT_USER</strong><br><strong>HKEY_LOCAL_MACHINE</strong><br><strong>HKEY_USERS<br>Windows NT:</strong> <strong>HKEY_PERFORMANCE_DATA</strong> <br><strong>Windows 95和Windows 98:</strong> <strong>HKEY_DYN_DATA</strong> </p>
<br><br>
<dt><em>lpSubKey</em> <br><br>
<dd>指向要被找回默认值的<em>hKey</em>参数子键的名字的以空字符结束的字符串。如果这个参数为NULL或指向一个空字符串，那么这个函数找回能被<em>hKey</em>识别的默认值。 <br><br>
<dt><em>lpValue</em> <br><br>
<dd>指向与给定值的默认值相关联的以空字符串结束的字符串的缓存区。 <br><br>
<p>如果<em>lpValue</em>是NULL并且<em>lpcbValue</em>不是NULL，这个函数返回ERROR_SUCCESS，并取回被lpcbData指定的变量缓存的大小（以字节为单位）。这个为值的数据缓存分配最好的途径。 </p>
<br><br>
<dt><em>lpcbValue</em> <br><br>
<dd>以字节为单位，指向<em>lpData</em>参数所指定地缓存区大小的变量。函数返回复制到<em>lpData</em>的数据大小的变量（包含结束字符）。 <br><br>
<p>如果被<em>lpData</em>参数指定的缓存不够大，这个函数返回ERROR_MORE_DATA值，并取回被<em>lpcbData</em>指定的变量缓存的大小（以字节为单位）。 <br><br>
<p>在所有的案例中，在<em>lpcbValue</em>返回的值的大小包含字符串的结束符。 </p>
</dd></dl><br><br>
<h4>返回值</h4>
<br><br>
<p>如果调用成功，返回ERROR_SUCCESS。</p>
<br><br>
<p>如果调用失败，返回一个非零错误码（定义在WINERROR.H）。你可以使用带有FORMAT_MESSAGE_FROM_SYSTEM标记的<a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/strings_0sdh.htm"><strong><u><font color=#0000ff>FormatMessage</font></u></strong></a>函数获得错误的普通描述信息。</p>
<br><br>
<h4>注意</h4>
<br><br>
<p>能被<em>hKey</em>参数识别的键必须被带有KEY_QUERY_VALUE存取权限打开（KEY_READ存取权限包括KEY_QUERY_VALUE存取权限）。 </p>
<br><br>
<p>如果这个函数的ANSI版本被使用（明确的调用<strong>RegQueryValueExA</strong>或在包含WINDOWS.H文件前不定义UNICODE），这个函数在复制它到<em>lpValue</em>参数给定的缓存区前，转换存贮的Unicode字符串到ANSI字符串。 </p>
<br><br>
<h4>快速信息</h4>
<br><br>
<p><strong>&nbsp;&nbsp;Windows NT: </strong>需要3.1或更高版本。<br><strong>&nbsp;&nbsp;Windows: </strong>需要Windows 95或更高版本。<br><strong>&nbsp;&nbsp;Windows CE: </strong>不支持。<br><strong>&nbsp;&nbsp;头文件: </strong>winreg.h。<br><strong>&nbsp;&nbsp;输入库: </strong>advapi32.lib。<br><strong>&nbsp;&nbsp;Unicode: </strong>在Windows NT中作为Unicode和ANSI执行。</p>
<br><br>
<h4>参见</h4>
<br><br>
<p><a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_9bzt.htm"><u><font color=#0000ff>Registry Overview</font></u></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_59mb.htm"><u><font color=#0000ff>Registry Functions</font></u></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_1juh.htm"><strong><u><font color=#0000ff>RegEnumKey</font></u></strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_4854.htm"><strong><u><font color=#0000ff>RegEnumKeyEx</font></u></strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_65yd.htm"><strong><u><font color=#0000ff>RegEnumValue</font></u></strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_5xkp.htm"><strong><u><font color=#0000ff>RegQueryInfoKey</font></u></strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_3wzc.htm"><strong><u><font color=#0000ff>RegQueryValueEx</font></u></strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_6qzp.htm"><strong><u><font color=#0000ff>RegSetValue</font></u></strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_76bc.htm"><strong><u><font color=#0000ff>RegSetValueEx</font></u></strong></a> </p>
<img src ="http://www.cppblog.com/Lee7/aggbug/43464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-02-29 13:29 <a href="http://www.cppblog.com/Lee7/archive/2008/02/29/43464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Win32 SDK注册表操作――RegOpenKey</title><link>http://www.cppblog.com/Lee7/archive/2008/02/29/43463.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Fri, 29 Feb 2008 05:28:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/02/29/43463.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/43463.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/02/29/43463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/43463.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/43463.html</trackback:ping><description><![CDATA[<p><strong>RegOpenKey</strong>函数打开给定键。这个函数与Windows 3.1兼容。基于Win32的应用程序应该使用<a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_7yns.htm"><strong><u><font color=#0000ff>RegOpenKeyEx</font></u></strong></a>函数。 </p>
<pre><code><strong>LONG RegOpenKey(<br>  HKEY</strong><em> hKey</em><strong>,        </strong>// 要打开键的句柄<br><strong>  LPCTSTR</strong><em> lpSubKey</em><strong>, </strong>// 要打开子键的名字的地址<br><strong>  PHKEY</strong><em> phkResult</em>   // 要打开键的句柄的地址<br><strong>);</strong><br> </code></pre>
<br>
<h4>参数</h4>
<br>
<dl><br>
<dt><em>hKey</em> <br>
<dd>当前打开键的句柄或下列已确定的保留句柄值： <br>
<p><strong>HKEY_CLASSES_ROOT</strong><br><strong>HKEY_CURRENT_CONFIG</strong><br><strong>HKEY_CURRENT_USER</strong><br><strong>HKEY_LOCAL_MACHINE</strong><br><strong>HKEY_USERS<br>Windows NT:</strong> <strong>HKEY_PERFORMANCE_DATA</strong> <br><strong>Windows 95和Windows 98:</strong> <strong>HKEY_DYN_DATA</strong> <br>
<p>被<strong>RegOpenKey</strong>函数打开地键是能被<em>hKey</em>识别的子键。 </p>
<br>
<dt><em>lpSubKey</em> <br>
<dd>指向包含了要打开键的名字的以空字符结束的字符串。这个键必须是能被<em>hKey</em>参数识别的子键。如果这个参数为NULL或指向一个空字符串，函数返回与被传递相同的句柄。 <br>
<dt><em>phkResult</em> <br>
<dd>指向一个接收被打开键句柄的变量。当你不再需要返回句柄时，调用<a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_5fax.htm"><strong><u><font color=#0000ff>RegCloseKey</font></u></strong></a>函数关闭它。 </dd></dl><br>
<h4>返回值</h4>
<br>
<p>如果调用成功，返回ERROR_SUCCESS。</p>
<br>
<p>如果调用失败，返回一个非零错误码（定义在WINERROR.H）。你可以使用带有FORMAT_MESSAGE_FROM_SYSTEM标记的<a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/strings_0sdh.htm"><strong><u><font color=#0000ff>FormatMessage</font></u></strong></a>函数获得普通错误描述信息。</p>
<br>
<h4>注意</h4>
<br>
<p><strong>RegOpenKey</strong>函数使用默认的安全存取掩码打开一个键。如果打开的键需要一个不同的掩码，函数将发生错误，返回ERROR_ACCESS_DENIED。在这种情形下一个应用程序应该使用<strong>RegOpenKeyEx</strong>函数去指定存取掩码。 </p>
<br>
<p>为像<strong>RegCreateKey</strong>函数，如果键在数据库不存在时，<strong>RegOpenKey</strong>不能新建给定键。 </p>
<br>
<h4>快速信息</h4>
<br>
<p><strong>&nbsp;&nbsp;Windows NT: </strong>需要3.1或更高版本。<br><strong>&nbsp;&nbsp;Windows: </strong>需要Windows 95或更高版本。<br><strong>&nbsp;&nbsp;Windows CE: </strong>不支持。<br><strong>&nbsp;&nbsp;文件头: </strong>winreg.h。<br><strong>&nbsp;&nbsp;输入库: </strong>advapi32.lib。<br><strong>&nbsp;&nbsp;Unicode: </strong>在Windows NT中作为Unicode和ANSI执行。</p>
<br>
<h4>参见</h4>
<br>
<p><a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_9bzt.htm"><u><font color=#0000ff>Registry Overview</font></u></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_59mb.htm"><u><font color=#0000ff>Registry Functions</font></u></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_5fax.htm"><strong><u><font color=#0000ff>RegCloseKey</font></u></strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_7zy1.htm"><strong><u><font color=#0000ff>RegCreateKey</font></u></strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_1woo.htm"><strong><u><font color=#0000ff>RegCreateKeyEx</font></u></strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_1po9.htm"><strong><u><font color=#0000ff>RegDeleteKey</font></u></strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_7yns.htm"><strong><u><font color=#0000ff>RegOpenKeyEx</font></u></strong></a> </p>
<img src ="http://www.cppblog.com/Lee7/aggbug/43463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-02-29 13:28 <a href="http://www.cppblog.com/Lee7/archive/2008/02/29/43463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Win32 SDK注册表操作――RegCloseKey</title><link>http://www.cppblog.com/Lee7/archive/2008/02/29/43460.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Fri, 29 Feb 2008 05:21:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/02/29/43460.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/43460.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/02/29/43460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/43460.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/43460.html</trackback:ping><description><![CDATA[<p><strong>RegCloseKey</strong>函数释放给定键的句柄。 </p>
<pre><code><strong>LONG RegCloseKey(  HKEY</strong><em> hKey</em>   // 要关闭键的句柄<strong>);</strong> </code></pre>
<h4>参数</h4>
<dl>
<dt><em>hKey</em>
<dd>要关闭已打开键的句柄。 </dd></dl>
<h4>返回值</h4>
<p>如果调用成功，返回ERROR_SUCCESS。</p>
<p>如果调用失败，返回非零错误代码（定义在WINERROR.H）。你可以使用带有FORMAT_MESSAGE_FROM_SYSTE标记 <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/strings_0sdh.htm"><strong>FormatMessage</strong></a>函数获得普通错误描述信息。</p>
<h4>注意</h4>
<p>这个给定键的句柄不应该在它关闭后使用，因为它不再有效。键句柄不应该比需要的时间短。 </p>
<p><strong>RegCloseKey</strong>在返回之前不需要往注册表中写信息；它可以花费几秒缓存到硬盘的缓存区。如果一个应用程序必须明确的写注册信息到硬盘，它可以使用<strong>RegFlushKey</strong>函数。<strong>RegFlushKey</strong>，然而使用了更多的系统资源，应该在必需时才调用它。 </p>
<p><strong>Windows CE:</strong> <strong>RegCloseKey</strong>函数总是在返回前写信息到注册表，在Windows CE去除了缓存键的需要。 </p>
<h4>快速信息</h4>
<p><strong>&nbsp;&nbsp;Windows NT: </strong>需要3.1或更高版本。<br><strong>&nbsp;&nbsp;Windows: </strong>需要Windows 95或更高版本。<br><strong>&nbsp;&nbsp;Windows CE: </strong>需要1.0或更高版本。<br><strong>&nbsp;&nbsp;头文件: </strong>winreg.h。<br><strong>&nbsp;&nbsp;输入库: </strong>advapi32.lib。</p>
<img src ="http://www.cppblog.com/Lee7/aggbug/43460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-02-29 13:21 <a href="http://www.cppblog.com/Lee7/archive/2008/02/29/43460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Win32 SDK注册表操作――RegQueryValueEx</title><link>http://www.cppblog.com/Lee7/archive/2008/02/29/43461.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Fri, 29 Feb 2008 05:21:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/02/29/43461.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/43461.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/02/29/43461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/43461.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/43461.html</trackback:ping><description><![CDATA[<p><strong>RegQueryValueEx</strong>找回所打开注册表键所关联的一个给定值的类型和数据。 </p>
<pre><code><strong>LONG RegQueryValueEx(  HKEY</strong><em> hKey</em><strong>,           </strong>// 要查询键的句柄<strong>  LPTSTR</strong><em> lpValueName</em><strong>,  </strong>// 要查询值的名字的地址<strong>  LPDWORD</strong><em> lpReserved</em><strong>,  </strong>// 保留<strong>  LPDWORD</strong><em> lpType</em><strong>,      </strong>// 值类型缓存地址<strong>  LPBYTE</strong><em> lpData</em><strong>,       </strong>// 数据缓存地址<strong>  LPDWORD</strong><em> lpcbData</em>     // 数据缓存大小地址<strong>);</strong> </code></pre>
<h4>参数</h4>
<dl>
<dt><em>hKey</em>
<dd>一个当前已打开键的句柄或下列已确定的保留句柄值：
<p><strong>HKEY_CLASSES_ROOT</strong><br><strong>HKEY_CURRENT_CONFIG</strong><br><strong>HKEY_CURRENT_USER</strong><br><strong>HKEY_LOCAL_MACHINE</strong><br><strong>HKEY_USERS<br>Windows NT:</strong> <strong>HKEY_PERFORMANCE_DATA</strong> <br><strong>Windows 95和Windows 98:</strong> <strong>HKEY_DYN_DATA</strong> </p>
<dt><em>lpValueName</em>
<dd>指向要查询值的名字的字符串（以空字符结束）。
<p>如果<em>lpValueName</em>是NULL或一个空字符串（""），这个函数找回这个键的未命名或默认值的类型和数据。
<p><strong>Windows 95和Windows 98: </strong>每个键有一个默认值（最初的不包含数据）。在Windows 95，这人默认值类型总是REG_SZ。在Windows 98，默认键的类型最初是REG_SZ，但可以通过<strong>RegSetValueEx</strong>指定一个默认值为不同的类型。
<p><strong>Windows NT:</strong> 键不能自动拥有一个未命名或默认的值，未命名的值可以是任何类型。 </p>
<dt><em>lpReserved</em>
<dd>保留，必须是NULL.
<dt><em>lpType</em>
<dd>指向与给定值相关联数据的类型的变量。这个值将通过这个参数返回，将是下面之一：
<table cellSpacing=4 cols=2 width=716>
    <tbody>
        <tr vAlign=top>
            <th align=left width=211>值</th>
            <th align=left width=485>含意</th>
        </tr>
        <tr vAlign=top>
            <td width=211>REG_BINARY</td>
            <td width=485>二进制数据。</td>
        </tr>
        <tr vAlign=top>
            <td width=211>REG_DWORD</td>
            <td width=485>一个32位数字。</td>
        </tr>
        <tr vAlign=top>
            <td width=211>REG_DWORD_LITTLE_ENDIAN</td>
            <td width=485>一个little-endian格式的32位数字。这相当于REG_DWORD。
            <p>little-endian格式，是一个多字节值在内存中被从低字节到高字节存贮。如，值 0x12345678在little-endian格式中被存贮为(0x78 0x56 0x34 0x12)。</p>
            <p>Windows NT, Windows 95,和Windows 98是有意运行在little-endian计算机体系上的。例如像一些UNIX系统，一个用户必须连接到big-endian体系的计算机上。 </p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width=211>REG_DWORD_BIG_ENDIAN</td>
            <td width=485>一个big-endian格式的32位数字。
            <p>big-endian格式，一个多字节值在内存职被从高字节到低字节存贮。如，值0x12345678在big-endian格式中被存贮为(0x12 0x34 0x56 0x78)。</p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width=211>REG_EXPAND_SZ</td>
            <td width=485>一个包含未被引用的环境变量的以空字符结束的字符串(如，"%PATH%")。它是Unicode字符串还是ANSI字符串将依赖你所使用的是Unicode函数还是ANSI函数。扩展环境变量引用，使用
            <object id=alink_1 type=application/x-oleobject classid=clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11>
                                    </object><a href="javascript:alink_1.Click()"><strong>ExpandEnvironmentStrings</strong></a>函数。</td>
        </tr>
        <tr vAlign=top>
            <td width=211>REG_LINK</td>
            <td width=485>一个Unicode符号连接。</td>
        </tr>
        <tr vAlign=top>
            <td width=211>REG_MULTI_SZ</td>
            <td width=485>一个以空字符结束的字符串数组，被两个null字符结束。</td>
        </tr>
        <tr vAlign=top>
            <td width=211>REG_NONE</td>
            <td width=485>未定义值类型。</td>
        </tr>
        <tr vAlign=top>
            <td width=211>REG_RESOURCE_LIST</td>
            <td width=485>一个设备<a class=UBBWordLink href="http://www.zaoxue.com/" target=_blank>驱动</a>资源列表。</td>
        </tr>
        <tr vAlign=top>
            <td width=211>REG_SZ</td>
            <td width=485>一个以空字符结束的字符串。它是 Unicode字符串还是 ANSI字符串将依赖你所使用的是 Unicode函数还是 ANSI函数。</td>
        </tr>
    </tbody>
</table>
<br>
<p>如果不需要类型<em>lpType</em>参数可以为空（NULL）。 </p>
<dt><em>lpData</em>
<dd>指定接收值数据的缓存区。如果数据是不需要的这个参数可以为空。
<dt><em>lpcbData</em>
<dd>以字节为单位，指向<em>lpData</em>参数所指定地缓存区大小的变量。函数返回复制到<em>lpData</em>的数据大小的变量。
<p>如果数据是REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ类型，那么<em>lpcbData</em>还将包括以空字符结束的大小。
<p>如果<em>lpData</em>是NULL，<em>lpcbData</em>参数可以是NULL。
<p>如果被<em>lpData</em>参数指定的缓存不够大，这个函数返回ERROR_MORE_DATA值，并取回被<em>lpcbData</em>指定的变量缓存的大小（以字节为单位）。
<p>如果<em>lpData</em>是NULL，<em>lpcbData</em>不是NULL，这个函数返回ERROR_SUCCESS，并取回被<em>lpcbData</em>指定的变量缓存的大小（以字节为单位）。这个为值的数据缓存分配最好的途径。
<p><strong>Window NT:</strong> 如果<em>hKey</em>指定为<strong>HKEY_PERFORMANCE_DATA，</strong>并且<em>lpData</em>缓存太小，<strong>RegQueryValueEx</strong>返回ERROR_MORE_DATA，但是<em>lpcbData</em>不能返回必需的缓存大小。这是因为运用数据的大小可以在调用的下一步被改变。在这种情形下，你必须增加缓存的大小并重新调用<strong>RegQueryValueEx</strong>通过<em>lpcbData</em> 参数更新缓存大小。重复直到函数成功。 你需要维护一个单独的变量去留意缓存的大小。因为被<em>lpcbData</em>返回的值是可不预知的。 </p>
</dd></dl>
<h4>返回值</h4>
<p>如果这个函数成功，返回ERROR_SUCCESS。</p>
<p>如果调有失败，返回一个非零错误码（定义在WINERROR.H）。你可以使用带有FORMAT_MESSAGE_FROM_SYSTEM标记的<a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/strings_0sdh.htm"><strong>FormatMessage</strong></a>函数获得错误的普通描述信息。</p>
<h4>注意</h4>
<p>被<em>hKey</em>确定的键必须是被带有KEY_QUERY_VALUE标记打开的。打开键，使用<a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_1woo.htm"><strong>RegCreateKeyEx</strong></a>函数或<a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_7yns.htm"><strong>RegOpenKeyEx</strong></a>函数。 </p>
<p>如果值数据是REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ类型，这个函数的ANSI版本将被使用（明确的调用<strong>RegQueryValueExA</strong>或在包含WINDOWS.H文件前不定义UNICODE），这个函数在复制它到<em>lpData</em>指定的缓存中以前，转换存贮地Unicode字符串为ANSI字符串。 </p>
<p><strong>Window NT:</strong> 当调用<strong>RegQueryValueEx</strong>函数并<em>hKey</em>被设置成HKEY_PERFORMANCE_DATA句柄，给定对象的值字符串时，返回数据结构往往是未定义的对象。不要感到惊讶；这是正常的。当调<strong>RegQueryValueEx</strong>函数时，you should always expect to walk the returned data structure to look for the requested object. </p>
<h4>快速信息</h4>
<p><strong>&nbsp;&nbsp;Windows NT: </strong>需要3.1或更高版本。<br><strong>&nbsp;&nbsp;Windows: </strong>需要Windows 95或更高版本。<br><strong>&nbsp;&nbsp;Windows CE: </strong>需要1.0或更高版本。<br><strong>&nbsp;&nbsp;头文件: </strong>winreg.h。<br><strong>&nbsp;&nbsp;输入库: </strong>advapi32.lib。<br><strong>&nbsp;&nbsp;Unicode: </strong>在Windows NT中作为Unicode或ANSI执行。</p>
<h4>参见</h4>
<p><a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_9bzt.htm">Registry Overview</a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_59mb.htm">Registry Functions</a>,
<object id=alink_2 type=application/x-oleobject classid=clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11>
</object><a href="javascript:alink_2.Click()"><strong>ExpandEnvironmentStrings</strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_1woo.htm"><strong>RegCreateKeyEx</strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_1juh.htm"><strong>RegEnumKey</strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_4854.htm"><strong>RegEnumKeyEx</strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_65yd.htm"><strong>RegEnumValue</strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_7yns.htm"><strong>RegOpenKeyEx</strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_5xkp.htm"><strong>RegQueryInfoKey</strong></a>, <a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_05np.htm"><strong>RegQueryValue</strong></a> </p>
<br></td>
</tr>
<img src ="http://www.cppblog.com/Lee7/aggbug/43461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-02-29 13:21 <a href="http://www.cppblog.com/Lee7/archive/2008/02/29/43461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Win32 SDK注册表操作――RegOpenKeyEx</title><link>http://www.cppblog.com/Lee7/archive/2008/02/29/43459.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Fri, 29 Feb 2008 05:19:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/02/29/43459.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/43459.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/02/29/43459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/43459.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/43459.html</trackback:ping><description><![CDATA[<p><strong>RegOpenKeyEx</strong> 函数打开一个指定键。 </p>
<pre><code><strong>LONG RegOpenKeyEx(  HKEY</strong><em> hKey</em><strong>,         </strong>// 要打开主键的句柄<strong>  LPCTSTR</strong><em> lpSubKey</em><strong>,  </strong>// 要打开子键的地址名字  <strong>DWORD</strong> <em>ulOptions</em><strong>,</strong>   // 保留<strong>  REGSAM</strong><em> samDesired</em><strong>, </strong>// 安全存取掩码<strong>  PHKEY</strong><em> phkResult</em>    // 要打开键句柄的地址<strong>);</strong> </code></pre>
<h4>参数</h4>
<dl>
<dt><em>hKey</em>
<dd>句柄是一个当前打开的键或下列已确定的保留句柄值：
<p><strong>HKEY_CLASSES_ROOT</strong><br><strong>HKEY_CURRENT_CONFIG</strong><br><strong>HKEY_CURRENT_USER</strong><br><strong>HKEY_LOCAL_MACHINE</strong><br><strong>HKEY_USERS<br>Windows NT:</strong> <strong>HKEY_PERFORMANCE_DATA</strong> <br><strong>Windows 95和Windows 98:</strong> <strong>HKEY_DYN_DATA</strong> </p>
<dt><em>lpSubKey</em>
<dd>指向一个要打开子键的名字（以空字符结束的字符串）。如果这个参数为空或指向一个空字符串，函数将打开一个能被<em>hKey</em> 参数识别的新键的句柄。在这个语法中，函数将不会关闭先前打开的句柄。&nbsp;
<dt><em>ulOptions</em>
<dd>保留；必须是零。
<dt><em>samDesired</em>
<dd>为新键指定一个描述安全的存取掩码。这个参数可以由下列的值组合成而：
<table cellSpacing=4 cols=2>
    <tbody>
        <tr vAlign=top>
            <th align=left width="48%">值</th>
            <th align=left width="52%">含意</th>
        </tr>
        <tr vAlign=top>
            <td width="48%">KEY_ALL_ACCESS</td>
            <td width="52%">相当于KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, KEY_CREATE_SUB_KEY, KEY_CREATE_LINK, KEY_SET_VALUE的组合。</td>
        </tr>
        <tr vAlign=top>
            <td width="48%">KEY_CREATE_LINK</td>
            <td width="52%">允许新建符号连接。</td>
        </tr>
        <tr vAlign=top>
            <td width="48%">KEY_CREATE_SUB_KEY</td>
            <td width="52%">允许新建子键。</td>
        </tr>
        <tr vAlign=top>
            <td width="48%">KEY_ENUMERATE_SUB_KEYS</td>
            <td width="52%">允许列举子键。</td>
        </tr>
        <tr vAlign=top>
            <td width="48%">KEY_EXECUTE</td>
            <td width="52%">允许读操作。</td>
        </tr>
        <tr vAlign=top>
            <td width="48%">KEY_NOTIFY</td>
            <td width="52%">允许修改。</td>
        </tr>
        <tr vAlign=top>
            <td width="48%">KEY_QUERY_VALUE</td>
            <td width="52%">允许查询子键数据。</td>
        </tr>
        <tr vAlign=top>
            <td width="48%">KEY_READ</td>
            <td width="52%">相当于KEY_QUERY_VALUE，KEY_ENUMERATE_SUB_KEYS，KEY_NOTIFY的组合</td>
        </tr>
        <tr vAlign=top>
            <td width="48%">KEY_SET_VALUE</td>
            <td width="52%">允许设置子键数据</td>
        </tr>
        <tr vAlign=top>
            <td width="48%">KEY_WRITE</td>
            <td width="52%">相当于KEY_SET_VALUE和KEY_CREATE_SUB_KEY的组合。</td>
        </tr>
    </tbody>
</table>
<br>
<dt><em>phkResult</em>
<dd>指定一个变量来接收已打开键的句柄。当你对返回句柄不太长时，调用<a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_5fax.htm"><strong><u><font color=#0000ff>RegCloseKey</font></u></strong></a>函数关闭它。 </dd></dl>
<h4>返回值</h4>
<p>如果函数取得成功，返回ERROR_SUCCESS。</p>
<p>如果函数调用失败，返回一个非零的错误代码（定义在WINERROR.H文件中）。你可以使用带有FORMAT_MESSAGE_FROM_SYSTEM标记的<a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/strings_0sdh.htm"><strong><u><font color=#0000ff>FormatMessage</font></u></strong></a>函数来获得一个错误的普通描述。</p>
<h4>注意</h4>
<p>与<strong>RegCreateKeyEx</strong>函数不同，如果在注册表中指定的键不存在<strong>RegOpenKeyEx</strong>函数不会新建指定键。 </p>
<h4>快速信息</h4>
<p><strong>&nbsp;&nbsp;Windows NT: 需要</strong>3.1或更高版本。<br><strong>&nbsp;&nbsp;Windows: 需要</strong>Windows 95或更高版本。<br><strong>&nbsp;&nbsp;Windows CE: 需要</strong>1.0或更高版本。<br><strong>&nbsp;&nbsp;头文件: </strong>winreg.h。<br><strong>&nbsp;&nbsp;输入库：</strong>advapi32.lib.<br><strong>&nbsp;&nbsp;Unicode: </strong>Windows NT版本中作为Unicode和ANSI执行。</p>
<img src ="http://www.cppblog.com/Lee7/aggbug/43459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-02-29 13:19 <a href="http://www.cppblog.com/Lee7/archive/2008/02/29/43459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Win32 SDK注册表操作――RegCreateKey </title><link>http://www.cppblog.com/Lee7/archive/2008/02/29/43458.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Fri, 29 Feb 2008 05:14:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/02/29/43458.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/43458.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/02/29/43458.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/43458.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/43458.html</trackback:ping><description><![CDATA[Win32 SDK注册表操作――RegCreateKey</td>
<br>
<p><strong>RegCreateKey</strong>函数新建给定键。如果这个键在注册表中已经存在，这个函数打开它。这个函数与Windows 3.1兼容。基于Win32的应用程序应该使用<a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_1woo.htm"><strong><u><font color=#0000ff>RegCreateKeyEx</font></u></strong></a>函数。 </p>
<pre><code><strong>LONG RegCreateKey(  HKEY</strong><em> hKey</em><strong>, </strong>// 要打开键的句柄<strong>  LPCTSTR</strong><em> lpSubKey</em><strong>, </strong>// 要打开子键的名字的地址<strong>  PHKEY</strong><em> phkResult</em>   // 已打开句柄的缓存区的地址<strong>);</strong> </code></pre>
<h4>参数</h4>
<dl>
<dt><em>hKey</em>
<dd>当前打开键的句柄或下列已确定保留句柄值：
<p><strong>HKEY_CLASSES_ROOT</strong><br><strong>HKEY_CURRENT_CONFIG</strong><br><strong>HKEY_CURRENT_USER</strong><br><strong>HKEY_LOCAL_MACHINE</strong><br><strong>HKEY_USERS</strong><br><strong>Windows NT:</strong> <strong>HKEY_PERFORMANCE_DATA</strong> <br><strong>Windows 95和Windows 98:</strong> <strong>HKEY_DYN_DATA</strong>
<p>被<strong>RegCreateKey</strong>打开或新建的是被<em>hKey</em>识别的键的子键。 </p>
<dt><em>lpSubKey</em>
<dd>指向包含了要打开或新建键的名字的以空字符结束的字符串。这个键必须是能被hKey参数识别的子键。
<p>如果<em>hKey</em>是已确定保留句柄值之一，<em>lpSubKey</em>可以为NULL。在这种情形下，函数<em>phkResult</em>返回与被传递相同的句柄。 </p>
<dt><em>phkResult</em>
<dd>指向接收打开或新建键的变量。当你不再需要返回句柄时，调用<a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/regapi_5fax.htm"><strong><u><font color=#0000ff>RegCloseKey</font></u></strong></a>函数关闭它 </dd></dl>
<h4>返回值</h4>
<p>如果调用成功，返回ERROR_SUCCESS。</p>
<p>如果调用失败，返回一个非零错误码（定义在WINERROR.H）。你可以使用带有FORMAT_MESSAGE_FROM_SYSTEM标记的<a href="file:///I:/华奇英书海/编程语言/VISUAL%20MSDN/注册表操作/strings_0sdh.htm"><strong><u><font color=#0000ff>FormatMessage</font></u></strong></a>函数获得普通错误描述信息。</p>
<h4>注意</h4>
<p>一个应用程序可以使用<strong>RegCreateKey</strong>函数一次新建单独键。如，一个应用程序可以在共一时间新建一个四级子键（包括给定键前面的三级）象以下的<em>lpSubKey</em>参数字符串： </p>
<p><em>subkey1</em><strong></strong><em>subkey2</em><strong></strong><em>subkey3</em><strong></strong><em>subkey4</em></p>
<p>这个能被<em>hKey</em>参数识别的键必须被带有KEY_CREATE_SUB_KEY存取权限打开（KEY_WRITE存取权限包括KEY_CREATE_SUB_KEY存取权限）。 </p>
<p>如果<em>lpSubKey</em>参数是一个空字符串的地址，函数打开并传递能被<em>hKey</em>参数识别的键。</p>
<h4>快速信息</h4>
<p><strong>&nbsp;&nbsp;Windows NT: </strong>需要3.1或更高版本。<br><strong>&nbsp;&nbsp;Windows: </strong>需要Windows 95或更高版本。<br><strong>&nbsp;&nbsp;Windows CE: </strong>不支持。<br><strong>&nbsp;&nbsp;文件头: </strong>winreg.h<br><strong>&nbsp;&nbsp;输入库: </strong>advapi32.lib.<br><strong>&nbsp;&nbsp;Unicode: </strong>在Windows NT中作为Unicode和ANSI执行。<br><br></p>
<img src ="http://www.cppblog.com/Lee7/aggbug/43458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-02-29 13:14 <a href="http://www.cppblog.com/Lee7/archive/2008/02/29/43458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC框架及消息映射 [转]</title><link>http://www.cppblog.com/Lee7/archive/2008/02/20/43009.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Wed, 20 Feb 2008 14:04:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/02/20/43009.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/43009.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/02/20/43009.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/43009.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/43009.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: MFC应用程序框架的启动，首先定义一个全局的CWinAPP,其为应用程序的一个连接纽带，把各部分都连接起来。接下来调用_tWinMain()，其实质是一个Win32的API宏调用；在那里面，它调用了AfxWinMain()，在这里进行应用程序框架的初始化工作&nbsp;&nbsp;<a href='http://www.cppblog.com/Lee7/archive/2008/02/20/43009.html'>阅读全文</a><img src ="http://www.cppblog.com/Lee7/aggbug/43009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-02-20 22:04 <a href="http://www.cppblog.com/Lee7/archive/2008/02/20/43009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AfxBeginThread</title><link>http://www.cppblog.com/Lee7/archive/2008/01/30/42227.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Wed, 30 Jan 2008 07:37:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/01/30/42227.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/42227.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/01/30/42227.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/42227.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/42227.html</trackback:ping><description><![CDATA[<p>于亚杰(281806868) 14:36:55<br>AfxBeginThread(Load_Map,(LPVOID *)this,THREAD_PRIORITY_NORMAL,0,0,NULL);<br>于亚杰(281806868) 14:37:12<br>UINT Load_Map(LPVOID hWnd)<br>{<br>&nbsp;return 0;<br>}<br>酱菜Pickle&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#117;&#110;&#114;&#97;&#105;&#105;&#110;&#103;&#64;&#121;&#97;&#104;&#111;&#111;&#46;&#99;&#111;&#109;">sunraiing@yahoo.com</a>&gt; 14:39:24<br>CWinThread* AfxBeginThread(<br>&nbsp;&nbsp; AFX_THREADPROC pfnThreadProc,<br>&nbsp;&nbsp; LPVOID pParam,<br>&nbsp;&nbsp; int nPriority = THREAD_PRIORITY_NORMAL,<br>&nbsp;&nbsp; UINT nStackSize = 0,<br>&nbsp;&nbsp; DWORD dwCreateFlags = 0,<br>&nbsp;&nbsp; LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL <br>);<br>CWinThread* AfxBeginThread(<br>&nbsp;&nbsp; CRuntimeClass* pThreadClass,<br>&nbsp;&nbsp; int nPriority = THREAD_PRIORITY_NORMAL,<br>&nbsp;&nbsp; UINT nStackSize = 0,<br>&nbsp;&nbsp; DWORD dwCreateFlags = 0,<br>&nbsp;&nbsp; LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL <br>);</p>
<p>酱菜Pickle&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#117;&#110;&#114;&#97;&#105;&#105;&#110;&#103;&#64;&#121;&#97;&#104;&#111;&#111;&#46;&#99;&#111;&#109;">sunraiing@yahoo.com</a>&gt; 14:39:38<br>pThreadClass<br>The RUNTIME_CLASS of an object derived from CWinThread.</p>
<p>pParam<br>Parameter to be passed to the controlling function as shown in the parameter to the function declaration in pfnThreadProc.</p>
<p>nPriority<br>The desired priority of the thread. If 0, the same priority as the creating thread will be used. For a full list and description of the available priorities, see SetThreadPriority in the Platform SDK.</p>
<p>nStackSize<br>Specifies the size in bytes of the stack for the new thread. If 0, the stack size defaults to the same size stack as the creating thread.</p>
<p>dwCreateFlags<br>Specifies an additional flag that controls the creation of the thread. This flag can contain one of two values:</p>
<p>CREATE_SUSPENDED&nbsp;&nbsp; Start the thread with a suspend count of one. Use CREATE_SUSPENDED if you want to initialize any member data of the CWinThread object, such as m_bAutoDelete or any members of your derived class, before the thread starts running. Once your initialization is complete, use CWinThread::ResumeThread to start the thread running. The thread will not execute until CWinThread::ResumeThread is called.</p>
<p>0&nbsp;&nbsp; Start the thread immediately after creation.</p>
<p>lpSecurityAttrs<br>Points to a SECURITY_ATTRIBUTES structure that specifies the security attributes for the thread. If NULL, the same security attributes as the creating thread will be used. For more information on this structure, see the Platform SDK.</p>
<p><br>酱菜Pickle&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#117;&#110;&#114;&#97;&#105;&#105;&#110;&#103;&#64;&#121;&#97;&#104;&#111;&#111;&#46;&#99;&#111;&#109;">sunraiing@yahoo.com</a>&gt; 14:41:06<br>CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPVOID pParam,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int nPriority = THREAD_PRIORITY_NORMAL,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UNT nStackSize = 0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD dwCreateFlags = 0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );//用于创建工作者线程</p>
<p>返回值: 一个指向新线程的线程对象<br>pfnThreadProc : 线程的入口函数,声明一定要如下: UINT MyThreadFunction( LPVOID pParam );<br>pParam : 传递入线程的参数,注意它的类型为:LPVOID,所以我们可以传递一个结构体入线程.<br>nPriority : 线程的优先级,一般设置为 0 .让它和主线程具有共同的优先级.<br>nStackSize : 指定新创建的线程的栈的大小.如果为 0,新创建的线程具有和主线程一样的大小的栈<br>dwCreateFlags : 指定创建线程以后,线程有怎么样的标志.可以指定两个值:<br>CREATE_SUSPENDED : 线程创建以后,会处于挂起状态,真到调用: ResumeThread<br>0 : 创建线程后就开始运行.</p>
<img src ="http://www.cppblog.com/Lee7/aggbug/42227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-01-30 15:37 <a href="http://www.cppblog.com/Lee7/archive/2008/01/30/42227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何正确的使用PeekMessage() </title><link>http://www.cppblog.com/Lee7/archive/2008/01/19/41473.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Sat, 19 Jan 2008 08:12:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/01/19/41473.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/41473.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/01/19/41473.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/41473.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/41473.html</trackback:ping><description><![CDATA[<h1 class=title><font face="Comic Sans MS" color=#ff0000 size=3>HOWTO: How to Use PeekMessage() Correctly in Windows</font></h1>
<h2 class=subTitle id=tocHeadRef><font face="Comic Sans MS" color=#990000 size=3>SUMMARY</font></h2>
<font face="Comic Sans MS" size=3>In the Windows environment, many applications use a <strong>PeekMessage()</strong> loop to perform background processing. Such applications must allow the Windows system to enter an idle state when their background processing is complete. Otherwise, system performance, "idle-time" system processes such as paging optimizations, and power management on battery-powered systems will be adversely affected. <br><br>While an application is in a <strong>PeekMessage()</strong> loop, the Windows system cannot go idle. Therefore, an application should not remain in a <strong>PeekMessage()</strong> loop after its background processing has completed. <br><br><strong>NOTE</strong>: The PeekMessage method described in this article is only needed if your application is a 32-bit application for Windows and is, for some reason, unable to create threads and perform background processing. </font>
<div></div>
<h2 class=subTitle id=tocHeadRef><font face="Comic Sans MS" color=#990000 size=3>MORE INFORMATION</font></h2>
<script type=text/javascript></script>
<div class=sbody><font face="Comic Sans MS" size=3>Many Windows-based applications use <strong>PeekMessage()</strong> to retrieve messages while they are in the middle of a long process, such as printing, repaginating, or recalculating, that must be done "in the background." <strong>PeekMessage()</strong> is used in these situations because, unlike <strong>GetMessage()</strong>, it does not wait for a message to be placed in the queue before it returns. <br><br>An application should not call <strong>PeekMessage()</strong> unless it has background processing to do between the calls to <strong>PeekMessage()</strong>. When an application is waiting for an input event, it should call <strong>GetMessage()</strong> or <strong>WaitMessage()</strong>. <br><br>Remaining in a <strong>PeekMessage()</strong> loop when there is no background work causes system performance problems. A program in a <strong>PeekMessage()</strong> loop continues to be rescheduled by the Windows scheduler, consuming CPU time and taking time away from other processes. <br><br>In enhanced mode, the Virtual Machine (VM) in which Windows is running will not appear to be idle as long as an application is calling the <strong>PeekMessage</strong> function. Therefore, the Windows VM will continue to receive a considerable fraction of CPU time. <br><br>Many power management methods employed on laptop and notebook computers are based on the system going idle when there is no processing to do. An application that remains in a <strong>PeekMessage()</strong> loop will make the system appear busy to power management software, resulting in excessive power consumption and shortening the time that the user can run the system. <br><br>In the future, the Windows system will make more and more use of idle time to do background processing, which is designed to optimize system performance. Applications that do not allow the system to go idle will adversely affect the performance of these techniques. <br><br>All these problems can be avoided by calling the <strong>PeekMessage()</strong> function only when there is background work to do, and calling <strong>GetMessage()</strong> or <strong>WaitMessage()</strong> when there is no background work to do. <br><br>For example, consider the following <strong>PeekMessage()</strong> loop. If there is no background processing to do, this loop will continue to run without waiting for messages, preventing the system from going idle and causing the negative effects described above. </font></div>
<div class=sbody></div>
<div class=sbody><font face="Comic Sans MS" color=#339966 size=3>&nbsp;&nbsp; // This PeekMessage loop will NOT let the system go idle.</font></div>
<div class=sbody><font face="Comic Sans MS" size=3>&nbsp;&nbsp; <font color=#0000ff>for</font>( ;; )<br>&nbsp;&nbsp; {</font></div>
<div class=sbody><font face="Comic Sans MS" size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>while</font> (<font color=#800000>PeekMessage</font>(&amp;msg, <font color=#000080>NULL</font>, 0, 0, <font color=#000080>PM_REMOVE</font>))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>if</font> (msg.message == <font color=#000080>WM_QUIT</font>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return <font color=#000080>TRUE</font>;</font></div>
<div class=sbody><font face="Comic Sans MS" size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#800000>TranslateMessage</font>(&amp;msg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#800000>DispatchMessage</font>(&amp;msg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></div>
<div class=sbody><font face="Comic Sans MS" size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BackgroundProcessing();<br>&nbsp;&nbsp;&nbsp; }</font></div>
<div class=sbody></div>
<div class=sbody><font face="Comic Sans MS" size=3>This loop can be rewritten in two ways, as shown below. Both of the following <strong>PeekMessage()</strong> loops have two desirable properties: <br><br></font>
<div class=sbody>
<table class="list ul">
    <tbody>
        <tr>
            <td class=bullet><font face="Comic Sans MS" size=3>&#8226;</font></td>
            <td class=text><font face="Comic Sans MS" size=3>They process all input messages before performing background processing, providing good response to user input. </font></td>
        </tr>
        <tr>
            <td class=bullet><font face="Comic Sans MS" size=3>&#8226;</font></td>
            <td class=text><font face="Comic Sans MS" size=3>The application "idles" (waits for an input message) when no background processing needs to be done. </font></td>
        </tr>
    </tbody>
</table>
</div>
<div class=topOfPage><font face="Comic Sans MS" size=3>&nbsp;</font></div>
<h3 class=sbody id=tocHeadRef><font face="Comic Sans MS" color=#990000 size=3>Improved PeekMessage Loop 1</font></h3>
<script type=text/javascript></script>
<code>
<div>
<pre class=code><font face="Comic Sans MS"><font size=3>&nbsp;&nbsp; <font color=#339966>// Improved PeekMessage() loop</font></font></font></pre>
<pre class=code><font face="Comic Sans MS"><font size=3>&nbsp;&nbsp; <font color=#0000ff>for</font>(;;)<br>&nbsp;&nbsp; {</font></font></pre>
<pre class=code><font face="Comic Sans MS"><font size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>while</font> (<font color=#800000>PeekMessage</font>(&amp;msg, <font color=#000080>NULL</font>, 0, 0, <font color=#000080>PM_REMOVE</font>))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>if</font> (msg.message == <font color=#000080>WM_QUIT</font>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>return</font> <font color=#000080>TRUE</font>;</font></font></pre>
<pre class=code><font face="Comic Sans MS"><font size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#800000>TranslateMessage</font>(&amp;msg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#800000>DispatchMessage</font>(&amp;msg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></pre>
<pre class=code><font face="Comic Sans MS"><font size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>if</font> (IfBackgroundProcessingRequired())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BackgroundProcessing();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>else</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#800000>WaitMessage</font>(); <font color=#339966>// Will not return until a message is posted.</font></font></font></pre>
<pre class=code><font face="Comic Sans MS"><font size=3>&nbsp;&nbsp; }	</font></font></pre>
</div>
<h3 id=tocHeadRef><font face="Comic Sans MS" color=#990000 size=3>Improved PeekMessage Loop 2</font></h3>
<script type=text/javascript></script>
<code>
<div>
<pre class=code><font face="Comic Sans MS"><font size=3>&nbsp;&nbsp; <font color=#339966>// Another improved PeekMessage() loop</font></font></font></pre>
<pre class=code><font face="Comic Sans MS"><font size=3>&nbsp;&nbsp; <font color=#0000ff>for</font> (;;)<br>&nbsp;&nbsp; {</font></font></pre>
<pre class=code><font face="Comic Sans MS"><font size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>for</font> (;;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>if</font> (IfBackgroundProcessingRequired())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>if</font> (!<font color=#800000>PeekMessage</font>(&amp;msg, <font color=#000080>NULL</font>, 0, 0, <font color=#000080>PM_REMOVE</font>))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>break</font>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>else</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#800000>GetMessage</font>(&amp;msg, <font color=#000080>NULL</font>, 0, 0, 0);</font></font></pre>
<pre class=code><font face="Comic Sans MS"><font size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>if</font> (msg.message == <font color=#000080>WM_QUIT</font>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>return</font> <font color=#000080>TRUE</font>;</font></font></pre>
<pre class=code><font face="Comic Sans MS"><font size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#800000>TranslateMessage</font>(&amp;msg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#800000>DispatchMessage</font>(&amp;msg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BackgroundProcessing();</font></font></pre>
<pre class=code><font face="Comic Sans MS"><font size=3>&nbsp;&nbsp; }		</font></font></pre>
</div>
<div></div>
</code><font face="Comic Sans MS" size=3>Note that calls to functions such as <strong>IsDialogMessage()</strong> and <strong>TranslateAccelerator()</strong> can be added to these loops as appropriate. <br><br>There is one case in which the loops above need additional support: if the application waits for input from a device (for example, a fax board) that does not send standard Windows messages. For the reasons outlined above, a Windows-based application should not use a <strong>PeekMessage()</strong> loop to continuously poll the device. Rather, implement an Interrupt Service Routine (ISR) in a Dynamic-Link Library (DLL). When the ISR is called, the DLL can use the <strong>PostMessage</strong> function to inform the application that the device requires service. DLL functions can safely call the <strong>PostMessage()</strong> function because the <strong>PostMessage()</strong> function is reentrant. </font></code></div>
<img src ="http://www.cppblog.com/Lee7/aggbug/41473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-01-19 16:12 <a href="http://www.cppblog.com/Lee7/archive/2008/01/19/41473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入GetMessage和PeekMessage</title><link>http://www.cppblog.com/Lee7/archive/2008/01/19/41472.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Sat, 19 Jan 2008 08:11:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/01/19/41472.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/41472.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/01/19/41472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/41472.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/41472.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 该文重点讲述了Windows处理事件、消息的具体过程和步骤。尤其是在系系处理鼠标键盘事件的过程上做了详解。通过这篇文章，你将对Windows的消息处理机制有一个较全面的了解。&nbsp;&nbsp;<a href='http://www.cppblog.com/Lee7/archive/2008/01/19/41472.html'>阅读全文</a><img src ="http://www.cppblog.com/Lee7/aggbug/41472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-01-19 16:11 <a href="http://www.cppblog.com/Lee7/archive/2008/01/19/41472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>清空串口缓冲区PurgeComm()</title><link>http://www.cppblog.com/Lee7/archive/2008/01/04/40387.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Fri, 04 Jan 2008 03:11:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/01/04/40387.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/40387.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/01/04/40387.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/40387.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/40387.html</trackback:ping><description><![CDATA[PURGE_TXABORT &nbsp; 终止所有正在进行的字符输出操作,完成一个正处于等待状态的重叠i/o操作,他将产生一个事件,指明完成了写操作 &nbsp; <br>&nbsp; PURGE_RXABORT &nbsp; 终止所有正在进行的字符输入操作,完成一个正在进行中的重叠i/o操作,并带有已设置得适当事件 &nbsp; <br>&nbsp; PURGE_TXCLEAR &nbsp; 这个命令指导设备驱动程序清除输出缓冲区，经常与PURGE_TXABORT &nbsp; 命令标志一起使用 &nbsp; <br>&nbsp; PURGE_RXCLEAR &nbsp; 这个命令用于清除设备驱动程序得输入缓冲区，经常与PURGE_RXABORT &nbsp; 命令标志一起使用&nbsp;&nbsp;
<img src ="http://www.cppblog.com/Lee7/aggbug/40387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-01-04 11:11 <a href="http://www.cppblog.com/Lee7/archive/2008/01/04/40387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Windows Sockets 错误码及出错原因[转]   </title><link>http://www.cppblog.com/Lee7/archive/2008/01/03/40302.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Thu, 03 Jan 2008 03:33:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2008/01/03/40302.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/40302.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2008/01/03/40302.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/40302.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/40302.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Windows Sockets在头文件winsock.h中定义了所有的错误码，它们包括以“WSA”打头的Windows Sockets实现返回的错误码和Berkeley Sockets定义的错误码全集。定义Berkeley Sockets错误码是为了确保原有软件的可移植性。 &nbsp;&nbsp;<a href='http://www.cppblog.com/Lee7/archive/2008/01/03/40302.html'>阅读全文</a><img src ="http://www.cppblog.com/Lee7/aggbug/40302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2008-01-03 11:33 <a href="http://www.cppblog.com/Lee7/archive/2008/01/03/40302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]解读VC++编程中的文件操作API和CFile类</title><link>http://www.cppblog.com/Lee7/archive/2007/08/27/30917.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Mon, 27 Aug 2007 02:48:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2007/08/27/30917.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/30917.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2007/08/27/30917.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/30917.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/30917.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在VC编程中，操作文件的方法主要有两种：利用API函数和MFC的CFile类。微软在其中封装了文件的一般操作，下面我就介绍一下如何利用这两种方法实现文件操作。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/Lee7/archive/2007/08/27/30917.html'>阅读全文</a><img src ="http://www.cppblog.com/Lee7/aggbug/30917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2007-08-27 10:48 <a href="http://www.cppblog.com/Lee7/archive/2007/08/27/30917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]CTime 使用总结 </title><link>http://www.cppblog.com/Lee7/archive/2007/08/15/30109.html</link><dc:creator>isabc</dc:creator><author>isabc</author><pubDate>Wed, 15 Aug 2007 14:05:00 GMT</pubDate><guid>http://www.cppblog.com/Lee7/archive/2007/08/15/30109.html</guid><wfw:comment>http://www.cppblog.com/Lee7/comments/30109.html</wfw:comment><comments>http://www.cppblog.com/Lee7/archive/2007/08/15/30109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Lee7/comments/commentRss/30109.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Lee7/services/trackbacks/30109.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: CTime does not have a base class.<br><br>A CTime object represents an absolute time and date. The CTime class incorporates the ANSI time_t data type and its associated run-time functions, including the ability to convert to and from a Gregorian date and 24-hour time. <br><br>CTime values are based on coordinated universal time (UTC), which is equivalent to Greenwich mean time (GMT). The local time zone is controlled by the TZ environment variable. <br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/Lee7/archive/2007/08/15/30109.html'>阅读全文</a><img src ="http://www.cppblog.com/Lee7/aggbug/30109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Lee7/" target="_blank">isabc</a> 2007-08-15 22:05 <a href="http://www.cppblog.com/Lee7/archive/2007/08/15/30109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>