﻿<?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++博客-chenpingjun1990-文章分类-Cplusplus</title><link>http://www.cppblog.com/chenpingjun1990/category/17611.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 28 Feb 2012 12:37:06 GMT</lastBuildDate><pubDate>Tue, 28 Feb 2012 12:37:06 GMT</pubDate><ttl>60</ttl><item><title>关于指针常量与常量指针</title><link>http://www.cppblog.com/chenpingjun1990/articles/166699.html</link><dc:creator>万川先生</dc:creator><author>万川先生</author><pubDate>Tue, 28 Feb 2012 08:11:00 GMT</pubDate><guid>http://www.cppblog.com/chenpingjun1990/articles/166699.html</guid><wfw:comment>http://www.cppblog.com/chenpingjun1990/comments/166699.html</wfw:comment><comments>http://www.cppblog.com/chenpingjun1990/articles/166699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenpingjun1990/comments/commentRss/166699.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenpingjun1990/services/trackbacks/166699.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个问题我一直很纠结，大一学C语言的时候就没明白过。后来就不记得什么时候就理解了。<br />去年给大一的同学做C语言助教的时候，认真看了相关的内容，给同学讲并且在幻灯片上演示过，当时特别<br />清楚。今天突然又遇到了这个问题，觉得又有点模糊了，很是纠结，上网搜了一下相关内容，自己又写了几<br />行代码验证相关内容。以求记忆深刻，以后还是记不清上自己blog看看也方便。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp; 先根据我个人的理解说一下这个指针常量与常量指针：<br /><div>&nbsp;&nbsp;&nbsp;&nbsp; 常量指针:中心词是指针,表示这是一个指向常量的指针,所指向的内容是不能改变的，这个指针是能改变的，<br />它可以指向其它的变量。定义常量指针的方式：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">ptr;&nbsp;or&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">b;</span></div>&nbsp;&nbsp;&nbsp;&nbsp; 以上两种定义方式是同一个意思。</div>&nbsp;&nbsp;&nbsp;&nbsp; 指针常量:中心词是常量,就是这个指针是个常量,是不能改变的,但是指针所指向的值是可以改变的。<br />&nbsp;定义指针常量的方式：<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">int</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;ptr;</span></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要注意的是,在定义指针常量的时候，必须对指针进行初始化，以上只是为了表示一些定义方式。<br />常量指针可以不必初始化。<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面我将贴上我的代码：<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;argv[])<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">constant&nbsp;pointer&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">5</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;*b&nbsp;=&nbsp;7;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;c&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">7</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">c;<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">b&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;endl;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;pointer&nbsp;constant&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;m&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">5</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;n&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m;<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">7</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;n&nbsp;=&nbsp;&amp;p;</span><span style="color: #008000; "></span><span style="color: #008080; "><br />19 <br /></span><span style="color: #000000; "></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">n&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">n&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;endl;<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&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><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000;">}</span></div>&nbsp;&nbsp;&nbsp;&nbsp; 请先看代码的6-12行，7-8行定义了一个常量a以及一个常量指针b并且指向a. 第9行是注释的，因为修改常量<br />指针所指向的内容是illegal的。而在11行中，改变了这个指针所指向的变量，因为这个是常量指针，指针的值是可以<br />改变的。所以在12行中输出的是c的值，即为7.<br />&nbsp;&nbsp;&nbsp;&nbsp; 看14-21行，15-16行定义了变量m以及一个指针常量n，即这个指针是个常量，不能修改的。17-18行想让指针<br />常量指向p,这是不合法的。而在20行中改变n所指向的内容的值，这是可以的。第21行输出3.<br /><img src ="http://www.cppblog.com/chenpingjun1990/aggbug/166699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenpingjun1990/" target="_blank">万川先生</a> 2012-02-28 16:11 <a href="http://www.cppblog.com/chenpingjun1990/articles/166699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Introduction to FLCK</title><link>http://www.cppblog.com/chenpingjun1990/articles/165567.html</link><dc:creator>万川先生</dc:creator><author>万川先生</author><pubDate>Tue, 14 Feb 2012 07:24:00 GMT</pubDate><guid>http://www.cppblog.com/chenpingjun1990/articles/165567.html</guid><wfw:comment>http://www.cppblog.com/chenpingjun1990/comments/165567.html</wfw:comment><comments>http://www.cppblog.com/chenpingjun1990/articles/165567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenpingjun1990/comments/commentRss/165567.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenpingjun1990/services/trackbacks/165567.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Fast Light Tool Kit ("FLTK", pronounced "fulltick") is a cross-platform C++ GUI toolkit for UNIX<br />&#174;/Linux&#174;(X11), Microsoft&#174;Windows&#174;, and Apple&#174;OS X&#174;.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLTK provides modern GUI functionality without the bloat and supports 3D graphics via OpenGL&#174;and<br />its built-in GLUT emulation. It was originally developed by Mr. Bill Spitzak and is currently maintained<br />by a small group of developers across the world with a central repository in the US.  <img src ="http://www.cppblog.com/chenpingjun1990/aggbug/165567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenpingjun1990/" target="_blank">万川先生</a> 2012-02-14 15:24 <a href="http://www.cppblog.com/chenpingjun1990/articles/165567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC之MFC对话框实例(转)</title><link>http://www.cppblog.com/chenpingjun1990/articles/162970.html</link><dc:creator>万川先生</dc:creator><author>万川先生</author><pubDate>Wed, 28 Dec 2011 02:35:00 GMT</pubDate><guid>http://www.cppblog.com/chenpingjun1990/articles/162970.html</guid><wfw:comment>http://www.cppblog.com/chenpingjun1990/comments/162970.html</wfw:comment><comments>http://www.cppblog.com/chenpingjun1990/articles/162970.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenpingjun1990/comments/commentRss/162970.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenpingjun1990/services/trackbacks/162970.html</trackback:ping><description><![CDATA[<strong>最近，本人赶时髦，装上了一套Visual Studio.net,安装要2213M呢，硬盘上三个盘符总共剩下不足2G的地方了。不过，界面相当的漂亮，且功能强大，值得心慰。我终于可以在类视图上，尽情去看类的基类，以及基类的实现代码了。不仅如此，最好的是那附带的MSDN上所有的VC基础文章都是中文，翻译的比希望出版社的好得没的说。什么文档啊，框加窗口啊，多视图啊，应有尽有。所以建议大家都来用.net的吧，注意是要那七张盘的,三张的是beta版，VC功能不全的。<br /><br />这部分该说一说MFC的具体程序了。因为我用的是.net，所以代码可能会与6.0的略有不同，但也无关紧要，不会妨碍整体结构。我也会小心代码兼容性的。<br /><br />好了，拿起手边的VC吧。跟我一块来看一个基于对话框程序的所有代码吧。<br />如果是6.0的朋友则首先在菜单上选择新建，在工程(Project)选项卡中选中MFC AppWizard，将工程名(Project name)中起名为Dialog，按确定(OK)。在向导第一步中选择基于对话框(Dialog based)，直接按完成(Finish)就可以了。 <br />如果是.net的朋友则在菜单上选择新建-&gt;项目，在项目类型中选择Visual C++项目，在模板中选择MFC应用程序，在名称中输入Dialog，按确定。在应用程序类型中选择基于对话框，后按完成。 <br />于是一个基于对话框程序就做好了。第一次使用MFC的朋友，一定会为之喳舌。自己从零开始编程许久了，也许还不习惯别人为咱们生成代码吧。&#8220;第一映象就是乱&#8221;，这就是我的同学给我的回答。没关系，我们可以一点一点来看和理解VC给我们生成的代码。毕竟，它为我们节省了很多时间来打WindowSDK框架代码。 <br /><br />请打开类视图(ClassView)，如果无误的话，我们可以看到三个类。分别是CAboutDlg, CDialogApp, CDialogDlg这三个类。 其中，CDialogApp是最重要的一个类。双击CDialogApp，打开其定义体。我们会看到它是这么定义的: </strong><pre><strong>class CDialogApp : public CWinApp</strong></pre>
<p><strong>我们可以看到这个类是派生于CWinApp的。在MFC编程中，这种情况很多见，继承类库类来添加自己需要的功能，然后再去使用。在MFC应用程序中，CWinApp就是这样使用的。查一查类库关于CWinApp的描述，是这样的：<br /></strong><font color="#99cc99"><br /><strong>MFC中的主应用程序类封装用于 Windows 操作系统的应用程序的初始化、运行和终止。基于框架生成的应用程序必须有且仅有一个从 CWinApp 派生的类的对象。在创建窗口之前先构造该对象。 <br /><br />CWinApp 是从 CWinThread 派生的，后者表示可能具有一个或多个线程的应用程序的主执行线程。在最新版本的 MFC 中，InitInstance、Run、ExitInstance 和 OnIdle 成员函数实际位于 CWinThread 类中。此处将这些函数作为 CWinApp 成员来探讨，因为探讨所关心的是对象作为应用程序对象而不是主线程的角色。 <br /><br />与用于 Windows 操作系统的任何程序一样，框架应用程序也具有 WinMain 函数。但在框架应用程序中不必编写 WinMain。它由类库提供，并在应用程序启动时调用。WinMain 执行注册窗口类等标准服务。然后它调用应用程序对象的成员函数来初始化和运行应用程序。（可通过重写由 WinMain 调用的 CWinApp 成员函数来自定义 WinMain。） <br /><br />为初始化应用程序，WinMain 调用应用程序对象的 InitApplication 和 InitInstance 成员函数。为运行应用程序的消息循环，WinMain 调用 Run 成员函数。在终止时，WinMain 调用应用程序对象的 ExitInstance 成员函数。</strong></font><br /><br /><strong>上面这段里指的框架应用程序，包括了我们这种对话框应用程序。如MSDN所说，MFC类库已经为我们提供了WinMain函数，而不必我们添加。这就是为什么在MFC程序看不见主函数的原故。请看这句话&#8220;<font color="#99cc99">基于框架生成的应用程序必须有且仅有一个从 CWinApp 派生的类的对象。在创建窗口之前先构造该对象。</font>&#8221; 打开类视图的全局(Glotbals),会发现有一个theApp全局变量(或对象，我总觉得变量与对象可以归为一类，应该有一个统一的名称来讲)。双击它，就可以看到CDialogApp theApp这样的定义。因为全局变量和对象在程序中是最先被创建的，于是保证了在创建窗口之前构造一个CWinApp对象(因为CDialogApp派生于CWinApp，所以theApp也是一个CWinApp对象)。这个全局对象是非常有用，因为CWinApp本身集成了所有的程序资源WinAPI，我们可以使用它来取得程序的资源(如图标，图像，预定义字符串等等)。一般要取得此全局对象，不直接使用theApp，而是调用::AfxGetApp()来取得这个全局对象的指针。<br /><br />MFC默认的主函数，会先调用theApp对象的InitApplication和InitInstance成员函数，来进行程序的初始化，在程序中一般只重写InitInstance函数。然后，建立一个消息循环，不同的是在循环不停地调用theApp的Run成员函数。当收到WM_QUIT后，退出while循环。最后，执行theApp的ExitInstance成员函数，从而结束整个应用程序。<br />让我们在类视图(Class View)中展开CDialogApp类(点击那个+符号)，我们可以看到CDialogApp重写了InitInstance()函数。它用于对应用程序主线程进行初始化。双击视图中的InitInstance()来查看此函数的定义。我这里的函数定义如下:<br /></strong></p><pre><strong>000:BOOL CDialogApp::InitInstance()
001:{
002: // 如果一个运行在 Windows XP 上的应用程序代码指定要
003: // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式，
004: //则需要 InitCommonControls()。否则，将无法创建窗口。
005: InitCommonControls();
006:
007: CWinApp::InitInstance(); //调用父类的InitInstance来进行默认的初始化
008:
009: AfxEnableControlContainer();
010:
011:
012: CDialogDlg dlg; //建立一个对话框对象，CDialogDlg是我们自定义的对话框类
013: m_pMainWnd = &amp;dlg; //将本线程(即程序主线程)的主窗口设置为这个对话框
014: INT_PTR nResponse = dlg.DoModal(); //有模式地显示这个对话框，直到对话框关闭
015: if (nResponse == IDOK) //如果对话框是用确定来关闭的，则
016: {
017: // TODO：在此放置处理用&#8220;确定&#8221;来关闭
018: //对话框的代码
019: }
020: else if (nResponse == IDCANCEL) //如果对话框是用取消来关闭的，则
021: {
022: // TODO：在此放置处理用&#8220;取消&#8221;来关闭
023: //对话框的代码
024: }
025:
026: // 由于对话框已关闭，所以将返回 FALSE 以便退出应用程序，
027: // 而不是启动应用程序的消息泵。
028: return FALSE;
029:}</strong></pre>
<p><strong>因为InitInstance()函数的结束返回值是false，应用程序将会立即退出。也就是只显示对话框，当对话框关闭后，程序就会结束了。这时候的InitInstance函数就有点主函数的味道了。 <br />下面，我们再来看看CDialogDlg类的定义,它是派生于CDialog的。它重写了以下函数 </strong></p><pre><strong>CDialogDlg(CWnd* pParent = NULL); 自定义的构造函数
virtual BOOL OnInitDialog(); 对话框初始化消息操作函数
afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 系统菜单消息响应函数
afx_msg void OnPaint(); 对话框重绘响应函数
afx_msg HCURSOR OnQueryDragIcon(); 最小化图标询问响应函数</strong></pre>
<p><strong>另外，要注意的是在CDialogDlg类的定义体中有这么一个枚举的定义: </strong></p><pre><strong>enum { IDD = IDD_DIALOG_DIALOG };</strong></pre>
<p><strong>它表明这个CDialogDlg类使用的对话框模板是IDD_DIALOG_DIALOG。<br />CDialogDlg派生层次如下</strong></p>
<p><strong>CDialogDlg=&gt;CDialog=&gt;CWnd=&gt;CCmdTarget=&gt;CObject<br />先来看看构造函数： </strong></p><pre><strong>CDialogDlg::CDialogDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDialogDlg::IDD/*这个IDD就是那个枚举的值*/, pParent)
{
 m_hIcon = AfxGetApp()-&gt;LoadIcon(IDR_MAINFRAME);
}</strong></pre>
<p><strong>在这个函数中首先，调用父类CDialog的构造函数来完成默认构造操作。其次，它使用AfxGetApp函数取得全局CWinApp对象theApp的指针，并使用它的LoadIcon函数来取得程序中IDR_MAINFRAME图标资源，并赋给成员变量m_hIcon。这个图标可以在资源视图的ICON中可以的查到和设定。 <br />在CDialogDlg的实现文件CDialogDlg.cpp中，可以找到如下一段语句</strong></p><pre><strong>BEGIN_MESSAGE_MAP(CDialogDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()</strong></pre>
<p><strong>这是一段消息映射宏定义段。表示这个对话框类可以响应WM_SYSCOMMAND ,WM_PAINT,WM_QUERYDRAGICON消息。它们的响应函数，系统默认分别为OnSysCommand,OnPaint,OnQueryDragIcon。这段的意思是说，如果CDialogDlg类的对话框接收到WM_SYSCOMMAND消息，就会调用OnSysCommand。其它消息以此为例。<font color="#ff0000">不过，这些响应段一般是用不着我们自己手动添写的，是由系统来管理的。你如果要分析一个MFC程序代码，这一块是一个很好的切入点，可以清楚的看到这个程序到底都可以响应什么消息，都有些什么功能。</font>以上这些宏都可以在MSDN中查到。 <br />下面，我们来一个对于对话框非常重要的函数OnInitDialog(),顾名思义这是一个对话框的初始化函数。在对话框创建之后，第一次显示之前调用。 </strong></p><pre><strong>BOOL CDialogDlg::OnInitDialog()
{
 CDialog::OnInitDialog(); //执行父类默认的初始化对话框操作
 // IDM_ABOUTBOX 必须在系统命令范围内。
 ASSERT((IDM_ABOUTBOX &amp; 0xFFF0) == IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX &lt; 0xF000);
 // 将\&#8220;关于...\&#8221;菜单项添加到系统菜单中。
 CMenu* pSysMenu = GetSystemMenu(FALSE); //取得此对话框系统菜单的CMenu对象指针，并赋给pSysMenu;
 if (pSysMenu != NULL) //如果不为空，则
 {
  CString strAboutMenu; //声明一个字符串对象
  strAboutMenu.LoadString(IDS_ABOUTBOX); //取得资源IDS_ABOUTBOX预定义字符串，可以
  //在资源视图中的String Table查到和设定这个预定义字符串
  if (!strAboutMenu.IsEmpty()) //如果不为空，则
  {
   pSysMenu-&gt;AppendMenu(MF_SEPARATOR); //向菜单添加一个分隔符
   pSysMenu-&gt;AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 
   //向菜单添加这个字符串，并将消息ID设为IDM_ABOUTBOX
  }
 }
 // 设置此对话框的图标。当应用程序主窗口不是对话框时，框架将自动
 // 执行此操作
 SetIcon(m_hIcon, TRUE); // 设置大图标
 SetIcon(m_hIcon, FALSE); // 设置小图标
 // TODO：在此添加额外的初始化代码
 return TRUE; // 除非设置了控件的焦点，否则应该返回 TRUE
}</strong></pre>
<p><strong>以上，就是这个基于对话框的MFC应用程序的基础代码。现在可以直接编译运行，来查看效果。 下面，我将在这些代码的基础上来添加功能，来实现一个复制文件的程序。 首先，我要在资源视图的Dialog中，修改IDD_DIALOG_DIALOG模板: 我首先将对话框模板上面的所有按钮和静态文本全部删掉，添加两个文本框和四个按钮。如果要修改控件的ID值，则要右击控件，点选属性，在ID框中输入任意的ID字符串即可。基本布局如下: <br /><img src="http://www.vckbase.com/document/journal/vckbase16/images/DlgResEdit.gif" width="410" height="230"  alt="" /><br />注:粗体字代表该控件的ID值。 <br /><br />如果想向CDialogDlg类添加按钮事件， 有两种简单的方法。第一种在模板设计中，双击按钮，按确定后，即添加该按钮单击事件。另一种方法是使用向导(在.NET中是在CDialog类的属性对话框中的事件栏中添加)，首先在视图(View)菜单中选择类向导(ClassWizard)，弹出类向导对话框，在类名(ClassName)下拉框中选择我们的要添加事件的类CDialogDlg。对象ID(Object ID)列表框中选择控件的ID，在消息(Messages)列表框中选择要添加的事件，按添加函数钮(Add Function)即可。<br /><br />将四个按钮分别添加单击事件，系统会为我们自动命名成员函数。如果无误的话，分别是OnBnClickedCancel();OnBnClickedCopy();OnBnClickedSrbrowse();OnBnClickedTrbrowse();因为我用的是.NET, 可能会与6.0生成的函数名略有不同。在添加完事件后，你最好去看看上面所提到过的消息映射宏有什么变化，是否能够读懂它们。<br />首先在OnBnClickedCancel()函数中添加这么一行语句： </strong></p><pre><strong>this-&gt;EndDialog(IDCANCEL);</strong></pre>
<p><strong>这行语句的作用是关闭当前的对话框，并以IDCANCEL返回，表明用户是用取消来关闭对话框的。这是CDialog类的一个方法。我们期望如果点击了取消按钮，则关闭当前的对话框。<br />我们再来处理一下浏览按钮的功能。我期望可以弹出一个选择文件的对话框，来选择源文件和目标文件，并把文件名显示在文本框里。这个文件对话框刚好在MFC类库有所定义，我们可以直接拿来使用。首先，我们必须在CDialogDlg类的实现文件CDialogDlg.cpp的头几行添加一个含包头文件 </strong></p><pre><strong>#include &lt;afxdlgs.h&gt;</strong></pre>
<p><strong>然后，在源文件浏览按钮(ID_SRBROWSE)的响应函数OnBnClickedSrbrowse里添加如下语句： </strong></p><pre><strong>CFileDialog Open(true/*如果为真则对话框为打开对话框，为否则为保存对话框*/, 
"" /*默认后缀名*/, 
"" /*默认文件名*/, 
0 /*对话框风格*/, 
"All File|*.*|", 
this /*父窗口指针*/);

CString strFilePath;
if (Open.DoModal() == IDOK) //有模式地显示对话框，如果返回确定则代表有文件选择，则
{
 strFilePath = Open.GetPathName(); //取得文件路径字符串
 SetDlgItemText (IDC_SOURCE, strFilePath); //将ID为IDC_SOURCE的控件的文本设为该字符串
}</strong></pre>
<p><strong>要说明的，CString是MFC的字符串类，在形式上可以当成字符数组。而且还可以像VB的字符串一样使用，直接进行字符串赋值。<br />还有就是SetDlgItemText，这是CWnd类的一个方法，功能是将改变当前窗口的某控件的文本。这个控件可以是按钮、文本框、静态文本、下拉列表框等等。其第一个参数是该控件的ID，第二个参数是以0结尾的字符串。<br />以这个函数类推，可以将目标浏览按钮的功能代码写成如下:</strong></p><pre><strong>CFileDialog Save(false /**/,
"" /*默认后缀名*/, 
"" /*默认文件名*/,
0 /*对话框风格*/, 
"All File|*.*|", 
this /*父窗口指针*/);
CString strFilePath;
if (Save.DoModal() == IDOK)
{
 strFilePath = Save.GetPathName();
 SetDlgItemText (IDC_TARGET, strFilePath);
}</strong></pre>
<p><strong>最后，我们再来完成复制按钮的功能。在单击事件响应函数OnBnClickedTrbrowse中添加如下代码: </strong></p><pre><strong>CString strSource,strTarget;
GetDlgItemText (IDC_SOURCE, strSource); //取得ID名为IDC_SOURCE控件的文本
GetDlgItemText (IDC_TARGET, strTarget); //取得ID名为IDC_TARGET控件的文本
if (CopyFile (strSource, strTarget, false)) //复制文件，如果返回为真表示成功，则
{
 MessageBox ("复制成功!", "报告", MB_OK); //弹出一个确定框
}</strong></pre>
<p><strong>这里要解释的是GetDlgItemText，它也是CWnd的一个方法，是SetDlgItemText的反过程，用于取得窗口上某个控件的文本。CopyFile是WinAPI，它用于进行文件的复制，第一个参数是表示源文件名的字符串，第二个参数是表示目标文件名的字符串。如果成功的话则返回真。CWnd::MessageBox函数用于显示一个消息框，第一个参数是消息文本，第二个参数是标题文本，第三个参数是消息框种类，这里是MB_OK确定框，还可以是MB_YESNO是否框等等，以上这些可以在MSDN中查到。 <br />这样，一个简单的基于对话框MFC小程序就做好了。不难吧？也相信诸位看官，已经对MFC的编程方法有一些了解了吧。<br />如果你想MFC编程变得更得心应手，非常非常建议你经常性的去查阅Visual Studio附带的MSDN，并且能够掌握查找MSDN的技巧，那样会使你的工作变得事半功倍。<br /></strong></p><img src ="http://www.cppblog.com/chenpingjun1990/aggbug/162970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenpingjun1990/" target="_blank">万川先生</a> 2011-12-28 10:35 <a href="http://www.cppblog.com/chenpingjun1990/articles/162970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于大小端</title><link>http://www.cppblog.com/chenpingjun1990/articles/162939.html</link><dc:creator>万川先生</dc:creator><author>万川先生</author><pubDate>Tue, 27 Dec 2011 12:27:00 GMT</pubDate><guid>http://www.cppblog.com/chenpingjun1990/articles/162939.html</guid><wfw:comment>http://www.cppblog.com/chenpingjun1990/comments/162939.html</wfw:comment><comments>http://www.cppblog.com/chenpingjun1990/articles/162939.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenpingjun1990/comments/commentRss/162939.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenpingjun1990/services/trackbacks/162939.html</trackback:ping><description><![CDATA[<p class="headline-2 bk-sidecatalog-title"><span style="font-family: Arial" class="headline-content">大端模式：</span><span style="font-family: Arial">所谓的大端模式，是指数据的高位，保存在内存的低地址中，而数据的低位，保存在内存的高地址中。</span></p>
<p class="headline-2 bk-sidecatalog-title"><span style="font-family: Arial">小端模式：</span><span style="font-family: Arial">所谓的小端模式，是指数据的高位保存在内存的高</span><a href="http://baike.baidu.com/view/494802.htm" target="_blank"><font color="#136ec2"><span style="font-family: Arial">地址</span></font></a><span style="font-family: Arial">中，而数据的低位保存在内存的低地址中。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------百度百科<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大小端在"计算机组成原理"以及"编译原理"课上老师都有提及,而且我已经多次写程序验证自己使用的机器<br />是大段还是小端。但是每次看到都感觉有点陌生，因而在这写出来以加深自己的印象。<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img style="width: 460px; height: 129px" border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/chenpingjun1990/lbendiassn.png" width="460" height="129" /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如上图：如何在程序中定义了一个union<br />union<br />{<br />&nbsp;unsigned char ch[2];<br />&nbsp;short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sh;<br />}byteorder;<br />并给byteorder.sh赋值为0x1234;&nbsp;根据大小端的定义，<br />如果0x004472c0(低地址）中保存的是0x34(数据低位),而0x004472c1(高地址)中保存的是0x12（数据高位）.则为小段模式.<br />如果0x004472c0(低地址）中保存的是0x12(数据高位),而0x004472c1(高地址)中保存的是0x34（数据低位）.则为大段模式.<br /><br />测试代码为：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">iostream</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />union<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_48_91_Open_Image" onclick="this.style.display='none'; Codehighlighter1_48_91_Open_Text.style.display='none'; Codehighlighter1_48_91_Closed_Image.style.display='inline'; Codehighlighter1_48_91_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_48_91_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_48_91_Closed_Text.style.display='none'; Codehighlighter1_48_91_Open_Image.style.display='inline'; Codehighlighter1_48_91_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_48_91_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_48_91_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;ch[</span><span style="color: #000000">2</span><span style="color: #000000">];<br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sh;<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000">byteorder;<br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><br /></span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;argc,&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;argv[])<br /></span><span style="color: #008080">11</span><span style="color: #000000"><img id="Codehighlighter1_137_397_Open_Image" onclick="this.style.display='none'; Codehighlighter1_137_397_Open_Text.style.display='none'; Codehighlighter1_137_397_Closed_Image.style.display='inline'; Codehighlighter1_137_397_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_137_397_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_137_397_Closed_Text.style.display='none'; Codehighlighter1_137_397_Open_Image.style.display='inline'; Codehighlighter1_137_397_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_137_397_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_137_397_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;byteorder.sh&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0x1234</span><span style="color: #000000">;<br /></span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">0x34</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;byteorder.ch[</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0x12</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;byteorder.ch[</span><span style="color: #000000">1</span><span style="color: #000000">])<br /></span><span style="color: #008080">14</span><span style="color: #000000"><img id="Codehighlighter1_221_250_Open_Image" onclick="this.style.display='none'; Codehighlighter1_221_250_Open_Text.style.display='none'; Codehighlighter1_221_250_Closed_Image.style.display='inline'; Codehighlighter1_221_250_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_221_250_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_221_250_Closed_Text.style.display='none'; Codehighlighter1_221_250_Open_Image.style.display='inline'; Codehighlighter1_221_250_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_221_250_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_221_250_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">小端模式</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;endl;<br /></span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">0x12</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;byteorder.ch[</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0x34</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;byteorder.ch[</span><span style="color: #000000">1</span><span style="color: #000000">])<br /></span><span style="color: #008080">18</span><span style="color: #000000"><img id="Codehighlighter1_315_344_Open_Image" onclick="this.style.display='none'; Codehighlighter1_315_344_Open_Text.style.display='none'; Codehighlighter1_315_344_Closed_Image.style.display='inline'; Codehighlighter1_315_344_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_315_344_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_315_344_Closed_Text.style.display='none'; Codehighlighter1_315_344_Open_Image.style.display='inline'; Codehighlighter1_315_344_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_315_344_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_315_344_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">19</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">大端模式</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;endl;<br /></span><span style="color: #008080">20</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">21</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br /></span><span style="color: #008080">22</span><span style="color: #000000"><img id="Codehighlighter1_353_383_Open_Image" onclick="this.style.display='none'; Codehighlighter1_353_383_Open_Text.style.display='none'; Codehighlighter1_353_383_Closed_Image.style.display='inline'; Codehighlighter1_353_383_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_353_383_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_353_383_Closed_Text.style.display='none'; Codehighlighter1_353_383_Open_Image.style.display='inline'; Codehighlighter1_353_383_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_353_383_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_353_383_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">23</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cerr&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">error</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;endl;<br /></span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">25</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /></span><span style="color: #008080">26</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&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><span style="color: #008080">27</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>
<p class="headline-2 bk-sidecatalog-title"><br /><br /><br /><br /></span>&nbsp;</p><img src ="http://www.cppblog.com/chenpingjun1990/aggbug/162939.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenpingjun1990/" target="_blank">万川先生</a> 2011-12-27 20:27 <a href="http://www.cppblog.com/chenpingjun1990/articles/162939.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>计算机如何算加法</title><link>http://www.cppblog.com/chenpingjun1990/articles/162935.html</link><dc:creator>万川先生</dc:creator><author>万川先生</author><pubDate>Tue, 27 Dec 2011 10:36:00 GMT</pubDate><guid>http://www.cppblog.com/chenpingjun1990/articles/162935.html</guid><wfw:comment>http://www.cppblog.com/chenpingjun1990/comments/162935.html</wfw:comment><comments>http://www.cppblog.com/chenpingjun1990/articles/162935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenpingjun1990/comments/commentRss/162935.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenpingjun1990/services/trackbacks/162935.html</trackback:ping><description><![CDATA[<p>题目：实现int add(int a, int b)方法，实现a和b的和，但是内部不允许使用+-*/等算术运算<br />分析：不能使用+-*/等算术运算，那么能马上想到的肯定就是&gt;&gt; &lt;&lt; &amp; |等位运算符，加法实际上可分成两个部分：<br />无进位加法以及进位。而无进位加法可以用^(异或）实现，进位可以用&amp;(与)以及&lt;&lt;实现。这样我们可以一下公式：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;a+b = (a^b) + (a&amp;b)&lt;&lt;1<br />看这个等式，这个过程中还是有加法,怎么解决？递归即可,而结束条件则为其中某一项等于零时。<br />但是应该判断哪一项为零时递归结束，看一下说明：<br />在a = 0, b = 7时,a=a^b =7, b=(a&amp;b)&lt;&lt;1= 0;<br />而a = 7, b = 0时,a=a^b =7, b=(a&amp;b)&lt;&lt;1= 0;<br />由上例可以看出（a&amp;b)&lt;&lt;1更容易趋近于0,而a^b可能永远不会趋近于0.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由以上，可以写出以下代码：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">1</span><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;add(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;b)<br /></span><span style="color: #008080">2</span><span style="color: #000000"><img id="Codehighlighter1_22_88_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_88_Open_Text.style.display='none'; Codehighlighter1_22_88_Closed_Image.style.display='inline'; Codehighlighter1_22_88_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_22_88_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_22_88_Closed_Text.style.display='none'; Codehighlighter1_22_88_Open_Image.style.display='inline'; Codehighlighter1_22_88_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_22_88_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_22_88_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">3</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">0</span><span style="color: #000000">==</span><span style="color: #000000">b)&nbsp;<br /></span><span style="color: #008080">4</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;a;<br /></span><span style="color: #008080">5</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br /></span><span style="color: #008080">6</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;add(a</span><span style="color: #000000">^</span><span style="color: #000000">b,(a</span><span style="color: #000000">&amp;</span><span style="color: #000000">b)</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">1</span><span style="color: #000000">);<br /></span><span style="color: #008080">7</span><span style="color: #000000"><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>
<p><br /><br /><br />&nbsp;</p><img src ="http://www.cppblog.com/chenpingjun1990/aggbug/162935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenpingjun1990/" target="_blank">万川先生</a> 2011-12-27 18:36 <a href="http://www.cppblog.com/chenpingjun1990/articles/162935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>unresolved external symbol __iob(转)</title><link>http://www.cppblog.com/chenpingjun1990/articles/162860.html</link><dc:creator>万川先生</dc:creator><author>万川先生</author><pubDate>Mon, 26 Dec 2011 09:04:00 GMT</pubDate><guid>http://www.cppblog.com/chenpingjun1990/articles/162860.html</guid><wfw:comment>http://www.cppblog.com/chenpingjun1990/comments/162860.html</wfw:comment><comments>http://www.cppblog.com/chenpingjun1990/articles/162860.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenpingjun1990/comments/commentRss/162860.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenpingjun1990/services/trackbacks/162860.html</trackback:ping><description><![CDATA[unresolved external symbol __iob<br /><br />
<div id="blog_text" class="cnt">
<p>1、缺少libc.lib<br />解决这个问题的方法是去掉链接到libc.lib，具体地点：项目-〉属性-〉配置属性-〉链接器-〉忽略特定库。</p>
<p>这个我是在命令行中加入：/nodefaultlib:libc</p>
<p>2、unresolved external symbol __iob<br />这个__iob找不到的问题费了我大部分的时间。跟踪到 stdio.h文件，发现那里有个关于iob的宏，终于搞定。加入一句话到.cpp文件中：extern "C" { FILE _iob[3] = {__iob_func()[0], __iob_func()[1], __iob_func()[2]}; }</p>
<p>强烈推荐这条，帮我解决了大问题！！</p>
<p>3、NULL iterator<br />STL已经不能有NULL迭代器这么一说了，想想也对，在NULL迭代器上进行++或--之类的是不成立的。</p>
<p>4、结构体默认函数<br />在VC6中，结构体的默认运算符==或者&lt;之类的如果不实现也可以作为STL元素放入list等容器中。但VC8不行了，因为它已经不再为结构体生成缺省的操作符函数。</p>
<p>5、AfxMessageBox</p>
<p>&#8220;AfxMessageBox&#8221;: 2 个重载中没有一个可以转换所有参数类,需要在项目属性-&gt;常规-&gt;字符集-&gt;未设置</p></div><br /><img src ="http://www.cppblog.com/chenpingjun1990/aggbug/162860.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenpingjun1990/" target="_blank">万川先生</a> 2011-12-26 17:04 <a href="http://www.cppblog.com/chenpingjun1990/articles/162860.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++强制类型转换</title><link>http://www.cppblog.com/chenpingjun1990/articles/160953.html</link><dc:creator>万川先生</dc:creator><author>万川先生</author><pubDate>Fri, 25 Nov 2011 02:48:00 GMT</pubDate><guid>http://www.cppblog.com/chenpingjun1990/articles/160953.html</guid><wfw:comment>http://www.cppblog.com/chenpingjun1990/comments/160953.html</wfw:comment><comments>http://www.cppblog.com/chenpingjun1990/articles/160953.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenpingjun1990/comments/commentRss/160953.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenpingjun1990/services/trackbacks/160953.html</trackback:ping><description><![CDATA[<div align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C++强制类型转换<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;From C++ Primer 中文版（第四版）158-160 <br />&nbsp;&nbsp;&nbsp;&nbsp; 显示转换（explicit conversion)也称强制类型转换,主要包括一下四种强制类型转换操作符：<br />static_cast dynamic_cat const_cast 以及 reinterpret_cast.<br />&nbsp;&nbsp;&nbsp;&nbsp; 强制类型转换的一般格式 cast_name&lt;type&gt;(expression)<br />1. static_cast<br />&nbsp;&nbsp;&nbsp;&nbsp;编译器隐式执行的任何类型转换都可以由static_cast显示完成：<br />强制类型转换告诉程序的读者和编译器：我们并不关心潜在的精度损失。对于从一个较大的算术类型到一个<br />较小类型的赋值，编译器通常会产生警告。当我们显示提供强制类型转换时，警告信息就会被关闭。<br />&nbsp;&nbsp; ex. double d = 97.0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char ch = static_cast&lt;char&gt;(d);<br />2.dynamic_cast<br />&nbsp;&nbsp;&nbsp; dynamic_cast支持运行时识别指针或引用所指向的对象。<br />3.const_cast<br />&nbsp;&nbsp;&nbsp; 添加或者删除const特性。<br />&nbsp;&nbsp; ex. const char *pc_str;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *pc = string_copy(const_cast&lt;char *&gt;(pc_str));<br />4.reinterpret_cast<br />&nbsp;&nbsp;&nbsp; reinterpret_cast通常为操作数的位模式提供较低层次的重新解释。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 强制类型转换关闭或者挂起了正常的类型检查。强烈建议程序员避免使用强制类型转换，不依赖强制类型转换也能<br />写出很好的C++程序。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每次使用强制类型转换前，程序员应该仔细考虑是否还有其他不同的方法可以达到同一目的。如果非强制转换不可，<br />则应限制转换值的作用域，并且记录所有假定涉及的类型，这样能减少错误发生的机会。<br /></div><img src ="http://www.cppblog.com/chenpingjun1990/aggbug/160953.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenpingjun1990/" target="_blank">万川先生</a> 2011-11-25 10:48 <a href="http://www.cppblog.com/chenpingjun1990/articles/160953.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows下svn客户端TortoiseSVN的安装和操作(转)</title><link>http://www.cppblog.com/chenpingjun1990/articles/159200.html</link><dc:creator>万川先生</dc:creator><author>万川先生</author><pubDate>Thu, 27 Oct 2011 01:36:00 GMT</pubDate><guid>http://www.cppblog.com/chenpingjun1990/articles/159200.html</guid><wfw:comment>http://www.cppblog.com/chenpingjun1990/comments/159200.html</wfw:comment><comments>http://www.cppblog.com/chenpingjun1990/articles/159200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenpingjun1990/comments/commentRss/159200.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenpingjun1990/services/trackbacks/159200.html</trackback:ping><description><![CDATA[完成了<a href="http://jijian91.com/blog20061020/svn-subversion-install-configure.html" target="_blank"><font color="#0066ff">svn服务器的安装配置</font></a>，怎么使用svn呢？在Windows下，最常用的<a href="http://subversion.tigris.org/"><font color="#5b9eff">svn</font></a>客户端是<a href="http://tortoisesvn.net/" target="_blank"><font color="#0066ff">TortoiseSVN</font></a>，有时简称为TSVN。 
<h3>TortoiseSVN安装</h3>
<p>可以从<a href="http://tortoisesvn.tigris.org/" target="_blank"><font color="#0066ff">http://tortoisesvn.tigris.org/</font></a><a href="http://tortoisesvn.net/downloads" target="_blank"></a>下载最新版，目前最新版是TortoiseSVN-1.5.6.14908。</p>
<p>下载后，安装。重启机器，使目录图标生效。</p>
<p>在资源管理器中，鼠标右键点击任意位置，右键菜单中出现&#8220;SVN Checkout&#8221;,即为安装成功。</p>
<h3>svn操作流程</h3>
<p>开发人员使用svn进行开发的一般流程是：<span id="more-40"></span><br /><a href="http://jijian91.com/blog20061215/tortoisesvn.html#checkout"><font color="#0066ff">checkout</font></a>（检出）项目<br />&#8212;&#8212;&gt; 更新文件或目录 &#8212;&#8212;&gt; <a href="http://jijian91.com/blog20061215/tortoisesvn.html#update"><font color="#0066ff">update</font></a><br />&#8212;&#8212;&gt; 修改文件或目录 &#8212;&#8212; <a href="http://jijian91.com/blog20061215/tortoisesvn.html#commit"><font color="#0066ff">commit</font></a>(提交)变更<br />&#8212;&#8212;&gt; 增加文件或目录 &#8212;&#8212;&gt; <a href="http://jijian91.com/blog20061215/tortoisesvn.html#add"><font color="#0066ff">add</font></a>(增加) 文件或目录&#8212;&#8212;&gt; <a href="http://jijian91.com/blog20061215/tortoisesvn.html#commit"><font color="#0066ff">commit</font></a>(提交)<br />&#8212;&#8212;&gt; <a href="http://jijian91.com/blog20061215/tortoisesvn.html#del"><font color="#0066ff">删除</font></a>文件或目录 &#8212;&#8212;&gt; <a href="http://jijian91.com/blog20061215/tortoisesvn.html#commit"><font color="#0066ff">commit</font></a>(提交)上一级目录</p>
<p>其中，checkout只进行一次，update、commit、add操作根据需要会经常使用。</p>
<h4><a title="checkout" name="checkout"></a>checkout(检出)操作</h4>
<p>在资源管理器中，鼠标右键点击任意位置，在菜单中选择&#8221;SVN Checkout&#8221;。</p>
<p>出现对话框，在&#8221;URL of repository:&#8221;中输入svn串，格式是&#8221;<strong>协议://ip:port/版本库/项目/目录</strong>&#8220;。根据实际情况输入，例如http://code.google.com/p/google-web-toolkit/source。如有疑问，向svn服务器管理员询问。</p>
<p>在&#8220;checkout directory&#8221;中输入本地存放代码的目录，请选择空目录或新目录。<span style="color: #ff0000">svn会清空该目录下的一切文件</span>。输入完毕，点击&#8221;ok&#8221;按钮。</p>
<p>如果需要，会提示输入用户名和密码。选上&#8221;Save authentication&#8221;后，以后可以自动登录，不必重输密码。</p>
<p>checkout&#8230;有时候时间会很长。结束，点&#8221;ok&#8221;。</p>
<h4><a title="update" name="update"></a>update(更新)操作</h4>
<p>在资源管理器中，选择本地目录或文件，鼠标右键菜单选择&#8221;SVN Update&#8221;。会提示有无文件需要更新，点&#8221;ok&#8221;完成。</p>
<h4><a title="commit" name="commit"></a>commit(提交)操作</h4>
<p>把本地目录中变化了的文件或目录提交到版本库中，用commit操作。增加新文件或目录，要先用<a href="http://jijian91.com/blog20061215/tortoisesvn.html#add"><font color="#0066ff">add</font></a>，再commit。删除文件或目录，commit上一级目录。</p>
<p>在资源管理器中，选择本地目录或文件，鼠标右键菜单选择&#8221;SVN Commit&#8221;。</p>
<p>显示分上下2个框的界面。在上框输入说明文字，建议写版本号或变更原因，以便将来查找。下框列出提交的内容。没有可提交的内容，下框中会显示一段说明文字。点&#8220;ok&#8221;。</p>
<p>提交结束，显示结果。点&#8220;ok&#8221;。</p>
<h4><a title="conflict" name="conflict"></a>解决代码冲突</h4>
<p>如果commit时出现&#8220;<span style="color: #ff0000">You have to update your work copy first.</span>&#8221;红色警告，说明版本库中的此文件已经被其他人修改了。请先点&#8220;ok&#8221;按钮退出。执行update,然后再commit。</p>
<p>如果修改与update得到的代码不冲突，则自动合并。如果冲突（比如对同一行代码进行了修改），则出现&#8221;<span style="color: #ff0000">One or more files are in a conflicted state.</span>&#8220;红色警告，并产生几个文件记录冲突。一般情况下，我们不要直接编辑冲突文件。而按照以下操作手工解决冲突。</p>
<p>在资源管理器中，选择commit时冲突的那个文件，鼠标右键菜单选择&#8221;Edit conficts&#8221;。</p>
<p>出现界面，分为&#8221;Theirs&#8221;、&#8221;Mine&#8221;和&#8221;Merged&#8221;3部分，表示&#8221;别人修改的内容&#8221;、 &#8221;我修改的内容&#8221;和&#8221;合并后的结果&#8221;3部分。我们是要将&#8221;别人修改的内容&#8221;和&#8221;我修改的内容&#8221;有取舍地合并起来，形成&#8221;合并后的结果&#8221;。</p>
<p>合并一般分为4种情况：</p>
<ul><li>保留&#8221;我的修改&#8221;,舍弃&#8221;别人的修改&#8221;。鼠标右键点击Mine框的相应行，点击&#8221;Use this text block&#8221;。</li><li>舍弃&#8221;我的修改&#8221;,保留&#8221;别人的修改&#8221;。鼠标右键点击Theirs框的相应行，点击&#8221;Use this text block&#8221;。</li><li>同时保留&#8221;我的修改&#8221;和&#8221;别人的修改&#8221;，并将&#8221;我的修改&#8221; 放在前面。鼠标右键点击Mine框的相应行，点击&#8221;Use text block from mine before theirs&#8221;。</li><li>同时保留&#8221;我的修改&#8221;和&#8221;别人的修改&#8221;，并将&#8221;别人的修改&#8221;放在前面。鼠标右键点击Mine框的相应行，点击&#8221;Use text block from theirs before mine&#8221;。 </li></ul>
<p>合并完成，Ctrl+S存盘，退出。</p>
<p>然后，在资源管理器中，选择冲突文件，鼠标右键菜单选择&#8221;Resolved&#8221;,标记冲突已解决。系统会自动删除因冲突而新建的文件。此时，就可以继续进行commit操作了。</p>
<h4><a title="add" name="add"></a>add(增加)操作</h4>
<p>增加新文件或目录，要先用add，再<a href="http://jijian91.com/blog20061215/tortoisesvn.html#commit"><font color="#0066ff">commit</font></a>。</p>
<p>在资源管理器中，选择新增的目录或文件，鼠标右键菜单选择&#8221;Add&#8221;。</p>
<p>提示增加的文件。点&#8220;ok&#8221;继续。结束点&#8220;ok&#8221;。</p>
<h4><a title="del" name="del"></a>删除操作</h4>
<p>删除文件或目录，<a href="http://jijian91.com/blog20061215/tortoisesvn.html#commit"><font color="#0066ff">commit</font></a>上一级目录。</p><img src ="http://www.cppblog.com/chenpingjun1990/aggbug/159200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenpingjun1990/" target="_blank">万川先生</a> 2011-10-27 09:36 <a href="http://www.cppblog.com/chenpingjun1990/articles/159200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC6.0常用控件介绍(转)</title><link>http://www.cppblog.com/chenpingjun1990/articles/159156.html</link><dc:creator>万川先生</dc:creator><author>万川先生</author><pubDate>Wed, 26 Oct 2011 13:30:00 GMT</pubDate><guid>http://www.cppblog.com/chenpingjun1990/articles/159156.html</guid><wfw:comment>http://www.cppblog.com/chenpingjun1990/comments/159156.html</wfw:comment><comments>http://www.cppblog.com/chenpingjun1990/articles/159156.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenpingjun1990/comments/commentRss/159156.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenpingjun1990/services/trackbacks/159156.html</trackback:ping><description><![CDATA[<p align="right"><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: 26px; font-family: Arial; color: rgb(51,51,51); font-size: 14px" class="Apple-style-span"> </p>
<p>*除非特别说明，本文中所用控件变量类型为Control</p>
<p>一般控件可用/不可用</p>
<p>EnableWindow(TRUE);</p>
<p>EnableWindow(FALSE);</p>
<p>&nbsp;</p>
<p><strong>1、Static Text------------静态控件</strong><span class="Apple-converted-space">&nbsp;</span><strong>--类CStatic</strong></p>
<p>取值/赋值(变量类型为Control)</p>
<p>m_lbl.GetWindowText(string);<strong><br /></strong></p>
<p>m_lbl.SetWindowText(string);<strong><br /></strong></p>
<p><strong><br /></strong></p>
<p><strong>2、Edit Box---------------编辑控件</strong><span class="Apple-converted-space">&nbsp;</span><strong>--类CEdit</strong></p>
<p>取值/赋值</p>
<p>m_txt.GetWindowText(string);<strong><br /></strong></p>
<p>m_txt.SetWindowText(string);<strong><br /></strong></p>
<p><strong><br /></strong></p>
<p><strong>3、Check Box------------复选控件</strong><span class="Apple-converted-space">&nbsp;</span><strong>--类CButton</strong></p>
<p>(1)设置选中/未选中</p>
<p>m_chk.SetCheck(BST_CHECKED);&nbsp;&nbsp;&nbsp;</p>
<p>m_chk.SetCheck(BST_UNCHECKED);</p>
<p>(2)判断是否选中</p>
<p>int nCur = m_chk.GetCheck();</p>
<p>nCur取值为 BST_CHECKED/BST_UNCHECKED。</p>
<p><strong><br /></strong></p>
<p><strong>4、Radio Box------------单选控件</strong><span class="Apple-converted-space">&nbsp;</span><strong>--类</strong><span class="Apple-converted-space">&nbsp;</span><strong>CButton</strong></p>
<p>(1)默认选中第一项</p>
<p>m_radio.SetCheck(BST_CHECKED);</p>
<p>(2)选中组中任一项</p>
<p><span id="nsrTitle">CWnd::CheckRadioButton</span></p>
<p>Selects (adds a check mark to) a given radio button in a group and clears (removes a check mark from) all other radio buttons in the group.</p><pre style="word-wrap: break-word; white-space: normal"><strong>void</strong><span class="Apple-converted-space">&nbsp;</span><strong>CheckRadioButton(</strong><strong>int</strong><span class="Apple-converted-space">&nbsp;</span><span class="parameter">nIDFirstButton</span><strong>,</strong><strong><span class="Apple-converted-space">&nbsp;</span>int</strong><span class="Apple-converted-space">&nbsp;</span><span class="parameter">nIDLastButton</span><strong>,</strong><strong><span class="Apple-converted-space">&nbsp;</span>int</strong><span class="Apple-converted-space">&nbsp;</span><span class="parameter">nIDCheckButton</span><strong>);</strong></pre>
<h4 style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" class="subHeading">Parameters</h4>
<dl>
<dt><span class="parameter">nIDFirstButton</span></dt>
<dd>
<p>Specifies the integer identifier of the first radio button in the group.</p></dd></dl>
<dl>
<dt><span class="parameter">nIDLastButton</span></dt>
<dd>
<p>Specifies the integer identifier of the last radio button in the group.</p></dd></dl>
<dl>
<dt><span class="parameter">nIDCheckButton</span></dt>
<dd>
<p>Specifies the integer identifier of the radio button to be checked.</p></dd></dl>
<p>(3)判断哪一项被选中</p>
<p><span id="nsrTitle">CWnd::GetCheckedRadioButton</span></p>
<p>Retrieves the ID of the currently checked radio button in the specified group.</p><pre style="word-wrap: break-word; white-space: normal"><strong>int</strong><span class="Apple-converted-space">&nbsp;</span><strong>GetCheckedRadioButton(</strong><strong>int</strong><span class="Apple-converted-space">&nbsp;</span><span class="parameter">nIDFirstButton</span><strong>,</strong><strong><span class="Apple-converted-space">&nbsp;</span>int</strong><span class="Apple-converted-space">&nbsp;</span><span class="parameter">nIDLastButton</span><strong>);</strong></pre>
<h4 style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" class="subHeading">Parameters</h4>
<dl>
<dt><span class="parameter">nIDFirstButton</span></dt>
<dd>
<p>Specifies the integer identifier of the first radio button in the group.</p></dd></dl>
<dl>
<dt><span class="parameter">nIDLastButton</span></dt>
<dd>
<p>Specifies the integer identifier of the last radio button in the group.</p></dd></dl>
<div id="returnValueSection" class="section">
<p><strong>Return Value</strong></p>
<p>ID of the checked radio button, or 0 if none is selected.</p>
<p>&nbsp;</p></div>
<p>(4)控件变量类型为Value时，可通过给int型变量赋值0、1、2...选中第1、2、3...个选项。</p>
<p>int型变量默认值为-1，是在构造函数中赋的值。</p>
<p>当然也可通过判断int型变量的值，知道哪一个选项被选中。</p>
<p>&nbsp;</p>
<p><strong>5、Combo Box-----------组合框控件</strong><span class="Apple-converted-space">&nbsp;</span><strong>--类CComboBox</strong></p>
<p>(1)风格</p>
<p>Simple-象List Box一样显示数据</p>
<p>Dropdown-可以输入，也可以选择</p>
<p>Drop List-只能选择</p>
<p>(2)添加数据</p>
<p>a.属性对话框-&gt;Data-&gt;Enter listbox items，用Ctrl+Enter换行；</p>
<p>b.m_combo.AddString(string);</p>
<p>c.m_combo.InsertString(index,string);</p>
<p>(3)显示数据</p>
<p>设计页面，点击Combo Box Control右边的下拉箭头，显示的矩形框就是显示数据的区域。</p>
<p>(4)设置当前选项</p>
<p>m_combo.SetCurSel(项索引);</p>
<p>(5)获取当前选项</p>
<p>int nIndex = m_combo.GetCurSel();</p>
<p>CString str;</p>
<p>m_combo.GetLBText(nIndex, str);</p>
<p>&nbsp;</p>
<p><span style="color: rgb(255,0,0)"><strong>注：Combo Box Control会自动排序，数据显示顺序可能与预期不同，建议添加数据时用InsertString(索引,值)。</strong></span></p>
<p>&nbsp;</p>
<p><strong>6、List Box---------------列表框控件</strong><span class="Apple-converted-space">&nbsp;</span><strong>--类CListBox</strong></p>
<p>(1)插入项</p>
<p>m_list.AddString(string);</p>
<p>(2)设置当前选择项</p>
<p>m_list.SetCurSel(项索引);</p>
<p>(3)获取当前选择项</p>
<p>int nIndex = m_list.GetCurSel();</p>
<p>m_list.GetText(nIndex, string);</p>
<p>(4)删除一项</p>
<p>m_list.DeleteString(项索引);</p>
<p>(5)删除所有项</p>
<p>m_list.ResetContent();</p>
<p>(6)获取总项数</p>
<p>m_list.GetCount()</p>
<p>(7)List Box的选项前面加复选框(Check Box)</p>
<p>a.风格</p>
<p>声明时用类CCheckListBox代替CListBox，即CCheckListBox&nbsp;&nbsp; &nbsp;m_list;而不是CListBox&nbsp;&nbsp; &nbsp;m_list;</p>
<p>属性对话框-&gt;Styles-&gt;Owner draw设为Fixed</p>
<p>属性对话框-&gt;Styles-&gt;勾选Has strings</p>
<p>b.设置选择</p>
<p>void SetCheck(int<span class="Apple-converted-space">&nbsp;</span><span class="parameter">nIndex</span>, int<span class="Apple-converted-space">&nbsp;</span><span class="parameter">nCheck</span>);</p>
<p class="subHeading">Parameters</p>
<dl>
<dt><span class="parameter">nIndex</span></dt>
<dd>
<p>Index of the item whose check box is to be set.</p></dd></dl>
<dl>
<dt><span class="parameter">nCheck</span></dt>
<dd>
<p>State of the check box: 0 for clear, 1 for checked, and 2 for indeterminate.</p></dd></dl>
<p>c.获取选择</p>
<p>int GetCheck(int<span class="Apple-converted-space">&nbsp;</span><span class="parameter">nIndex</span>);</p>
<p class="subHeading">Parameters</p>
<dl>
<dt><span class="parameter">nIndex</span></dt>
<dd>
<p>Index of the item whose check status is to be retrieved.</p></dd></dl>
<p class="heading"><span style="cursor: default" onkeypress="ExpandCollapse_CheckKey(returnValueToggle)" onclick="ExpandCollapse(returnValueToggle)">Return Value</span></p>
<p class="section">Zero if the item is not checked, 1 if it is checked, and 2 if it is indeterminate.</p>
<p><strong><br /></strong></p>
<p><strong>7、List Control----------列表框扩展控件</strong><span class="Apple-converted-space">&nbsp;</span><strong>--类CListCtrl</strong></p>
<p>(1)样式：属性对话框框-&gt;Styles-&gt;Format有4，分别是Icon/Small Icon/List/Report；</p>
<p>(2)Report格式设置扩展风格</p>
<p>DWORD dwStyle = m_list.GetExtendedStyle();<br />dwStyle |= LVS_EX_FULLROWSELECT;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 选中某行使整行高亮（只适用与report风格的listctrl）<br />dwStyle |= LVS_EX_GRIDLINES;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 网格线（只适用与report风格的listctrl）<br />m_list.SetExtendedStyle(dwStyle);</p>
<p>(3)Report格式插入列</p>
<p>m_list.InsertColumn(1, "列一", LVCFMT_RIGHT, 150);<br />m_list.InsertColumn(2, "列二", LVCFMT_LEFT, 100);<br />m_list.InsertColumn(3, "列三", LVCFMT_LEFT, 100);<br />m_list.InsertColumn(4, "列四", LVCFMT_LEFT, 200);<br />m_list.InsertColumn(5, "ID", LVCFMT_CENTER, 0);</p>
<p>(4)Report格式插入一行数据</p>
<p>int nIndex = m_list.GetItemCount();<br />m_list.InsertItem(nIndex, s1);<br />m_list.SetItemText(nIndex, 1, s2);<br />m_list.SetItemText(nIndex, 2, s3);<br />m_list.SetItemText(nIndex, 3, s4);<br />m_list.SetItemText(nIndex, 4, s5);</p>
<p>(5)Report格式删除所有行</p>
<p>m_list.DeleteAllItems();</p>
<p>(6)Report格式获取某行某列数据</p>
<p>CString sID = m_list.GetItemText(行索引, 列索引);</p>
<p>(7)Report格式删除选择行，多选时可用循环。</p>
<p>POSITION pos = m_list.GetFirstSelectedItemPosition();<br />if (pos != NULL)<br />{<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; int nIndex = m_list.GetNextSelectedItem(pos);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_list.DeleteItem(nIndex);</p>
<p>}</p>
<p><strong><br /></strong></p>
<p><strong>8、Date Time Picker----日期时间控件--类CDateTimeCtrl</strong></p>
<p>(1)样式：属性对话框框-&gt;Styles-&gt;Format有3，分别是Short Date/Long Date/Time，分别显示短日期(2009-03-12)/长日期(2009年3月12日)/时间(20:08:06)，日期格式默认有一向下箭头，时间格式默认有一Spin Control；</p>
<p>(2)可编程设置其显示格式，例如年4位，月、日、时、分、秒2位，</p>
<p>CString formatStr= _T("yyyy-MM-dd");<br />m_txtDate.SetFormat(formatStr);<br />formatStr= _T("HH:mm:ss");<br />m_txtTime.SetFormat(formatStr);</p>
<p>(3)取值赋给CString</p>
<p>m_txtDate.GetWindowText(sAddDate);<br />m_txtTime.GetWindowText(sAddTime);</p>
<p>&nbsp;</p>
<p><strong>9、Spin------------------旋转按钮控件</strong><span class="Apple-converted-space">&nbsp;</span><strong>--类<span id="nsrTitle">CSpinButtonCtrl</span></strong></p>
<p>(1)与Edit控件关联</p>
<p>首先，排列控件的Tab键顺序，要让Spin Control的Tab Order紧跟着Edit Control（就是说，Spin Control的Tab Order是Edit Control的Tab Order加1）；<span class="oblog_text">设置tab order 的方法是 Ctrl+d，然后用鼠标挨个点击，就是按TAB键时焦点在窗体上的移动顺序；</span><span class="Apple-converted-space">&nbsp;</span><br />然后，Spin Control属性对话框中勾选Auto buddy和Set buddy integer。</p>
<p>(2)设置上下限</p>
<p>m_spin.SetRange(1, 60);</p>
<p>(3)设置当前值，可以不用给Edit控件赋值</p>
<p>m_spin.SetPos(3);</p>
<p>(4)获取当前值</p>
<p>int nCur = m_spin.GetPos();</p>
<p>&nbsp;</p>
<p><strong>10、Slider-----------------滑动条控件--类CSliderCtrl</strong></p>
<p>(1)设置上下限、最小滑动值</p>
<p>m_slider.SetRange(5,100);</p>
<p>m_slider.SetTicFreq(1);</p>
<p>(2)设置/获取当前值</p>
<p>m_slider.SetPos(nCur);</p>
<p>int nCur = m_slider.GetPos();</p>
<p>(3)背景色：重写OnCtlColor()，虽然不知道Slider属于nCtlColor的哪一类，但试验表明似乎是属于CTLCOLOR_STATIC。</p>
<p>HBRUSH CDlgOptionVideo::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)<span class="Apple-converted-space">&nbsp;</span><br />{<br />&nbsp;&nbsp;&nbsp; HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);<br />&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp; // TODO: Change any attributes of the DC here<br />&nbsp;&nbsp;&nbsp; // 设置透明背景模式<br />&nbsp;&nbsp;&nbsp; pDC-&gt;SetBkMode(TRANSPARENT);<br />&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp; // TODO: Return a different brush if the default is not desired<br />&nbsp;&nbsp;&nbsp; switch(nCtlColor)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 设置背景刷子为空<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case CTLCOLOR_STATIC:&nbsp;&nbsp;&nbsp; // 静态控件<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(pWnd-&gt;GetDlgCtrlID() == IDC_SLIDER_TIME)<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return ::CreateSolidBrush(RGB(203, 228, 253));<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case CTLCOLOR_DLG:&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 对话框<span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return (HBRUSH)::GetStockObject(HOLLOW_BRUSH);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; default:<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return hbr;<br />&nbsp;&nbsp;&nbsp; }<br />}</p>
<p align="right"></span></span>&nbsp;</p><img src ="http://www.cppblog.com/chenpingjun1990/aggbug/159156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenpingjun1990/" target="_blank">万川先生</a> 2011-10-26 21:30 <a href="http://www.cppblog.com/chenpingjun1990/articles/159156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++成长之路(转)</title><link>http://www.cppblog.com/chenpingjun1990/articles/159043.html</link><dc:creator>万川先生</dc:creator><author>万川先生</author><pubDate>Tue, 25 Oct 2011 05:15:00 GMT</pubDate><guid>http://www.cppblog.com/chenpingjun1990/articles/159043.html</guid><wfw:comment>http://www.cppblog.com/chenpingjun1990/comments/159043.html</wfw:comment><comments>http://www.cppblog.com/chenpingjun1990/articles/159043.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenpingjun1990/comments/commentRss/159043.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenpingjun1990/services/trackbacks/159043.html</trackback:ping><description><![CDATA[<div id="app-share-content">一、入门：沟通一个观念，手敲代码。<br />A、《C++程序设计》《C++Primer》等，学习语言基础，手敲所有代码，这是扎马步，提升兴趣、成就感，打下扎实的基础，不再浮躁。<br />B、《高质量C/C++编程指南》《华为编程规范》等，规范自己的代码，养成对代码的审美观。<br />C、有步骤有讲解的百例类的书，忘记书带的光盘（把它贴到天花板上），敲所有的例子代码，学会调试，了解VC都能干什么。<br />D、也可以看看视频，比如孙鑫老师的，看看名家怎么编程，怎么用MSDN，如果你也能自己重新手敲一遍代码，你会让我很佩服。因为视频容易让人浮躁，很难静下心敲代码。<br /><br />二、入职：沟通一个观念，学会解决问题。<br />A、MSDN<br />B、搜索引擎<br />C、CSDN、VCKBASE<br />D、codeproject。<br />如果你知道我在说什么和为什么这么排序，那么恭喜你。<br /><br />三、积累：总结知识，建立自己的知识库。<br />A、总结自己遇到的问题，建立自己的知识库和代码库，30秒内能查到。<br />B、总结自己的代码，建立自己的高质量的复用模块、框架。<br /><br />四、学习：你选择了编程，那就意味着不断的学习。<br />A、每日读书，值得。<br />B、扫街。扫CSDN的你需要的版块，扫VCKBASE所有的代码，扫Codeproject上所有你需要的内容，扫过后以后只扫更新。<br /><br />五、提升：沟通一个观念，大局观和眼界<br />A、中小规模的开源代码，你会看到框架、高质量的代码、版本管理、测试机制。<br />B、结合你工作中的需要，分析项目的框架，模块间接口，服务意识，提出自己更好的建议，剩下的事你自己想吧。<br /><br />六、训练：训练自己辩证思维（好坏都想想），反向思维（别人认为是坏事的，你就想这事是个好事，并举出充分的理由来。别人都说好的，你就想如果哪里做不好，可能就变成坏事），勇气（感觉难的，面对它，困难就是纸老虎），逻辑思维，发散思维。相信我，这些是可以通过简单的训练达到一定的效果。</div><img src ="http://www.cppblog.com/chenpingjun1990/aggbug/159043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenpingjun1990/" target="_blank">万川先生</a> 2011-10-25 13:15 <a href="http://www.cppblog.com/chenpingjun1990/articles/159043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>合适的输出数组</title><link>http://www.cppblog.com/chenpingjun1990/articles/154235.html</link><dc:creator>万川先生</dc:creator><author>万川先生</author><pubDate>Wed, 24 Aug 2011 11:05:00 GMT</pubDate><guid>http://www.cppblog.com/chenpingjun1990/articles/154235.html</guid><wfw:comment>http://www.cppblog.com/chenpingjun1990/comments/154235.html</wfw:comment><comments>http://www.cppblog.com/chenpingjun1990/articles/154235.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenpingjun1990/comments/commentRss/154235.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenpingjun1990/services/trackbacks/154235.html</trackback:ping><description><![CDATA[<p>比较合适输出的数组的方式：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">iomanip</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><br />&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;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;arrlength;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;setw(</span><span style="color: #000000">5</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;arr[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;((i</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;</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">0</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span></div>
<p><br />&nbsp;</p><img src ="http://www.cppblog.com/chenpingjun1990/aggbug/154235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenpingjun1990/" target="_blank">万川先生</a> 2011-08-24 19:05 <a href="http://www.cppblog.com/chenpingjun1990/articles/154235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>