﻿<?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++博客-lijiakxl的专栏</title><link>http://www.cppblog.com/lijiakxl/</link><description>Make it right before you make it faster. 
Keep it right when you make it faster. 
Make it clear before you make it faster. 
Do not sacrifice clarity for small gains in efficiency.</description><language>zh-cn</language><lastBuildDate>Wed, 08 Apr 2026 23:30:28 GMT</lastBuildDate><pubDate>Wed, 08 Apr 2026 23:30:28 GMT</pubDate><ttl>60</ttl><item><title>std::sort 排序vector    崩溃原因</title><link>http://www.cppblog.com/lijiakxl/archive/2016/10/08/214319.html</link><dc:creator>李佳</dc:creator><author>李佳</author><pubDate>Sat, 08 Oct 2016 03:19:00 GMT</pubDate><guid>http://www.cppblog.com/lijiakxl/archive/2016/10/08/214319.html</guid><wfw:comment>http://www.cppblog.com/lijiakxl/comments/214319.html</wfw:comment><comments>http://www.cppblog.com/lijiakxl/archive/2016/10/08/214319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lijiakxl/comments/commentRss/214319.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijiakxl/services/trackbacks/214319.html</trackback:ping><description><![CDATA[<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19.5px; background-color: #ffffff;">如果当比较元素相同返回真时，此时比较元素将会继续向下遍历，在极端情况下，例如程序中所有元素都是一样的情况下，在这种情况下，就会出现访问越界，结果就是导致程序出现segment fault</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19.5px; background-color: #ffffff;" /><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19.5px; background-color: #ffffff;" /><span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19.5px; background-color: #ffffff;">所以在写c++ stl中的比较函数是，bool返回真的时候，一定是&#8220;真的&#8221;大，或者小，等于的时候只能返回false。</span><img src ="http://www.cppblog.com/lijiakxl/aggbug/214319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijiakxl/" target="_blank">李佳</a> 2016-10-08 11:19 <a href="http://www.cppblog.com/lijiakxl/archive/2016/10/08/214319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>把以前的程序推到 重写  很爽啊!!!</title><link>http://www.cppblog.com/lijiakxl/archive/2009/11/25/101906.html</link><dc:creator>李佳</dc:creator><author>李佳</author><pubDate>Wed, 25 Nov 2009 07:01:00 GMT</pubDate><guid>http://www.cppblog.com/lijiakxl/archive/2009/11/25/101906.html</guid><wfw:comment>http://www.cppblog.com/lijiakxl/comments/101906.html</wfw:comment><comments>http://www.cppblog.com/lijiakxl/archive/2009/11/25/101906.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lijiakxl/comments/commentRss/101906.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijiakxl/services/trackbacks/101906.html</trackback:ping><description><![CDATA[推倒的过程就已经学到了不少东西....<br>最近重写了以前的一个程序...原来 用了OO 代码可以写的如此优雅... <br>建议没事了&nbsp; 推推以前的程序重写&nbsp; 学到的东西也是不少的&nbsp; 特别是对需求的理解 对架构的设计<br><br><img src ="http://www.cppblog.com/lijiakxl/aggbug/101906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijiakxl/" target="_blank">李佳</a> 2009-11-25 15:01 <a href="http://www.cppblog.com/lijiakxl/archive/2009/11/25/101906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>看过了OO思想的专著 才知道自己以前的代码有多么的丑陋...</title><link>http://www.cppblog.com/lijiakxl/archive/2009/11/17/101207.html</link><dc:creator>李佳</dc:creator><author>李佳</author><pubDate>Tue, 17 Nov 2009 07:39:00 GMT</pubDate><guid>http://www.cppblog.com/lijiakxl/archive/2009/11/17/101207.html</guid><wfw:comment>http://www.cppblog.com/lijiakxl/comments/101207.html</wfw:comment><comments>http://www.cppblog.com/lijiakxl/archive/2009/11/17/101207.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/lijiakxl/comments/commentRss/101207.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijiakxl/services/trackbacks/101207.html</trackback:ping><description><![CDATA[原来自己以前一直是把C++当成C用 尽管里面有class&nbsp; 但是&nbsp; 如果思想是过程的&nbsp; 再好的OO语言也是无助的<br><br>改代码... 好好学习OO<br><br><img src ="http://www.cppblog.com/lijiakxl/aggbug/101207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijiakxl/" target="_blank">李佳</a> 2009-11-17 15:39 <a href="http://www.cppblog.com/lijiakxl/archive/2009/11/17/101207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>哎  代码改的优雅多了...</title><link>http://www.cppblog.com/lijiakxl/archive/2009/11/09/100468.html</link><dc:creator>李佳</dc:creator><author>李佳</author><pubDate>Mon, 09 Nov 2009 06:42:00 GMT</pubDate><guid>http://www.cppblog.com/lijiakxl/archive/2009/11/09/100468.html</guid><wfw:comment>http://www.cppblog.com/lijiakxl/comments/100468.html</wfw:comment><comments>http://www.cppblog.com/lijiakxl/archive/2009/11/09/100468.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lijiakxl/comments/commentRss/100468.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijiakxl/services/trackbacks/100468.html</trackback:ping><description><![CDATA[少了硬编码&nbsp; 代码确实好看了很多...<br>上个例子... 滚动视图部分的<br>修改前的代码<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;CTransportWnd::OnPaint()<br>{&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC&nbsp;dc(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_tooltip.RemoveAllTools();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">清空所有标记</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;CRect&nbsp;rect;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(rect);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;DocToClient(rect);<br>&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;dcMem;<br>&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP&nbsp;bm;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;bm&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CreateCompatibleBitmap(dc.m_hDC,&nbsp;rect.Width(),&nbsp;rect.Height());<br>&nbsp;&nbsp;&nbsp;&nbsp;dcMem&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CreateCompatibleDC(dc);<br>&nbsp;&nbsp;&nbsp;&nbsp;SelectObject(dcMem,&nbsp;bm);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">////////////////////////</span><span style="color: #008000;">//</span><span style="color: #808080;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;Graphics&nbsp;graphics(dcMem);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;graphics.SetSmoothingMode(SmoothingModeHighQuality);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;background</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;graphics.FillRectangle(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">SolidBrush(Color(</span><span style="color: #000000;">255</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">255</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">255</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">255</span><span style="color: #000000;">)),&nbsp;rect.left,&nbsp;rect.top,&nbsp;rect.Width(),&nbsp;rect.Height());<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;concrete&nbsp;flow</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;DrawAllPlaces(graphics,&nbsp;rect);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;BitBlt(dc,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;rect.Width(),&nbsp;rect.Height(),&nbsp;dcMem,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;SRCCOPY);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;DeleteObject(bm);<br>&nbsp;&nbsp;&nbsp;&nbsp;DeleteDC(dcMem);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">更改滚动条</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">rect);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;iCount&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;m_vecPlaces.size();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;iTotalHeight&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(iCount&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;(FLOW_HEIGHT</span><span style="color: #000000;">+</span><span style="color: #000000;">10</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;SetScrollSizes(&nbsp;MM_LOENGLISH,&nbsp;CSize(rect.Width()&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">20</span><span style="color: #000000;">,&nbsp;iTotalHeight)&nbsp;);<br>}</span></div>
<br>修改过后的代码<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;CWorksiteWnd::OnDraw(CDC</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pDC)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO:&nbsp;在此处为本机数据添加绘制代码</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;m_tooTip.RemoveAllTools();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">清空所有标记</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;CRect&nbsp;rect;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(rect);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">绘图</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;Graphics&nbsp;graphics(&nbsp;pDC</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_hDC&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;DrawAllPlaces(graphics,&nbsp;rect);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">更新滚动条</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">rect);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;iCount&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;m_vecPlaces.size();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;iTotalHeight&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;iCount&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;(FLOW_HEIGHT</span><span style="color: #000000;">+</span><span style="color: #000000;">10</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">20</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;SetScrollSizes(&nbsp;MM_TEXT,&nbsp;CSize(rect.Width()&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">20</span><span style="color: #000000;">,&nbsp;iTotalHeight)&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span></div>
单单抛开双缓冲不说&nbsp;&nbsp; 那个DocToClient这个函数简直是丑陋无比 而且是设备相关的(换了分辨率就变样了...)<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;CTransportWnd::DocToClient(CRect</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;rect)<br>{&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;CClientDC&nbsp;dc(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;OnPrepareDC(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dc,&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;dc.LPtoDP(rect);<br>&nbsp;&nbsp;&nbsp;&nbsp;rect.NormalizeRect();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">rect.bottom&nbsp;+=&nbsp;5000;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">rect.top&nbsp;-=&nbsp;198;</span><span style="color: #008000;"><br></span><span style="color: #000000;">}<br></span></div>
代码的丑陋可能现在还看不出来...在上一段小小的代码&nbsp; 后面画图部分的<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;CTransportWnd::DrawAllPlaces(Graphics</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;graphics,&nbsp;CRect&nbsp;rect)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">rect.top&nbsp;+=&nbsp;188;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;CRect&nbsp;rectTemp;<br>&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">rectTemp);<br>&nbsp;&nbsp;&nbsp;&nbsp;rect.top&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;rectTemp.bottom;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">rect.top&nbsp;=&nbsp;0;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">PLACE_STATION</span><span style="color: #000000;">*&gt;</span><span style="color: #000000;">::iterator&nbsp;it&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;m_vecPlaces.begin();</span></div>
简直就是war3里面的憎恶...&nbsp; 用肉缝起来的代码&nbsp; 后面还有大量的<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">CPoint&nbsp;pointScorll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GetScrollPosition();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rectTemp.bottom&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;pointScorll.y;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rectTemp.top&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;pointScorll.y;&nbsp;</span></div>
哎&nbsp; 今天花了一早上更改代码&nbsp;&nbsp; 现在的代码看着要舒服多了&nbsp; 还是听感谢侯捷的&lt;深入浅出MFC&gt;&nbsp; 昨晚无意间翻到的CScorllView这一节&nbsp; 一下就看明白代码的设备相关性的问题出在哪了...&nbsp;&nbsp; 看来还是要时不时翻翻书 <br><br><img src ="http://www.cppblog.com/lijiakxl/aggbug/100468.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijiakxl/" target="_blank">李佳</a> 2009-11-09 14:42 <a href="http://www.cppblog.com/lijiakxl/archive/2009/11/09/100468.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个简单的日志类 SDK + STL写的</title><link>http://www.cppblog.com/lijiakxl/archive/2009/10/31/99906.html</link><dc:creator>李佳</dc:creator><author>李佳</author><pubDate>Sat, 31 Oct 2009 09:58:00 GMT</pubDate><guid>http://www.cppblog.com/lijiakxl/archive/2009/10/31/99906.html</guid><wfw:comment>http://www.cppblog.com/lijiakxl/comments/99906.html</wfw:comment><comments>http://www.cppblog.com/lijiakxl/archive/2009/10/31/99906.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/lijiakxl/comments/commentRss/99906.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijiakxl/services/trackbacks/99906.html</trackback:ping><description><![CDATA[前段时间自己写了一个日志类&nbsp; 不过是MFC写的&nbsp;&nbsp; 今天闲着没事&nbsp; 就用SDK重写了这个类&nbsp; 算是增加一点可移植性吧...<br>类的使用也很简单&nbsp; 初始化的时候传递一个日志名称&nbsp; <br>然后在需要写日志的地方 直接调用这个对象的WriteLog函数传递一个字符串进去就行了<br>如果需要时间戳&nbsp; 则调用WriteLogWithTime函数&nbsp; 一样的接口<br>支持设置日志大小&nbsp; SetLogSize()&nbsp;&nbsp; //KB计算<br>代码很简单&nbsp; 一百来行&nbsp; 不过用着还算挺方便的&nbsp; 下午就用这个日志类找到了一个以前工程中的SQL相关联的BUG 呵呵&nbsp; <br><br>.h文件<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;">****************************************************<br>*文件名称:&nbsp;Log_SDK.h<br>*功能说明:&nbsp;使用SDK&nbsp;+&nbsp;STL重写的一个日志类&nbsp;增加可移植性<br>*创建时间:&nbsp;09.10.31<br>*文件作者:&nbsp;zip<br>*****************************************************</span><span style="color: #008000;">/</span><span style="color: #000000;"><br>#pragma&nbsp;once<br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br><br></span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;LogSDK<br>{<br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;LogSDK(</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;strFileName);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">~</span><span style="color: #000000;">LogSDK(</span><span style="color: #0000ff;">void</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;InitLogSDK();<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;WriteLog(TCHAR</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pContent);<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;WriteLogWithTime(TCHAR</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pContent);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">每次写一行&nbsp;且带时间</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;WriteLogAtFirstLine(TCHAR</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pContent);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">将最近的日志写在最前面&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;SetLogSize(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;iSize);<br><br></span><span style="color: #0000ff;">private</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;m_hFile;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;m_strFileName;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;m_strFormat;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;CRITICAL_SECTION&nbsp;m_cs;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">临界区</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;m_bInit;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">初始化标志位</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;m_iSize;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">文件大小&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;KB计算</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;GetTimeStr();<br>};<br></span></div>
<br>.cpp文件<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;">**************************************************<br>*文件名称:&nbsp;Log_SDK.cpp<br>*功能说明:&nbsp;LogSDK的实现文件<br>*创建时间:&nbsp;09.10.31<br>*文件作者:&nbsp;zip<br>***************************************************</span><span style="color: #008000;">/</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">StdAfx.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">.\log_sdk.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br><br>LogSDK::LogSDK(</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;strFileName)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_bInit&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_strFileName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;strFileName;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_iSize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">20</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">默认20KB</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;InitLogSDK();<br>}<br><br>LogSDK::</span><span style="color: #000000;">~</span><span style="color: #000000;">LogSDK(</span><span style="color: #0000ff;">void</span><span style="color: #000000;">)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(m_hFile);<br>}<br><br>BOOL&nbsp;LogSDK::InitLogSDK()<br>{&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_hFile&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CreateFile(m_strFileName.c_str()&nbsp;,&nbsp;GENERIC_ALL&nbsp;, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FILE_SHARE_WRITE&nbsp;,&nbsp;NULL&nbsp;,&nbsp;&nbsp;OPEN_ALWAYS&nbsp;,&nbsp;FILE_ATTRIBUTE_NORMAL&nbsp;,&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(m_hFile&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;INVALID_HANDLE_VALUE)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwErrorCode&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GetLastError();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCHAR&nbsp;szErrMsg[</span><span style="color: #000000;">255</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(szErrMsg&nbsp;,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">打开文件失败&nbsp;,&nbsp;错误代码:%d</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;,&nbsp;dwErrorCode);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">AfxMessageBox(szErrMsg);</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL&nbsp;,&nbsp;szErrMsg&nbsp;,&nbsp;_T(</span><span style="color: #000000;">"</span><span style="color: #000000;">警告</span><span style="color: #000000;">"</span><span style="color: #000000;">)&nbsp;,IDOK);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;::InitializeCriticalSection(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">m_cs);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">初始化临界区</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;m_bInit&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;TRUE;<br>}<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">普通的写日志</span><span style="color: #008000;"><br></span><span style="color: #000000;">BOOL&nbsp;LogSDK::WriteLog(TCHAR</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pContent)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(m_bInit);<br>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwFileLenHigh;<br>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwFileLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GetFileSize(m_hFile&nbsp;,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dwFileLenHigh);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(dwFileLen&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;(DWORD)m_iSize&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1024</span><span style="color: #000000;">)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">文件过大&nbsp;清空文件</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetFilePointer(m_hFile&nbsp;,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;,&nbsp;NULL&nbsp;,&nbsp;FILE_BEGIN);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">移动文件指针</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEndOfFile(m_hFile);</span><span style="color: #008000;">//</span><span style="color: #008000;">清空文件</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;strContent(pContent);<br>&nbsp;&nbsp;&nbsp;&nbsp;strContent&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">\r\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bRet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;::EnterCriticalSection(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">m_cs);<br>&nbsp;&nbsp;&nbsp;&nbsp;SetFilePointer(m_hFile&nbsp;,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;,&nbsp;NULL&nbsp;,&nbsp;FILE_END);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">移动到文件末尾</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwWriteLen;<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bSuccess&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;WriteFile(m_hFile&nbsp;,&nbsp;strContent.c_str()&nbsp;, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (DWORD)strContent.length()&nbsp;,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dwWriteLen&nbsp;,&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(dwWriteLen&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;strContent.length());<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">bSuccess)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwErrorCode&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GetLastError();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCHAR&nbsp;szErrMsg[</span><span style="color: #000000;">255</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(szErrMsg&nbsp;,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">写入日志文件失败&nbsp;,&nbsp;错误代码:%d</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;,&nbsp;dwErrorCode);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL&nbsp;,&nbsp;szErrMsg&nbsp;,&nbsp;_T(</span><span style="color: #000000;">"</span><span style="color: #000000;">发生了严重的错误</span><span style="color: #000000;">"</span><span style="color: #000000;">)&nbsp;,&nbsp;IDOK);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">此处不用返回&nbsp;&nbsp;还要释放临界区</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;::LeaveCriticalSection(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">m_cs);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;bRet;<br>}<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">带有时间戳的日志</span><span style="color: #008000;"><br></span><span style="color: #000000;">BOOL&nbsp;LogSDK::WriteLogWithTime(TCHAR</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pContent)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(m_bInit);<br>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwFileLenHigh;<br>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwFileLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GetFileSize(m_hFile&nbsp;,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dwFileLenHigh);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(dwFileLen&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;(DWORD)m_iSize&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1024</span><span style="color: #000000;">)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">文件过大&nbsp;清空文件</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetFilePointer(m_hFile&nbsp;,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;,&nbsp;NULL&nbsp;,&nbsp;FILE_BEGIN);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEndOfFile(m_hFile);</span><span style="color: #008000;">//</span><span style="color: #008000;">清空文件</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">strcat(pContent&nbsp;,&nbsp;"\r\n");</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;strContent(pContent);<br>&nbsp;&nbsp;&nbsp;&nbsp;strContent&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">\r\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;strContent.insert(</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;strContent.insert(</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;,&nbsp;GetTimeStr());<br><br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bRet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;::EnterCriticalSection(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">m_cs);<br>&nbsp;&nbsp;&nbsp;&nbsp;SetFilePointer(m_hFile&nbsp;,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;,&nbsp;NULL&nbsp;,&nbsp;FILE_END);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">移动到文件末尾</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwWriteLen;<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bSuccess&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;WriteFile(m_hFile&nbsp;,&nbsp;strContent.c_str()&nbsp;, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (DWORD)strContent.length()&nbsp;,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dwWriteLen&nbsp;,&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp; ASSERT(dwWriteLen == strContent.length());<br></span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">bSuccess)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwErrorCode&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GetLastError();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCHAR&nbsp;szErrMsg[</span><span style="color: #000000;">255</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(szErrMsg&nbsp;,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">写入日志文件失败&nbsp;,&nbsp;错误代码:%d</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;,&nbsp;dwErrorCode);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL&nbsp;,&nbsp;szErrMsg&nbsp;,&nbsp;_T(</span><span style="color: #000000;">"</span><span style="color: #000000;">发生了严重的错误</span><span style="color: #000000;">"</span><span style="color: #000000;">)&nbsp;,&nbsp;IDOK);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;FALSE;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">此处不用返回&nbsp;&nbsp;还要释放临界区</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;::LeaveCriticalSection(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">m_cs);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;bRet;<br>}<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">返回格式化的时间字符串</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;LogSDK::GetTimeStr()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;SYSTEMTIME&nbsp;sys;<br>&nbsp;&nbsp;&nbsp;&nbsp;::GetLocalTime(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">sys);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">获取当前系统时间</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;TCHAR&nbsp;szTime[</span><span style="color: #000000;">64</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(szTime&nbsp;,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;,&nbsp;</span><span style="color: #000000;">64</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;sprintf(szTime&nbsp;,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">%d-%02d-%02d&nbsp;%02d:%02d:%02d.%03d</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;,&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.wYear&nbsp;,&nbsp;sys.wMonth&nbsp;,&nbsp;sys.wDay&nbsp;,&nbsp;sys.wHour&nbsp;,&nbsp;sys.wMinute&nbsp;,&nbsp;sys.wSecond&nbsp;,&nbsp;sys.wMilliseconds);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">(szTime);<br>}<br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;LogSDK::SetLogSize(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;iSize)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;m_iSize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;iSize;<br>}</span></div>
<br>也可以算锻炼一下API的操作吧...<br><br>  <img src ="http://www.cppblog.com/lijiakxl/aggbug/99906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijiakxl/" target="_blank">李佳</a> 2009-10-31 17:58 <a href="http://www.cppblog.com/lijiakxl/archive/2009/10/31/99906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CScorllView中绘图的注意事项</title><link>http://www.cppblog.com/lijiakxl/archive/2009/10/28/99675.html</link><dc:creator>李佳</dc:creator><author>李佳</author><pubDate>Wed, 28 Oct 2009 07:44:00 GMT</pubDate><guid>http://www.cppblog.com/lijiakxl/archive/2009/10/28/99675.html</guid><wfw:comment>http://www.cppblog.com/lijiakxl/comments/99675.html</wfw:comment><comments>http://www.cppblog.com/lijiakxl/archive/2009/10/28/99675.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lijiakxl/comments/commentRss/99675.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijiakxl/services/trackbacks/99675.html</trackback:ping><description><![CDATA[今天准备给一个视图增加一个滚动条&nbsp;&nbsp; 自然想到了从CScorllView中继承 可是继承了以后&nbsp; 发现滚动的时候会出现残影 <br>如图<br><img style="width: 642px; height: 88px;" alt=""  src="http://www.cppblog.com/images/cppblog_com/lijiakxl/11484/r_%e5%8e%9f%e5%a7%8b.jpg"><br>滚动条滚动以后<br><img alt=""  src="http://www.cppblog.com/images/cppblog_com/lijiakxl/11484/r_%e6%8b%96%e5%8a%a8%e4%bb%a5%e5%90%8e.jpg"> <br>在网上找到了一个例子&nbsp; 里面有一个函数引起了我的注意<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;CPaintWithDoubleBufferView::DocToClient(CRect</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;rect)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;CClientDC&nbsp;dc(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;OnPrepareDC(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dc,&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;dc.LPtoDP(rect);<br>&nbsp;&nbsp;&nbsp;&nbsp;rect.NormalizeRect();<br>}</span></div>
原来问题出在这了... <br>坐标没有转换&nbsp; 于是在自己的工程中增加了一个坐标转换的接口&nbsp; 再次调试&nbsp;&nbsp; 完成<br><br>说实话&nbsp; 并不大懂为什么要这么做...<br><br><img src ="http://www.cppblog.com/lijiakxl/aggbug/99675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijiakxl/" target="_blank">李佳</a> 2009-10-28 15:44 <a href="http://www.cppblog.com/lijiakxl/archive/2009/10/28/99675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>好久没写文章了  贴个奇技淫巧</title><link>http://www.cppblog.com/lijiakxl/archive/2009/10/22/99179.html</link><dc:creator>李佳</dc:creator><author>李佳</author><pubDate>Thu, 22 Oct 2009 04:02:00 GMT</pubDate><guid>http://www.cppblog.com/lijiakxl/archive/2009/10/22/99179.html</guid><wfw:comment>http://www.cppblog.com/lijiakxl/comments/99179.html</wfw:comment><comments>http://www.cppblog.com/lijiakxl/archive/2009/10/22/99179.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/lijiakxl/comments/commentRss/99179.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijiakxl/services/trackbacks/99179.html</trackback:ping><description><![CDATA[系统待机功能对于我这种笔记本用户很常见&nbsp;&nbsp; 一直不知道怎么实现 <br>今天搜索了一下&nbsp; 找到了一个命令行的&nbsp;&nbsp; 稍微一改&nbsp; 就能加到代码中去了&nbsp;&nbsp; <br><br>system("rundll32.exe powrprof.dll SetSuspendState");
<br><br>测试通过<br><br><img src ="http://www.cppblog.com/lijiakxl/aggbug/99179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijiakxl/" target="_blank">李佳</a> 2009-10-22 12:02 <a href="http://www.cppblog.com/lijiakxl/archive/2009/10/22/99179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐一个不错的OutLook样式的类</title><link>http://www.cppblog.com/lijiakxl/archive/2009/09/21/96856.html</link><dc:creator>李佳</dc:creator><author>李佳</author><pubDate>Mon, 21 Sep 2009 08:02:00 GMT</pubDate><guid>http://www.cppblog.com/lijiakxl/archive/2009/09/21/96856.html</guid><wfw:comment>http://www.cppblog.com/lijiakxl/comments/96856.html</wfw:comment><comments>http://www.cppblog.com/lijiakxl/archive/2009/09/21/96856.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/lijiakxl/comments/commentRss/96856.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijiakxl/services/trackbacks/96856.html</trackback:ping><description><![CDATA[这段时间上网算是找疯了...界面真是相当的麻烦<br>下面推荐一个OutLook类&nbsp;&nbsp; 可以很方便的给自己的程序增加一个OutLook样式的视图<br>文件上传下来了&nbsp;&nbsp; 又需要的&nbsp; 自己研究研究吧<br>这段时间一直在用一个国内的VC知识库上的一个OutLook类&nbsp;&nbsp; 今天再和这个国外的OutLook类一比较.. 汗...<br>以后&nbsp;&nbsp; 还是应该多多上上国外网站&nbsp;&nbsp;&nbsp;&nbsp; <br><br>效果图就不上了&nbsp;&nbsp; 自己看吧&nbsp;&nbsp; 比较华丽<br><br>下载地址<br><a  href="http://www.cppblog.com/Files/lijiakxl/OutBarDemo.rar">http://www.cppblog.com/Files/lijiakxl/OutBarDemo.rar</a><br> <img src ="http://www.cppblog.com/lijiakxl/aggbug/96856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijiakxl/" target="_blank">李佳</a> 2009-09-21 16:02 <a href="http://www.cppblog.com/lijiakxl/archive/2009/09/21/96856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC的界面编程 </title><link>http://www.cppblog.com/lijiakxl/archive/2009/09/16/96388.html</link><dc:creator>李佳</dc:creator><author>李佳</author><pubDate>Wed, 16 Sep 2009 02:22:00 GMT</pubDate><guid>http://www.cppblog.com/lijiakxl/archive/2009/09/16/96388.html</guid><wfw:comment>http://www.cppblog.com/lijiakxl/comments/96388.html</wfw:comment><comments>http://www.cppblog.com/lijiakxl/archive/2009/09/16/96388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lijiakxl/comments/commentRss/96388.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijiakxl/services/trackbacks/96388.html</trackback:ping><description><![CDATA[哎&nbsp; 新的工作就是做自己最薄弱的界面部分了...<br>一大堆东西都不知道&nbsp; 慢慢来吧&nbsp; <br>东西都记下来&nbsp; <br>首先就是OutLook样式的分割窗口&nbsp; +&nbsp;&nbsp; 多视图切换&nbsp; 代码先放着<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br></span><span style="color: #008000;">//</span><span style="color: #008000;">更换视图的按钮函数</span><span style="color: #008000;"><br></span><span style="color: #000000;">LRESULT&nbsp;COutBarView::OnOutbarNotify(UINT&nbsp;lParam&nbsp;,&nbsp;LONG&nbsp;wParam)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">switch</span><span style="color: #000000;">(wParam)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">case</span><span style="color: #000000;">&nbsp;IDC_OUT_BAR:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XT_CONTENT_ITEM</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pContentItems&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;m_WndOutLookBar.GetMenuItem((</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)lParam);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(pContentItems);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMainFrame&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pMainFrame&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(CMainFrame&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">)AfxGetApp()</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_pMainWnd;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">switch</span><span style="color: #000000;">(lParam)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">case</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pMainFrame</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">SwitchToView(RED);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">case</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pMainFrame</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">SwitchToView(BLACK);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>}</span></div>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br></span><span style="color: #008000;">//</span><span style="color: #008000;">创建Outlook工具栏</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;CMainFrame::OnCreate(LPCREATESTRUCT&nbsp;lpCreateStruct)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(CFrameWnd::OnCreate(lpCreateStruct)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">m_wndToolBar.CreateEx(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">,&nbsp;TBSTYLE_FLAT,&nbsp;WS_CHILD&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;WS_VISIBLE&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;CBRS_TOP<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;CBRS_GRIPPER&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;CBRS_TOOLTIPS&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;CBRS_FLYBY&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;CBRS_SIZE_DYNAMIC)&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">!</span><span style="color: #000000;">m_wndToolBar.LoadToolBar(IDR_MAINFRAME))<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE0(</span><span style="color: #000000;">"</span><span style="color: #000000;">未能创建工具栏\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;未能创建</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">m_wndStatusBar.Create(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">!</span><span style="color: #000000;">m_wndStatusBar.SetIndicators(indicators,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(indicators)</span><span style="color: #000000;">/</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(UINT)))<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE0(</span><span style="color: #000000;">"</span><span style="color: #000000;">未能创建状态栏\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;未能创建</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO:&nbsp;如果不需要工具栏可停靠，则删除这三行</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);<br>&nbsp;&nbsp;&nbsp;&nbsp;EnableDocking(CBRS_ALIGN_ANY);<br>&nbsp;&nbsp;&nbsp;&nbsp;DockControlBar(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">m_wndToolBar);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">切换View&nbsp;&nbsp;&nbsp;切换视图</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;CMainFrame::SwitchToView(eView&nbsp;nView)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;CRect&nbsp;rect;<br>&nbsp;&nbsp;&nbsp;&nbsp;CCreateContext&nbsp;context;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">rect);<br>&nbsp;&nbsp;&nbsp;&nbsp;CView</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pOldView&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(CView</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;)m_wndSplitter.GetPane(</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;CDocument</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pDoc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(CDocument</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;)pOldView</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetDocument();<br>&nbsp;&nbsp;&nbsp;&nbsp;context.m_pCurrentDoc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pDoc;<br>&nbsp;&nbsp;&nbsp;&nbsp;context.m_pCurrentFrame&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;context.m_pNewDocTemplate&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pDoc</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetDocTemplate();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">switch</span><span style="color: #000000;">&nbsp;(nView)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">case</span><span style="color: #000000;">&nbsp;RED:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context.m_pNewViewClass&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;RUNTIME_CLASS(CTestView2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context.m_pLastView&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pOldView;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_wndSplitter.DeleteView(</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">删除旧的视图</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_wndSplitter.CreateView(</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">创建新视图</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CTestView2)&nbsp;,&nbsp;CSize(</span><span style="color: #000000;">100</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">100</span><span style="color: #000000;">)&nbsp;,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">context);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">case</span><span style="color: #000000;">&nbsp;BLACK:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context.m_pNewViewClass&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;RUNTIME_CLASS(COutBarStyleView);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context.m_pLastView&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pOldView;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_wndSplitter.DeleteView(</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">删除旧的视图</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_wndSplitter.CreateView(</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">创建新视图</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(COutBarStyleView)&nbsp;,&nbsp;CSize(</span><span style="color: #000000;">100</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">100</span><span style="color: #000000;">)&nbsp;,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">context);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;m_wndSplitter.RecalcLayout();&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_wndSplitter.SetActivePane(</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">);&nbsp;<br>}<br></span></div>
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;CMainFrame&nbsp;消息处理程序</span><span style="color: #008000;"><br></span><span style="color: #000000;">BOOL&nbsp;CMainFrame::OnCreateClient(LPCREATESTRUCT&nbsp;lpcs,&nbsp;CCreateContext</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pContext)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;创建切分窗口</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">m_wndSplitter.CreateStatic(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">m_wndSplitter.CreateView(</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;RUNTIME_CLASS(COutBarView),&nbsp;CSize(</span><span style="color: #000000;">100</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">100</span><span style="color: #000000;">),&nbsp;pContext)&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">!</span><span style="color: #000000;">m_wndSplitter.CreateView(</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;RUNTIME_CLASS(COutBarStyleView),&nbsp;CSize(</span><span style="color: #000000;">100</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">100</span><span style="color: #000000;">),&nbsp;pContext))<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_wndSplitter.DestroyWindow();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;TRUE;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">此处必须返回TRUE才能分割窗口</span><span style="color: #008000;"><br></span><span style="color: #000000;">}</span></div>
<br><img src ="http://www.cppblog.com/lijiakxl/aggbug/96388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijiakxl/" target="_blank">李佳</a> 2009-09-16 10:22 <a href="http://www.cppblog.com/lijiakxl/archive/2009/09/16/96388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>这段时间项目总结  总结一下代码</title><link>http://www.cppblog.com/lijiakxl/archive/2009/09/11/95935.html</link><dc:creator>李佳</dc:creator><author>李佳</author><pubDate>Fri, 11 Sep 2009 08:06:00 GMT</pubDate><guid>http://www.cppblog.com/lijiakxl/archive/2009/09/11/95935.html</guid><wfw:comment>http://www.cppblog.com/lijiakxl/comments/95935.html</wfw:comment><comments>http://www.cppblog.com/lijiakxl/archive/2009/09/11/95935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lijiakxl/comments/commentRss/95935.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lijiakxl/services/trackbacks/95935.html</trackback:ping><description><![CDATA[一<br>数据库操作&nbsp; <br>m_pConn-&gt;Execute((_bstr_t)strSQL , &amp;index , 1);
<br>第二个参数的值是影响的行数<br>有了这个&nbsp; 就可以在Update数据库的记录的时候不用先Select查看是否存在数据而执行两条SQL语句影响服务器的效率了<br><br>二<br>捕获ADO的数据库操作的异常<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">catch</span><span style="color: #000000;">(_com_error&nbsp;e)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::AfxMessageBox(e.Description()&nbsp;,&nbsp;MB_OK);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
三&nbsp; <br>将double类型的时间转换成时间字符串<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">CString&nbsp;strGPSTime;<br>&nbsp;&nbsp;&nbsp;&nbsp;COleDateTime&nbsp;GPStime(GPSDate.gpsTime);<br>&nbsp;&nbsp;&nbsp;&nbsp;strGPSTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GPStime.Format(</span><span style="color: #000000;">"</span><span style="color: #000000;">%Y-%m-%d&nbsp;%H:%M:%S</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">GPS时间</span></div>
四<br>小技巧 在MFC的编辑框显示信息的时候&nbsp; 我以前一般都是 直接<br>m_strMsg += "提示信息:";<br>这样会出现往下拖&nbsp; 很烦人&nbsp;&nbsp; <br>今天刚想到一个小技巧<br>在插入信息的时候 我们可以插入到头部去&nbsp; 这样就不会滚动 我们看到的就是最新的信息了<br>m_strMsg.Insert(0 , "信息提示:");<br><br>//10.22 新增<br>对话框的巧妙隐藏&nbsp;&nbsp; 不闪屏!<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">隐藏窗口<br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;CFlashThiefDlg::OnWindowPosChanging(WINDOWPOS</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;lpwndpos)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;lpwndpos</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">flags&nbsp;</span><span style="color: #000000;">&amp;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">~</span><span style="color: #000000;">SWP_SHOWWINDOW;<br>&nbsp;&nbsp;&nbsp;&nbsp;CDialog::OnWindowPosChanging(lpwndpos);&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span></div>
<br>五<br>判断数据库中的一张表是否存在的函数<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">判断一张表是否存在</span><span style="color: #008000;"><br></span><span style="color: #000000;">BOOL IsTableExsist(CString&nbsp;strTableName)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CStringArray&nbsp;arrTableNames;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_RecordsetPtr&nbsp;Recordset&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;m_pConn</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">OpenSchema(adSchemaTables);&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_variant_t&nbsp;&nbsp;&nbsp;l_vDBTableName;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_bstr_t&nbsp;&nbsp;&nbsp;bstrTableType;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">Recordset</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">adoEOF)&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l_vDBTableName&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;Recordset</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetCollect(</span><span style="color: #000000;">"</span><span style="color: #000000;">TABLE_NAME</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bstrTableType&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;Recordset</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetCollect(</span><span style="color: #000000;">"</span><span style="color: #000000;">TABLE_TYPE</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;((bstrTableType&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;(_bstr_t)</span><span style="color: #000000;">"</span><span style="color: #000000;">TABLE</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span><span style="color: #000000;">||</span><span style="color: #000000;">(bstrTableType&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;(_bstr_t)</span><span style="color: #000000;">"</span><span style="color: #000000;">VIEWS</span><span style="color: #000000;">"</span><span style="color: #000000;">))&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arrTableNames.Add((</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">)_bstr_t(l_vDBTableName));&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Recordset</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">MoveNext();&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;iCount&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;arrTableNames.GetSize();&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;iCount&nbsp;;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;strName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;arrTableNames[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(strName&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;strTableName)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(_com_error</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;e)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(FALSE);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;str;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str.Format(</span><span style="color: #000000;">"</span><span style="color: #000000;">文件名称:&nbsp;%s&nbsp;\n&nbsp;所在代码行&nbsp;:&nbsp;%d&nbsp;执行SQL语句失败&nbsp;错误原因&nbsp;%s</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;,&nbsp;__FILE__&nbsp;,&nbsp;__LINE__&nbsp;,&nbsp;(LPCSTR)e.Description());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE(str);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox(str);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br>}</span></div>
<br>以后再继续<br><br>  <img src ="http://www.cppblog.com/lijiakxl/aggbug/95935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lijiakxl/" target="_blank">李佳</a> 2009-09-11 16:06 <a href="http://www.cppblog.com/lijiakxl/archive/2009/09/11/95935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>