﻿<?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++博客-空杯子</title><link>http://www.cppblog.com/lingling520/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 06 Apr 2026 03:30:37 GMT</lastBuildDate><pubDate>Mon, 06 Apr 2026 03:30:37 GMT</pubDate><ttl>60</ttl><item><title> vc中遇到错误提示：nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex</title><link>http://www.cppblog.com/lingling520/archive/2011/01/12/138398.html</link><dc:creator>胡志刚</dc:creator><author>胡志刚</author><pubDate>Wed, 12 Jan 2011 05:48:00 GMT</pubDate><guid>http://www.cppblog.com/lingling520/archive/2011/01/12/138398.html</guid><wfw:comment>http://www.cppblog.com/lingling520/comments/138398.html</wfw:comment><comments>http://www.cppblog.com/lingling520/archive/2011/01/12/138398.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lingling520/comments/commentRss/138398.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingling520/services/trackbacks/138398.html</trackback:ping><description><![CDATA[<span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=Apple-style-span><span style="TEXT-ALIGN: left; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; FONT-SIZE: 14px" class=Apple-style-span>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">用VC++6.0编写控制台程序，出现错误提示如下，</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">错误提示：</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex<br>nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex<br>libcd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main<br>Debug/Hello.exe : fatal error LNK1120: 3 unresolved externals</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">解决方法：</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">1、&#8220;Project&#8221;-&gt;&#8220;settings&#8221;-&gt;&#8220;c/c++&#8221;</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">&#8220;Catagory&#8221; 选择&#8220;Code Generation&#8221;</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">&nbsp;&nbsp; &#8220;use run-time library&#8221;选择&#8220;debug multithreaded&#8221;</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">此时确定一般解决问题，也有可能出现如下问题提示：</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main<br>Debug/Hello.exe : fatal error LNK1120: 1 unresolved externals</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">此时，进行第二步操作：</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">2、</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">[Project] --&gt; [Settings] --&gt; 选择"Link"属性页,<span class=Apple-converted-space>&nbsp;</span><br>在Project Options中将/subsystem:console改成/subsystem:windows</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">温馨提示：在Project Options窗口，右边滑动条向下滑动就会找到该项！</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">总结：进行以上两步操作后，问题解决！</p>
</span></span>
<img src ="http://www.cppblog.com/lingling520/aggbug/138398.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingling520/" target="_blank">胡志刚</a> 2011-01-12 13:48 <a href="http://www.cppblog.com/lingling520/archive/2011/01/12/138398.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC设置视图背景颜色方法 </title><link>http://www.cppblog.com/lingling520/archive/2010/12/26/137530.html</link><dc:creator>胡志刚</dc:creator><author>胡志刚</author><pubDate>Sun, 26 Dec 2010 15:18:00 GMT</pubDate><guid>http://www.cppblog.com/lingling520/archive/2010/12/26/137530.html</guid><wfw:comment>http://www.cppblog.com/lingling520/comments/137530.html</wfw:comment><comments>http://www.cppblog.com/lingling520/archive/2010/12/26/137530.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lingling520/comments/commentRss/137530.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingling520/services/trackbacks/137530.html</trackback:ping><description><![CDATA[<div>
<p><font color=#0000ff size=4>设置视图背景颜色 <br>对于VC＋＋文档、视结构中的视图，从用户的角度来看，只是可以改变大小、位置的普通窗口，同其他基于Windows应用程序的窗口是一样的；从程序员的角度来看，视图并不是普通的窗口，而是从MFC库中CView类派生的类对象。像任何VC＋＋对象一样，视图对象的行为由类的成员函数（数据成员）决定，包括派生类中应用程序定义的函数和从基类继承来的函数。 </font></p>
<p><font color=#0000ff size=4>提出问题 <br>视图的背景一般来说是白色的，在缺省情况下，它和系统定义的颜色COLOR_WINDOW是一致的。设计者一般会希望自己的程序可以让用户轻松地改变窗口背景颜色，或是用漂亮的图片来充填背景。我们可以用Windows函数SetSysColors来重新指定COLOR_WINDOW所对应的实际颜色，来达到改变视图背景颜色的目的。但这样会同时改变其他应用程序的视图窗口背景，使得整个Windows系统的颜色设置产生混乱。另外，我们可能会用以下方法来设置视图的背景颜色，即在CView的OnDraw函数中添写如下一段程序代码： <br>void CTestView::OnDraw(CDC＊ pDC) <br>{ <br>CTestDoc＊ pDoc = GetDocument(); <br>ASSERT_VALID(pDoc); <br>CRect rectClient; <br>CBrush brushBkColor; <br>GetClientRect(rectClient); <br>brushBkColor.CreateSolidBrush(RGB(255,0,0)); <br>pDC－&gt;DPtoLP(rectClient); <br>pDC－&gt;FillRect(rectClient,＆brushBkColor); <br>&#8230; <br>} <br>这样可以达到改变当前应用程序的视图背景的目的，但同时也产生了一些不良影响，使得程序运行效果不尽如人意。 </font></p>
<p><font color=#0000ff size=4>分析问题 <br>我们知道，在VC＋＋的文档、视结构中，CView的OnDraw函数用于实现绝大部分图形绘制的工作。如果用户改变窗口尺寸，或者显示隐藏的区域，OnDraw函数都将被调用来重画窗口。并且，当程序文档中的数据发生改变时，一般必须通过调用视图的Invalidate（或InvalidateRect）成员函数来通知Windows所发生的改变，对Invalidate的调用也会触发对OnDraw函数的调用。正因为OnDraw函数被频繁调用，所以在其执行时，每次都刷新填充一次视图客户区域，便会使屏幕不稳定，产生闪烁现象。 <br>笔者通过对VC＋＋应用程序框架结构和Windows消息映射系统的仔细研究，找到另外一种改变视图背景的方法，其执行效果比上述两种方法都好。其实在程序调用OnDraw函数之前，会触发一个Windows消息：WM_ERASEBKGND，以擦除视图刷新区域。在缺省情况下，Windows系统使用视图窗口注册时窗口类中的成员hbrBackground所描述的画刷来擦除屏幕，这一般会将屏幕刷新成COLOR_WINDOW所对应的颜色。因此，在OnDraw函数中设置背景颜色的执行过程是这样的：先将屏幕刷新成COLOR_WINDOW所对应的颜色，接着又在OnDraw函数中填充其他颜色，这正是产生屏幕闪烁的根本原因。 </font></p>
<p><font color=#0000ff size=4>解决问题 <br>通过上述分析，我们应将视图背景颜色填充移到Windows消息：WM_ERASEBKGND所对应的消息映射函数中，而不是在OnDraw函数中。我们可以通过下列步骤实现这一过程：在文档类中增加一成员变量m_viewBkColor保存当前背景颜色，同时增加两个成员函数GetViewBkColor和SetViewBkColor对其进行读写操作。这样做的好处是可以对m_viewBkColor成员进行序列化，将其和文档联系在一起，打开某一文档时，其背景将和上一次程序操作该文档时的背景保持一致。在视图类中为视图的Windows消息WM_ERASEBKGND增加消息映射函数OnEraseBkgnd，代码如下： <br>BOOL CTestView::OnEraseBkgnd(CDC＊ pDC)&nbsp; <br>{ <br>CRect rect; <br>CBrush brush; <br>brush.CreateSolidBrush(GetDocument()－&gt;GetViewBkColor()); <br>pDC－&gt;GetClipBox(rect); <br>pDC－&gt;FillRect(rect,＆brush); <br>return true; <br>} <br>在该函数中不需要对客户区域矩形进行设备坐标到逻辑坐标的转换，并且Windows在调用该函数时会自动进行裁剪区域的计算，使得需要刷新的屏幕面积达到最小。这样我们可以在程序中通过设计下列菜单函数轻松地改变视图背景的颜色，而且运行效果相当令人满意。 <br>void CTestView::OnChangeViewBkcolor()&nbsp; <br>{ <br>CColorDialog cdlg; <br>if(cdlg.DoModal()==IDOK) <br>{ <br>GetDocument()－&gt;SetViewBkColor <br>(cdlg.GetColor()); <br>InvalidateRect(NULL); <br>} <br>} </font></p>
<p><font color=#0000ff size=4>改变对话框标题 </font></p>
<p><font color=#0000ff size=4>提出问题 <br>在VC＋＋程序设计过程中经常会遇到这样的情况：执行程序的多个地方需要调用同一个对话框，但在不同的情况下希望给对话框加上不同的标题。开始我们可能会用下面的一段程序以达到这一目的： <br>CTestDialog dlg; <br>dlg.SetWindowText(&#8220;标题－1"); <br>dlg.DoModal(); <br>利用上述办法，我们本希望在程序不同的地方，通过设置函数SetWindowText不同的参数，以达到使同一对话框具有不同标题的目的，但这样做是行不通的。 </font></p>
<p><font color=#0000ff size=4>分析问题 <br>利用这种方法，当执行该段程序时，在一个可以忽略的错误之后，对话框的标题不会发生任何改变。这是因为，VC＋＋程序设计中，大部分窗体是动态创建的。比如上述对话框，在对dlg.DoModal的调用之前，虽然已构造了对话框的VC＋＋对象，但窗体对象还没有被创建，显然对一个没有创建窗体对象的对话框设置标题是行不通的。另外，dlg.DoModal的调用结束时，对话框窗体对象将立即被释放，因此在该函数之后设置对话框标题也是不行的。 </font></p>
<p><font color=#0000ff size=4>解决问题 <br>通过对VC＋＋框架结构中函数的调用顺序的分析，我们发现在dlg.DoModal执行的开始时，程序会自动调用对话框的一系列初始化函数，其中包括对对话框成员函数OnInitDialog的调用，从这里入手，将找到改变对话框标题的办法。为此，首先为对话框引进一个类型为CString的公有成员变量m_strCaption,并将上述程序段改为： <br>CTestDialog dlg; <br>dlg.m_strCaption = &#8220;标题－1"; <br>dlg.DoModal(); <br>然后重载对话框的虚成员函数OnInitDialog如下： <br>BOOL CTestDialog::OnInitDialog()&nbsp; <br>{ <br>CDialog::OnInitDialog(); <br>SetWindowText(m_strCaption); <br>&#8230; <br>return TRUE; <br>} <br>通过这种办法，每次在打开对话框之前，只要将对话框公有成员变量m_strCaption设置为一个不同的值，就可使得对话框有不同的标题。</font></p>
</div>
<img src ="http://www.cppblog.com/lingling520/aggbug/137530.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingling520/" target="_blank">胡志刚</a> 2010-12-26 23:18 <a href="http://www.cppblog.com/lingling520/archive/2010/12/26/137530.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sizeof()小结</title><link>http://www.cppblog.com/lingling520/archive/2010/12/06/135561.html</link><dc:creator>胡志刚</dc:creator><author>胡志刚</author><pubDate>Mon, 06 Dec 2010 02:55:00 GMT</pubDate><guid>http://www.cppblog.com/lingling520/archive/2010/12/06/135561.html</guid><wfw:comment>http://www.cppblog.com/lingling520/comments/135561.html</wfw:comment><comments>http://www.cppblog.com/lingling520/archive/2010/12/06/135561.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lingling520/comments/commentRss/135561.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingling520/services/trackbacks/135561.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Pascal的一种内存容量度量函数c语言中判断数据类型长度符sizeof有三种语法形式，1）sizeof(object );//对象2）sizeof(type_name);//类型3）sizeof object://对象sizeof( 2 ); // 2的类型为int，所以等价于 sizeof( int );　　sizeof( 2 +&nbsp;3.14&nbsp;); // 3.14的类型为do...&nbsp;&nbsp;<a href='http://www.cppblog.com/lingling520/archive/2010/12/06/135561.html'>阅读全文</a><img src ="http://www.cppblog.com/lingling520/aggbug/135561.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingling520/" target="_blank">胡志刚</a> 2010-12-06 10:55 <a href="http://www.cppblog.com/lingling520/archive/2010/12/06/135561.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>位图简介</title><link>http://www.cppblog.com/lingling520/archive/2010/12/02/135279.html</link><dc:creator>胡志刚</dc:creator><author>胡志刚</author><pubDate>Thu, 02 Dec 2010 08:59:00 GMT</pubDate><guid>http://www.cppblog.com/lingling520/archive/2010/12/02/135279.html</guid><wfw:comment>http://www.cppblog.com/lingling520/comments/135279.html</wfw:comment><comments>http://www.cppblog.com/lingling520/archive/2010/12/02/135279.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lingling520/comments/commentRss/135279.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingling520/services/trackbacks/135279.html</trackback:ping><description><![CDATA[<p>位图编程<br>Windows系统使用的位图常分为设备相关位图(DDB)和设备无关位图(DIB)两种。其中DDB依赖于具体的图像输出设备，其颜色模式必须与输出设备相一致。DDB位图的显示很简单，其内部用一个Bitmap结构表示，其中包含了位图的宽度、高度、每像素的位数和设备相关的每像素的颜色等信息，将文件内容拷贝到内存中，然后可以很方便地将它粘贴到相关设备中，用BitBlt函数直接显示。但它只能存在与视频内存或系统内存中，且与输出设备紧密相关，因此程序员不会把DDB图像存储成文件，而是更多的使用DIB。<br><br><br>位图的显示顺序<br><br>1。创建位图对象，并通过该对象加载和设置位图内容，<br>2。创建于当前设备环境兼容的内存设备环境，并将位图选入该内存设备环境中，<br>3。该内存设备环境中的位图复制到当前的设备环境中，从而在当前窗口显示该位图。<br><br>.创建位图对象：可以先利用CBitmap类构造一个位图对象。通过CBitmap对象在首次被实例化时时空的。要使该对象有效，CBitmap类所包装的位图必须先创建。该类用于创建位图的成员函数有CreateBitmap()、CreateBitmapIndirect()和CreaeteComapatbleBitmap()等。<br>第二步就是加载和设置位图内容。通过开辟一个缓冲区(内存)中，完成后使用SetBitmapBits()函数将内存缓冲区的内容复制到位图上。<br>当创建完一个有效的位图对象后，就可以采用CDC类的成员函数BitBlt()把它显示在屏幕上。BitBlt()函数的功能就是把源设备环境的位图复制到目标设备中。也就是说，在设备之间进行复制之前，必须创建一个用于位图的设备环境，并且在进行复制前还要把位图选入设备环境中。<br><br>使用CBitmap类就消除闪烁。<br>CImage是MFC和ATL共享的新类，它能从外部磁盘中调入一个JPEG、GIF、BMP和PNG格式的图像文件加以显示。而且这些文件格式可以相互装换。<br><br><br><br></p>
<img src ="http://www.cppblog.com/lingling520/aggbug/135279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingling520/" target="_blank">胡志刚</a> 2010-12-02 16:59 <a href="http://www.cppblog.com/lingling520/archive/2010/12/02/135279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>消息和图形方面</title><link>http://www.cppblog.com/lingling520/archive/2010/12/02/135277.html</link><dc:creator>胡志刚</dc:creator><author>胡志刚</author><pubDate>Thu, 02 Dec 2010 08:06:00 GMT</pubDate><guid>http://www.cppblog.com/lingling520/archive/2010/12/02/135277.html</guid><wfw:comment>http://www.cppblog.com/lingling520/comments/135277.html</wfw:comment><comments>http://www.cppblog.com/lingling520/archive/2010/12/02/135277.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lingling520/comments/commentRss/135277.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingling520/services/trackbacks/135277.html</trackback:ping><description><![CDATA[<p>消息<br><br><br>从消息的发送途径上看，消息可以分为队列消息和分队列消息。其中，队列消息送到系统消息队列，然后到线程消息队列中，而非队列消息直接送给目的窗口过程。<br><br><br>消息隐射，就是把Windows系统的各种消息隐射到MFC类库的成员函数上的一种机制。简单说，就是让程序员制定要某个有消息处理能力的MFC类来处理某个消息。<br><br><br>图形方面GDI<br><br>逻辑空间是一个理由的绘图空间。在这个空间里，程序员可以使用所有的颜色、所有的字体，可以在无限大的范围内输出。设备空间则是一个真实具体的世界，在这个空间中，只有有限的颜色可用于绘图、具有特定的输出格式以及有限的输出空间。<br><br>设备环境DC，是由GDI创建的用于代表设备连接的数据结构。该数据结构包含了图形设备的绘制属性信息。GDI绘制调用都是借助于设备环境对象。该对象封装了用于画线、文本、图像等的WindowsAPI.设备环境可以进行与设备无关的绘制，因此它既可以用于绘制屏幕，又可以用于绘制打印机，甚至元文件等。<br><br>CPaintDC类<br><br>BeginPaint()，它只能在WM_PAINT消息的响应程序中使用。当用函数BeginPaint()得到设备环境句柄后，就可以在设备环境中进行一系列的绘图操作，最后必须采用函数EndPaint()来释放这个DC句柄。<br>CPaintDC类则完全封装了这一过程，该类派生于CDC类。<br><br>CClientDC类<br>CClientDC类所封装的设备环境仅代表视图类窗口，也就是说只能在窗口的客户区进行图形绘制，该类派生于CDC类。<br><br>CWindowDC类<br>窗口有客户区和非客户区，利用BeginPaint()/EndPaint()或GetDC()/Release()在客户区上绘图。<br>非客户区包括窗体标题栏、菜单、滚动条和框架。GetWindowDC()这个函数就能满足在非客户区绘图的要求，因为该函数可以获得整个窗口的设备句柄，包括客户区和费客户区，也就是说可以在一个窗体的任何位置进行绘图。CWindowDC()函数是其成员函数，并且它也是派生于CDC类。<br><br>所谓映射模式，就是确定用于绘图操作的单位大小的一种量度转换。也就是说，设定的映射模式主要是确定应该如何将逻辑空间的一个坐标点转换为设备空间中的一个设备坐标点。映射模式是一种影响绘图操作的设备属性，其中窗口原点，视口原点、窗口范围和视口范围这四个设备属性和映射模式密切相关。因此映射模式主要规定了窗口和视口的范围、各轴的相对放心、原点或缩放比例等。<br><br>SetMapMode()函数用于设置设备环境的映射模式。几种映射模式：MM_TEXT映射模式、固定比例映射模式、可变比例映射模式。</p>
<img src ="http://www.cppblog.com/lingling520/aggbug/135277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingling520/" target="_blank">胡志刚</a> 2010-12-02 16:06 <a href="http://www.cppblog.com/lingling520/archive/2010/12/02/135277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于VC程序启动时函数运行简要说明</title><link>http://www.cppblog.com/lingling520/archive/2010/12/02/135266.html</link><dc:creator>胡志刚</dc:creator><author>胡志刚</author><pubDate>Thu, 02 Dec 2010 06:19:00 GMT</pubDate><guid>http://www.cppblog.com/lingling520/archive/2010/12/02/135266.html</guid><wfw:comment>http://www.cppblog.com/lingling520/comments/135266.html</wfw:comment><comments>http://www.cppblog.com/lingling520/archive/2010/12/02/135266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lingling520/comments/commentRss/135266.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingling520/services/trackbacks/135266.html</trackback:ping><description><![CDATA[应有和线程类<br>Windows以事件驱动方式工作，每个Windows应用程序都只是至少包含一个消息循环(::GetMessage,::PeekMessage)和一个消息泵(CWinThread::PumpMessage).消息队列建立在Windows系统提供的内存保留区中，通过消息泵来不断搜寻消息队列，将取得的消息分发给应用程序的各个部分进行处理，这个过程叫做消息循环。<br><br>文档视图类说明<br>1.CDocument类主要任务通常是对数据库进行管理和维护，数据将保存在文档类的成员变量中。CView类通过对这个些变量的访问来获取或送回数据，并能通过这种方式来更新并显示数据，从而把数据管理和显示方法分离开来。<br><br><br>程序运行路线及各个类的说明：<br><br>应用程序编写主线：WinMain()函数是入口点，在该函数里设计窗口类、注册窗口类、创建窗口、显示窗口、更新窗口，然后进入消息循环，将消息路由到窗口过程函数并进行相应的处理。对于MFC框架同样也是需要WinMain()函数，窗口过程函数等来创建一个基于窗口的应用程序。<br>AfxWinInit()函数，是第一个调用的函数，此函数源文件APPINIT.CPP中。<br><br>InitAppIication()函数，是CWinApp类的一个比较陈旧的成员函数，并且还是一个虚函数，现在对于一般的应用程序初始化都通过另一个成员函数InitInstance()来实现。<br><br>InitInstance()是一个虚函数。作为CWinApp类的成员函数，它是一个空函数，因此大多数应用程序都是重载这个函数。当应用程序被第一次调用时，WinMain()函数就会调用InitInstance()；来对应用程序进行初始化，之后每当应用程序启动一个新的实例时，InitInstance()函数数就会对该实例进行初始化。<br><br>
<img src ="http://www.cppblog.com/lingling520/aggbug/135266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingling520/" target="_blank">胡志刚</a> 2010-12-02 14:19 <a href="http://www.cppblog.com/lingling520/archive/2010/12/02/135266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TRACE、assert简要说明</title><link>http://www.cppblog.com/lingling520/archive/2010/12/02/135252.html</link><dc:creator>胡志刚</dc:creator><author>胡志刚</author><pubDate>Thu, 02 Dec 2010 03:07:00 GMT</pubDate><guid>http://www.cppblog.com/lingling520/archive/2010/12/02/135252.html</guid><wfw:comment>http://www.cppblog.com/lingling520/comments/135252.html</wfw:comment><comments>http://www.cppblog.com/lingling520/archive/2010/12/02/135252.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lingling520/comments/commentRss/135252.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingling520/services/trackbacks/135252.html</trackback:ping><description><![CDATA[&nbsp; TRACE宏对于在Visual C++下调试程序来说是很有用的东西<br>，它有点类似C语言中的printf()函数，使程序在开发过程中输出一些调试信息，<br>以让开发者了解程序的某些状态。<br>TRACE宏把结果输出到调试窗口，注意，TRACE宏只有在Debug版本下才有效，在Release版本中，它将被忽略。&nbsp;
<div style="FONT-SIZE: 12pt" v:shape="_x0000_s1026">VERIFY宏的功能与ASSERT类似，所不同的是，在Release版本中，ASSERT不计算输入的表达式的值，而VERIFY会计算表达式的值。如果必须计算此表达式的值，则用VERIFY代替ASSERT</div>
<br>ASSERT宏在调试程序过程中也经常用到，使用它可以对某一条件进行判定，如果条件为真，程序将继续执行，如果条件为假，系统将弹出一个警告对话框，并终止运行。ASSERT宏主要用来判断程序中是否出现了明显的非法数据，如果出现了，将会终止程序运行以免导致严重后果，同时也便于查找错误<br><br><br><br><br>
<img src ="http://www.cppblog.com/lingling520/aggbug/135252.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingling520/" target="_blank">胡志刚</a> 2010-12-02 11:07 <a href="http://www.cppblog.com/lingling520/archive/2010/12/02/135252.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>