﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-渴望飞翔</title><link>http://www.cppblog.com/duguguiyu/</link><description>Fly in the C++ Sky...</description><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 10:12:41 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 10:12:41 GMT</pubDate><ttl>60</ttl><item><title>MFC中制作一个似命令行的输入框</title><link>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34748.html</link><dc:creator>duguguiyu</dc:creator><author>duguguiyu</author><pubDate>Sat, 21 Jul 2007 13:43:00 GMT</pubDate><guid>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34748.html</guid><wfw:comment>http://www.cppblog.com/duguguiyu/comments/34748.html</wfw:comment><comments>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34748.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/duguguiyu/comments/commentRss/34748.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/duguguiyu/services/trackbacks/34748.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt" goog_ds_charIndex="1">在做一个MFC软件的时候有一个这样的需求，就是要有类似与AutoCad的命令输入框，如下图所示：</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="51">&nbsp;</p>
<p style="FONT-SIZE: 10pt" align=center goog_ds_charIndex="52"><img src="http://docs.google.com/File?id=ddwgxw9r_171cd6n7gnz" goog_ds_charIndex="53"></p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="55">本着不重写已有功能的原则，在MFC中发掘了一圈，没发现有可用的现成控件，上网搜了一下，发现有人做过，但竟然还收费出售，so faint，只能自己动手做一个。</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="135">其实思路还是蛮简单的，就是放个Edit控件处理它的键盘输入事件，防止删除之前的记录和提示信息，还要处理结束命令，比如回车、空格之类的。主要有以下几个步骤：</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="214">1. 将输入框内的字符串分段，比如分成三段log, tip和command，前两段都不能被修改，command的内容为可修改的。在结束了command输入后，要同步各字符串，示例代码如下：</p>
<blockquote goog_ds_charIndex="310">
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="311">void CMainFrame::InitCommand(CString tip)<br goog_ds_charIndex="353">{<br goog_ds_charIndex="355">&nbsp;//&nbsp;记录老字符串，类似于UpdateData(true)</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="387">&nbsp;this-&gt;GetText();</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="407">&nbsp;//&nbsp;设置新的log<br goog_ds_charIndex="419">&nbsp;if(this-&gt;m_log != "")<br goog_ds_charIndex="442">&nbsp;&nbsp;this-&gt;m_log += "\r\n";<br goog_ds_charIndex="467">&nbsp;this-&gt;m_log += tip;</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="490">&nbsp;//&nbsp;更新字符串，类似与UpdataData(false)<br goog_ds_charIndex="521">&nbsp;this-&gt;SetText();</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="541">&nbsp;//&nbsp;将光标置于字符串的尾部（否则光标会在一开始的位置）</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="572">&nbsp;((CEdit *)m_commandDialogBar.GetDlgItem(IDC_COMMAND))-&gt;SetSel(this-&gt;m_log.GetLength(), <br goog_ds_charIndex="661">&nbsp;&nbsp;this-&gt;m_log.GetLength());<br goog_ds_charIndex="689">}</p>
</blockquote>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="693">2. 重载PreTranslateMessage事件，处理键盘信息，示例代码如下：</p>
<blockquote goog_ds_charIndex="736">
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="737">&nbsp;BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)<br goog_ds_charIndex="786">{<br goog_ds_charIndex="788">&nbsp;if(pMsg-&gt;message == WM_KEYDOWN)&nbsp;// 处理键盘按下事件<br goog_ds_charIndex="833">&nbsp;{<br goog_ds_charIndex="836">&nbsp;&nbsp;//&nbsp;判断是否是在脚本输入框上输入的</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="858">&nbsp;&nbsp;if(GetFocus() == m_commandDialogBar.GetDlgItem(IDC_COMMAND))<br goog_ds_charIndex="921">&nbsp;&nbsp;{<br goog_ds_charIndex="925">&nbsp;&nbsp;&nbsp;//&nbsp;如果选择的是非正在输入的文字，抛弃这个事件</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="954">&nbsp;&nbsp;&nbsp;DWORD selectedRegion = ((CEdit *)m_commandDialogBar.GetDlgItem(IDC_COMMAND))-&gt;GetSel();<br goog_ds_charIndex="1045">&nbsp;&nbsp;&nbsp;int selectedStart = LOWORD(selectedRegion);<br goog_ds_charIndex="1092">&nbsp;&nbsp;&nbsp;int selectedEnd&nbsp;&nbsp; = HIWORD(selectedRegion);</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="1140">&nbsp;&nbsp;&nbsp;if(selectedStart != selectedEnd &amp;&amp; selectedStart &lt; m_log.GetLength())<br goog_ds_charIndex="1213">&nbsp;&nbsp;&nbsp;&nbsp;return true;</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="1231">&nbsp;&nbsp;&nbsp;if(pMsg-&gt;wParam == 8 &amp;&amp; selectedStart &lt;= m_log.GetLength()) //&nbsp;阻止删除之前的文字<br goog_ds_charIndex="1307">&nbsp;&nbsp;&nbsp;&nbsp;return true;</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="1325">&nbsp;&nbsp;&nbsp;if(pMsg-&gt;wParam == 13 || pMsg-&gt;wParam == 32) //&nbsp;当输入空格或回车是发送消息<br goog_ds_charIndex="1390">&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;SendCommand();<br goog_ds_charIndex="1415">&nbsp;&nbsp;}<br goog_ds_charIndex="1419">&nbsp;}</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="1423">&nbsp;return CMDIFrameWnd::PreTranslateMessage(pMsg);<br goog_ds_charIndex="1472">}</p>
</blockquote>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="1476">其中SendCommand的内容可自定义，处理完成后不要忘记执行1的操作，同步一下字符串就OK。实现效果如下：</p>
<p style="FONT-SIZE: 10pt" align=center goog_ds_charIndex="1533"><img src="http://docs.google.com/File?id=ddwgxw9r_1727cn3nmc7" goog_ds_charIndex="1534"></p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="1536">当然，这是一个最简单的实现，还有很多问题没有处理，比如自定义菜单，屏蔽系统菜单等；还有很多工作可以做，比如封装成一个自定义控件，做更好的显示效果等等。但基本的思路还是一样的，恩，如果谁有更好的实现方案，也欢迎留言，谢谢先：）</p>
<img height=1 src="http://www.cnblogs.com/duguguiyu/aggbug/826901.html" width=1><br><br>
<div align=right><a style="TEXT-DECORATION: none" href="http://duguguiyu.cnblogs.com/" target=_blank>duguguiyu</a> 2007-07-21 21:43 <a style="TEXT-DECORATION: none" href="http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826901.html#Feedback" target=_blank>发表评论</a></div>
<br>文章来源:<a href="http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826901.html">http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826901.html</a> 
<img src ="http://www.cppblog.com/duguguiyu/aggbug/34748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/duguguiyu/" target="_blank">duguguiyu</a> 2007-07-21 21:43 <a href="http://www.cppblog.com/duguguiyu/archive/2007/07/21/34748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC中的字符串转换</title><link>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34749.html</link><dc:creator>duguguiyu</dc:creator><author>duguguiyu</author><pubDate>Sat, 21 Jul 2007 13:04:00 GMT</pubDate><guid>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34749.html</guid><wfw:comment>http://www.cppblog.com/duguguiyu/comments/34749.html</wfw:comment><comments>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34749.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/duguguiyu/comments/commentRss/34749.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/duguguiyu/services/trackbacks/34749.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt" goog_ds_charIndex="1">在VC++中有着一大把字符串类型。从传统的char*到std::string到CString，简直是多如牛毛。期间的转换相信也是绕晕了许多的人，我曾就是其中的一个。还好，MS还没有丧失功德心，msdn的一篇文章详细的解析了各种字符串的转换问题，链接如下：<a href="http://msdn2.microsoft.com/zh-cn/library/ms235631(VS.80).aspx" goog_ds_charIndex="129"><font color=#551a8b>http://msdn2.microsoft.com/zh-cn/library/ms235631(VS.80).aspx</font></a>。</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="194">参照这篇文章，可以搞定同码制的字符串转换，如果有unicode到非unicode的转换问题，还需要另寻高招。我通常就是归一化，把工程属性--&gt;General中的Character set统一选为no set或unicode。每每此时，我都会出奇的想念C#。。。</p>
<img height=1 src="http://www.cnblogs.com/duguguiyu/aggbug/826869.html" width=1><br><br>
<div align=right><a style="TEXT-DECORATION: none" href="http://duguguiyu.cnblogs.com/" target=_blank>duguguiyu</a> 2007-07-21 21:04 <a style="TEXT-DECORATION: none" href="http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826869.html#Feedback" target=_blank>发表评论</a></div>
<br>文章来源:<a href="http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826869.html">http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826869.html</a> 
<img src ="http://www.cppblog.com/duguguiyu/aggbug/34749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/duguguiyu/" target="_blank">duguguiyu</a> 2007-07-21 21:04 <a href="http://www.cppblog.com/duguguiyu/archive/2007/07/21/34749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC的非模态对话框资源管理</title><link>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34750.html</link><dc:creator>duguguiyu</dc:creator><author>duguguiyu</author><pubDate>Sat, 21 Jul 2007 12:56:00 GMT</pubDate><guid>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34750.html</guid><wfw:comment>http://www.cppblog.com/duguguiyu/comments/34750.html</wfw:comment><comments>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34750.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/duguguiyu/comments/commentRss/34750.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/duguguiyu/services/trackbacks/34750.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt" goog_ds_charIndex="1">非模态对话框比模态对话框更难使用这是众所周知的，这是由于模态对话框运行时，阻塞了其父窗口的消息循环，使其能自成一派，所以能够怡然自得。但非模态对话框只相当于一个由父窗体创建的一个同级的Hwnd，就像一个长大了的孩子，可以和父母并驾齐驱了，需要父母管又不能管的太厉害，其资源管理、通信都会比模态的更为复杂。&nbsp;&nbsp;</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="1">很多时候，能用模态对话框的情况下，都会用模态的。虽然<a title=Copper href="http://www.cnblogs.com/duguguiyu/archive/2007/06/03/769138.html" target=_blank><font color=#551a8b>Copper</font></a> 老先生指着鼻子苦口婆心的教导了我们，但有时候人懒脸皮也就厚了，无所谓了。但，世界总是很残酷，很多时候（比如需要在处理对话框事件的时候也能响应窗体事件），我们不得不去面对非模态对话框。其实了解了资源管理的模式，就像扒开了非模态对话框半遮的琵琶，可以很坦然的面对了。</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="159">模态对话框的资源分成两种，一种是内存资源，一种是非内存资源。单看非内存资源的管理，其实和内存资源的管理原理是一样的。在C++中，内存资源的管理讲究new和delete配对，同理，非内存资源的管理需要create和destroy出双入对。在<a title=这篇文章 href="http://www.vckbase.com/study/article/vc_chap/chap5_4.htm" target=_blank><font color=#551a8b>这篇文章</font></a>中，基本体现了非模态对话框资源管理的一个基本模式，即内存资源管理和非内存资源同步。 </p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="405">这样通过判断内存资源是否占用（即指针是否为空）就可以判断非内存资源的使用状况。当指针为空，说明对话框还未创建（非内存资源未申请）；当指针不为空，对话框已创建，正处于可见或不可见状态。这样将两部分资源管理合并在一起了，只需要判断指针是否为空就可以了解对话框资源的状态。一些内存管理的手段，比如类管理思想（将delete和destroy放到类的析构函数中），可以实现资源的自动管理。 </p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="597">为了实现这种管理模式，要注意以下几点： </p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="619">1. 在堆上分配非模态对话框的内存资源，通俗一点的描述就是不要用这种方式：CXXDialog t;而是用这种方式：CXXDialog *t = new CXXDialog();来分配内存。 </p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="714">2. 同步构造和析构过程，就是说有new一定配上个create，delete一定要勾搭一个destroy。 </p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="770">3. 被delete的内存指针一定要置空，也就是下面两句要接踵而至：delete xx;和xx == null;。其实这也是普通的内存管理需要遵循的一个良好习惯。 </p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="770">了解了这些，非模态对话框也会只有温柔没有狰狞。</p>
<img height=1 src="http://www.cnblogs.com/duguguiyu/aggbug/826858.html" width=1><br><br>
<div align=right><a style="TEXT-DECORATION: none" href="http://duguguiyu.cnblogs.com/" target=_blank>duguguiyu</a> 2007-07-21 20:56 <a style="TEXT-DECORATION: none" href="http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826858.html#Feedback" target=_blank>发表评论</a></div>
<br>文章来源:<a href="http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826858.html">http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826858.html</a> 
<img src ="http://www.cppblog.com/duguguiyu/aggbug/34750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/duguguiyu/" target="_blank">duguguiyu</a> 2007-07-21 20:56 <a href="http://www.cppblog.com/duguguiyu/archive/2007/07/21/34750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>互引头文件的一种解决策略</title><link>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34751.html</link><dc:creator>duguguiyu</dc:creator><author>duguguiyu</author><pubDate>Sat, 21 Jul 2007 11:37:00 GMT</pubDate><guid>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34751.html</guid><wfw:comment>http://www.cppblog.com/duguguiyu/comments/34751.html</wfw:comment><comments>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34751.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/duguguiyu/comments/commentRss/34751.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/duguguiyu/services/trackbacks/34751.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt" goog_ds_charIndex="1">在C++中经常会涉及到处于不同头文件的类互相引用的情况，有时候头文件引用（include）会搞得很乱，导致报一堆的错。其实遵循一定规则，可以避免大部分的混乱。</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="82">首先，要对头文件进行处理，保证不会出现重定义的错误。这个应该每个人都会，通常有两种做法：</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="128">1. 在.cpp文件中添加保护，比如在.cpp文件中添加：</p>
<blockquote goog_ds_charIndex="159">
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="160">#ifndef _XX_H_<br goog_ds_charIndex="175">#define _XX_H_<br goog_ds_charIndex="190">#include "xx.h"<br goog_ds_charIndex="206">#endif</p>
</blockquote>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="215">2. 在.h中添加保护，比如在xx.h文件中添加：</p>
<blockquote goog_ds_charIndex="242">
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="243">#ifndef _XX_H_<br goog_ds_charIndex="258">#define _XX_H_<br goog_ds_charIndex="273">// 头文件声明内容<br goog_ds_charIndex="284">#endif</p>
</blockquote>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="293">_XX_H_是我比较习惯的命名方式，其他的命名方式，比如__XX__H__，XX_H等等，只要足够Unique就好。建议使用第二种方式进行重定义的保护，一劳永逸而且具有通用性，任何人拿来就能用，不需要考虑保护问题。当然，如果在VS（03以上吧？）下，最好的解决方案是用#pragma once，更为简单有效。</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="449">其次，最好将所有头文件需要用到的自定义类（或函数）都在定义前声明一下，比如在xx.h的类xx中需要用到yy.h中的yy类，那么最好做以下的处理：</p>
<blockquote goog_ds_charIndex="523">
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="524">class yy;</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="535">class xx<br goog_ds_charIndex="544">{<br goog_ds_charIndex="546">&nbsp;// 实现内容<br goog_ds_charIndex="555">};</p>
</blockquote>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="560">这样就可以保证头文件引用的次序不会对结果造成影响。</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="587">通常，保证以上两点，通常涉及到类互指的问题都可以解决。当然如果天生就有设计问题，无论如何都是没有办法的，比如：</p>
<blockquote goog_ds_charIndex="644">
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="645">// xx.h <br goog_ds_charIndex="654">class xx<br goog_ds_charIndex="663">{<br goog_ds_charIndex="665">&nbsp;yy t;<br goog_ds_charIndex="672">};</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="676">// yy.h<br goog_ds_charIndex="684">class yy<br goog_ds_charIndex="693">{<br goog_ds_charIndex="695">&nbsp;xx t;<br goog_ds_charIndex="702">};</p>
</blockquote>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="707">不难看出，这是个递归定义，编译器无法确定类xx和yy的大小，就无法通过编译。一种解决策略是采用指针，比如：</p>
<blockquote goog_ds_charIndex="762">
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="763">// xx.h <br goog_ds_charIndex="772">class xx<br goog_ds_charIndex="781">{<br goog_ds_charIndex="783">&nbsp;yy* t;<br goog_ds_charIndex="791">};</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="795">// yy.h<br goog_ds_charIndex="803">class yy<br goog_ds_charIndex="812">{<br goog_ds_charIndex="814">&nbsp;xx* t;<br goog_ds_charIndex="822">};</p>
</blockquote>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="827">当然，具体情况具体分析，提取一个更高层的类等手段都可以考虑。</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="859">还有一个问题，我一直也心存疑问，就是头文件组织问题。在VS中建立一个MFC工程，都会产生一对stdafx文件，按照这种思想我们把工程下通用的头文件都放入stdafx.h中，在.cpp文件的最开始统一#include "stdafx.h"，这样就可以在.h文件中引用很少的头文件。</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="1000">这种策略在单工程时很好用，相当于做了头文件组织级别的重用，但它违反了我一直恪守的一个原则即谁的头文件谁负责，指.h和.cpp各自负责各自所需的头文件。于是在跨工程的时候会出现一些问题。比如在B工程B的某个.h中引用了工程B中的一个头文件，由于编译次序问题，这个头文件可能无法被编译。不知道大家都如何处理头文件组织问题的，望指教。</p>
<img height=1 src="http://www.cnblogs.com/duguguiyu/aggbug/826821.html" width=1><br><br>
<div align=right><a style="TEXT-DECORATION: none" href="http://duguguiyu.cnblogs.com/" target=_blank>duguguiyu</a> 2007-07-21 19:37 <a style="TEXT-DECORATION: none" href="http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826821.html#Feedback" target=_blank>发表评论</a></div>
<br>文章来源:<a href="http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826821.html">http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826821.html</a> 
<img src ="http://www.cppblog.com/duguguiyu/aggbug/34751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/duguguiyu/" target="_blank">duguguiyu</a> 2007-07-21 19:37 <a href="http://www.cppblog.com/duguguiyu/archive/2007/07/21/34751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC控件之CControlBar</title><link>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34752.html</link><dc:creator>duguguiyu</dc:creator><author>duguguiyu</author><pubDate>Sat, 21 Jul 2007 11:35:00 GMT</pubDate><guid>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34752.html</guid><wfw:comment>http://www.cppblog.com/duguguiyu/comments/34752.html</wfw:comment><comments>http://www.cppblog.com/duguguiyu/archive/2007/07/21/34752.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/duguguiyu/comments/commentRss/34752.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/duguguiyu/services/trackbacks/34752.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt" goog_ds_charIndex="1">有时候我们经常把对话框和视图结合起来，做成AutoCAD命令输入框、PhotoShop浮动框之类的效果。但很奇怪的是我看过的MFC的书上都没有特别说明过这样的工作该如何去做，我刚接触MFC的时候都是通过控制非模态对话框来模拟的，后来才知道这些工作是通过CControlBar的派生类来完成的。比如CDialogBar就是加载一个已有的对话框资源，嵌入Frame中，和视图配合使用。</p>
<p style="FONT-SIZE: 10pt" goog_ds_charIndex="193">其实知道了有这么个东西，剩下的问题都不能称做问题了，其使用和CToolBar类似，可以通过<a href="http://msdn2.microsoft.com/zh-cn/library/wc9sxcw1(VS.80).aspx" goog_ds_charIndex="239"><font color=#551a8b>http://msdn2.microsoft.com/zh-cn/library/wc9sxcw1(VS.80).aspx</font></a>下载MSDN示例，当然也可以在本机的MSDN搜索CDialogBar获得。</p>
<img height=1 src="http://www.cnblogs.com/duguguiyu/aggbug/826819.html" width=1><br><br>
<div align=right><a style="TEXT-DECORATION: none" href="http://duguguiyu.cnblogs.com/" target=_blank>duguguiyu</a> 2007-07-21 19:35 <a style="TEXT-DECORATION: none" href="http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826819.html#Feedback" target=_blank>发表评论</a></div>
<br>文章来源:<a href="http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826819.html">http://www.cnblogs.com/duguguiyu/archive/2007/07/21/826819.html</a> 
<img src ="http://www.cppblog.com/duguguiyu/aggbug/34752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/duguguiyu/" target="_blank">duguguiyu</a> 2007-07-21 19:35 <a href="http://www.cppblog.com/duguguiyu/archive/2007/07/21/34752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>