﻿<?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++博客-我的编程乐园-文章分类-MFC</title><link>http://www.cppblog.com/deercoder/category/12311.html</link><description>思考至上

                                  QQ：335284643
欢迎志同道合的朋友来交流。</description><language>zh-cn</language><lastBuildDate>Fri, 05 Feb 2010 03:53:35 GMT</lastBuildDate><pubDate>Fri, 05 Feb 2010 03:53:35 GMT</pubDate><ttl>60</ttl><item><title>如何修改控件的内容（caption）</title><link>http://www.cppblog.com/deercoder/articles/107177.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Thu, 04 Feb 2010 08:35:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/107177.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/107177.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/107177.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/107177.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/107177.html</trackback:ping><description><![CDATA[<p>昨天，看了下那本书，发现里面的那个Static控件内容是可以修改的，于是想想，其实控件的内容都可以修改，只是，需要你知道ID即可<br>典型的代码是：<br>GetDlgItem(ID)-&gt;SetWindowText(Caption)<br>于是，今天想到修改RadioButton的代码就出来了。<br><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CSfefeDlg::OnRadio1()&nbsp;<br><img id=Codehighlighter1_28_202_Open_Image onclick="this.style.display='none'; Codehighlighter1_28_202_Open_Text.style.display='none'; Codehighlighter1_28_202_Closed_Image.style.display='inline'; Codehighlighter1_28_202_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_28_202_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_28_202_Closed_Text.style.display='none'; Codehighlighter1_28_202_Open_Image.style.display='inline'; Codehighlighter1_28_202_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_28_202_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_28_202_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;control&nbsp;notification&nbsp;handler&nbsp;code&nbsp;here</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;MessageBox(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">你选择了第一个Radio&nbsp;Button!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;CString&nbsp;str;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;GetDlgItem(IDC_RADIO1)</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetWindowText(str);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;MessageBox(str);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CSfefeDlg::OnRadio2()&nbsp;<br><img id=Codehighlighter1_233_381_Open_Image onclick="this.style.display='none'; Codehighlighter1_233_381_Open_Text.style.display='none'; Codehighlighter1_233_381_Closed_Image.style.display='inline'; Codehighlighter1_233_381_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_233_381_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_233_381_Closed_Text.style.display='none'; Codehighlighter1_233_381_Open_Image.style.display='inline'; Codehighlighter1_233_381_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_233_381_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_233_381_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;control&nbsp;notification&nbsp;handler&nbsp;code&nbsp;here</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;MessageBox(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">你选择了第二个Radio&nbsp;Button!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;GetDlgItem(IDC_RADIO2)</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetWindowText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">World</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CSfefeDlg::OnRadio3()&nbsp;<br><img id=Codehighlighter1_412_558_Open_Image onclick="this.style.display='none'; Codehighlighter1_412_558_Open_Text.style.display='none'; Codehighlighter1_412_558_Closed_Image.style.display='inline'; Codehighlighter1_412_558_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_412_558_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_412_558_Closed_Text.style.display='none'; Codehighlighter1_412_558_Open_Image.style.display='inline'; Codehighlighter1_412_558_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_412_558_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_412_558_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;control&nbsp;notification&nbsp;handler&nbsp;code&nbsp;here</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;MessageBox(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">你选择了第三个Radio&nbsp;Button!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;GetDlgItem(IDC_RADIO3)</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetWindowText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Good!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
很简单，就是拖入控件RadioButton，然后有ID，你就在里面用相应的代码来更改Capition就是的了。<br><br>至于MessageBox,纯粹就是为了显示出来你选择了这个东西，发送一个消息而已，为了让你显示的看到自己点击的这个产生了一个消息。<br><br>于是，我便想到了，动态的改变按钮的内容（Caption）原来如此的简单，二消息的传递也是如此的顺理成章。。<br><br>现在，发现MFC的一点点东西已经掌握了。。。。
<img src ="http://www.cppblog.com/deercoder/aggbug/107177.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2010-02-04 16:35 <a href="http://www.cppblog.com/deercoder/articles/107177.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC中动态添加控件 </title><link>http://www.cppblog.com/deercoder/articles/107132.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Wed, 03 Feb 2010 14:41:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/107132.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/107132.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/107132.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/107132.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/107132.html</trackback:ping><description><![CDATA[<h2>&nbsp;</h2>
<div class=postbody><strong>动态控件是指在需要时由Create()创建的控件，这与预先在对话框中放置的控件是不同的。 <br><br>　　一、创建动态控件：<br><br>　　为了对照，我们先来看一下静态控件的创建。<br><br>　　放置静态控件时必须先建立一个容器，一般是对话框，这时我们在对话框编辑窗口中，从工具窗口中拖出所需控件放在对话框中即可，再适当修改控件ID，设置控件属性，一个静态控件就创建好了，当对话框被显示时，其上的控件也会显示。<br><br>　　静态控件不需要调用Create()函数来创建。<br><br>　　而创建动态控件有很大不同，以下以按钮为例，看一下动态控件的创建过程：<br><br>　　1.建立控件ID号：<br><br>　　ID号是控件的标识，创建控件前必须先为它设置一个ID号。<br><br>　　打开资源中的&#8220;String Table&#8221;，在空白行上双击鼠标，这时会弹出一个ID属性对话框，在其中的ID编辑框中输入ID，如：IDC_MYBUTTON，在Caption中输入控件标题或注解（注：Caption框不能为空，为空会导致创建失败），这里我输入的是按钮上要显示的文字--动态按钮。<br><br>　　2.建立控件对象：<br><br>　　不同种类的控件应创建不同的类对象：<br><br>　　&#183;按钮控件 CButton （包括普通按钮、单选按钮和复选按钮）<br>　　&#183;编辑控件 CEdit<br>　　&#183;静态文本控件 CStatic<br>　　&#183;标签控件 CTabCtrl<br>　　&#183;旋转控件 CSpinButtonCtrl<br>　　&#183;滑标控件 CSliderCtrl<br>　　&#183;多信息编辑控件 CRichEditCtrl<br>　　&#183;进度条控件 CProgressCtrl<br>　　&#183;滚动条控件 CSrcollBar<br>　　&#183;组合框控件 CComboBox<br>　　&#183;列表框控件 CListBox<br>　　&#183;图像列表控件 CImageCtrl<br>　　&#183;树状控件 CTreeCtrl<br>　　&#183;动画控件 CAnimateCtrl<br><br>　　本例中我们创建一个CButton类的普通按钮。注意不能直接定义CButton对象，如：CButton m_MyBut;这种定义只能用来给静态控件定义控制变量，不能用于动态控件。<br><br>　　正确做法是用new调用CButton构造函数生成一个实例：<br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>CButton *p_MyBut = new CButton();</td>
        </tr>
    </tbody>
</table>
<br>　　然后用CButton类的Create()函数创建，该函数原型如下：<br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT&amp; rect, CWnd* pParentWnd, UINT nID );</td>
        </tr>
    </tbody>
</table>
<br>　　lpszCaption是按钮上显示的文本；dwStyle指定按钮风格，可以是按钮风格与窗口风格的组合，取值有：<br><br>　　窗口风格：<br><br>　　&#183;WS_CHILD 子窗口，必须有<br>　　&#183;WS_VISIBLE 窗口可见，一般都有<br>　　&#183;WS_DISABLED 禁用窗口，创建初始状态为灰色不可用的按钮时使用<br>　　&#183;WS_TABSTOP 可用Tab键选择<br>　　&#183;WS_GROUP 成组，用于成组的单选按钮中的第一个按钮<br><br>　　按钮风格：<br><br>　　&#183;BS_PUSHBUTTON 下压式按钮，也即普通按钮<br>　　&#183;BS_AUTORADIOBUTTON 含自动选中状态的单选按钮<br>　　&#183;BS_RADIOBUTTON 单选按钮，不常用<br>　　&#183;BS_AUTOCHECKBOX 含自动选中状态的复选按钮<br>　　&#183;BS_CHECKBOX 复选按钮，不常用<br>　　&#183;BS_AUTO3STATE 含自动选中状态的三态复选按钮<br>　　&#183;BS_3STATE 三态复选按钮，不常用<br>　<br>　　以上风格指定了创建的按钮类型，不能同时使用，但必须有其一。<br><br>　　&#183;BS_BITMAP 按钮上将显示位图<br>　　&#183;BS_DEFPUSHBUTTON 设置为默认按钮，只用于下压式按钮，一个对话框中只能指定一个默认按钮<br>　　&#183;rect指定按钮的大小和位置；<br>　　&#183;pParentWnd指示拥有按钮的父窗口，不能为NULL；<br>　　&#183;nID指定与按钮关联的ID号，用上一步创建的ID号。<br><br>　　不同控件类的Create()函数略有不同，可参考相关资料。<br><br>　　例：p_MyBut-&gt;Create( "动态按钮", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(20,10,80,40), this, IDC_MYBUTTON );<br>这样，我们就在当前对话框中的(20,10)处创建了宽60，高30，按钮文字为&#8220;动态按钮&#8221;的下压式按钮。<br><br>　　为了使创建过程更方便易用，我定义了如下函数：<br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>CButton* CTextEditorView::NewMyButton(int nID,CRect rect,int nStyle)<br>{<br>CString m_Caption;<br>m_Caption.LoadString( nID ); //取按钮标题<br>CButton *p_Button = new CButton();<br>ASSERT_VALID(p_Button);<br>p_Button-&gt;Create( m_Caption, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | nStyle, rect, this, nID ); //创建按钮<br>return p_Button;<br>} </td>
        </tr>
    </tbody>
</table>
<br>　　其中m_Caption.LoadString( nID )是从字符串表中读取按钮文本，这样在创建按钮ID时，应该把文本设置好，参数nStyle为除必须风格外的额外风格。<br><br>　　以下，我调用该函数创建三个按钮，并指定第一个按钮为默认按钮，按钮的ID已预先设置好了：<br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>CButton *p_MyBut[3];<br>p_MyBut[0] = NewMyButton( ID_MYBUT1, CRect(10,20,50,35), BS_DEFPUSHBUTTON );<br>p_MyBut[1] = NewMyButton( ID_MYBUT2, CRect(55,20,95,35), 0 );<br>p_MyBut[2] = NewMyButton( ID_MYBUT3, CRect(100,20,140,35), 0 ); </td>
        </tr>
    </tbody>
</table>
<br>　　<strong>二、动态控件的响应</strong>：<br><br>　　动态控件的响应函数不能用ClassWizard添加，只能手动添加。仍以上面的按钮为例，我们制作按钮的单击响应函数。<br><br>　　1.在MESSAGE_MAP中添加响应函数：<br><br>　　MESSAGE_MAP表中定义了消息响应函数，其格式为：消息名(ID,函数名)，当我们用ClassWizard添加函数时，会自动添加在AFX_MSG_MAP括起的区间内，如：<br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)<br>//{{AFX_MSG_MAP(CTextEditorView)<br>ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0)<br>//}}AFX_MSG_MAP<br>END_MESSAGE_MAP() </td>
        </tr>
    </tbody>
</table>
　<br>　　手工添加时不要添加到AFX_MSG_MAP区间内，以防ClassWizard不能正常工作，如： <br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)<br>//{{AFX_MSG_MAP(CTextEditorView)<br>ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0)<br>//}}AFX_MSG_MAP<br>ON_BN_CLICKED(ID_MYBUT1, OnMybut1)<br>ON_BN_CLICKED(ID_MYBUT2, OnMybut2)<br>ON_BN_CLICKED(ID_MYBUT3, OnMybut3)<br>END_MESSAGE_MAP() </td>
        </tr>
    </tbody>
</table>
<br>　　其中ON_BN_CLICKED是按钮单击消息。<br><br>　　2.在头文件中添加函数定义：<br><br>　　用ClassWizard添加函数时，会在头文件的AFX_MSG区间内添加函数定义，如： <br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>protected:<br>//{{AFX_MSG(CTextEditorView)<br>afx_msg void OnIconbut0();<br>//}}AFX_MSG<br>DECLARE_MESSAGE_MAP() </td>
        </tr>
    </tbody>
</table>
<br>　　我们模仿这种形式，只是把函数定义添加到AFX_MSG区间外就行了：<br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>protected:<br>//{{AFX_MSG(CTextEditorView)<br>afx_msg void OnIconbut0();<br>//}}AFX_MSG<br>afx_msg void OnMybut1();<br>afx_msg void OnMybut2();<br>afx_msg void OnMybut3();<br>DECLARE_MESSAGE_MAP() </td>
        </tr>
    </tbody>
</table>
<br>　　3.编写消息响应函数：<br><br>　　以上是把消息和函数关联起来了，具体在单击按钮后应做的工作在函数中完成： <br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>void CTextEditorView::OnMybut1()<br>{<br>MessageBox( "哈！你单击了动态按钮。" );<br>}<br>void CTextEditorView::OnMybut2()<br>{<br>&#8230;&#8230;<br>}<br>void CTextEditorView::OnMybut3()<br>{<br>&#8230;&#8230;<br>} </td>
        </tr>
    </tbody>
</table>
<br>　　除了按钮的响应函数外，你还可以用上面获得的指针访问按钮，如：<br><br>　　修改按钮的大小和位置：p_MyBut[0]-&gt;MoveWindow(&#8230;&#8230;);<br><br>　　修改按钮文本：p_MyBut[0]-&gt;SetWindowText(&#8230;&#8230;);<br><br>　　显示/隐藏按钮：p_MyBut[0]-&gt;ShowWindow(&#8230;&#8230;);等等。<br>三、回收资源</strong>：<br><br>　　由于动态控件对象是由new生成的，它不会被程序自动释放，所以需手工释放。在控件不再使用时可以删除它：<br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>if( p_MyBut[0] )<br>delete p_MyBut[0]; </td>
        </tr>
    </tbody>
</table>
<br>　　以上就是按钮控件动态生成的方法。下面，再看一下单选按钮的动态生成问题。 四、实例：单选按钮组的动态生成<br><br>　　单选按钮也属于CButton类，但由于单选按钮总是成组使用的，所以它在制作和使用上与普通按钮有一定区别。<br><br>　　假设有三个单选按钮组成一组，初始时，第一个单选按钮处于选中状态。<br><br>　　我们先来看静态制作方法：在对话框中放置三个单选按钮，设置属性如下：<br><br>　　&#183;Radio1属性：Visible、Group、Tab stop、Auto<br>　　&#183;Radio2属性：Visible、Tab stop、Auto<br>　　&#183;Radio3属性：Visible、Tab stop、Auto<br><br>　　这样的属性设置就把三个单选按钮分成了一组，它们一次只能有一个被选中，若对话框中还有其它成组的单选按钮，使用时也会互不干扰。但这时还没有使第一个按钮处于选中状态。<br><br>　　接着就用ClassWizard为这组单选按钮添加变量，这里只需为第一个单选按钮添加变量即可。设变量名为m_Radio，类型选为int型。在构造函数中ClassWizard把m_Radio的值设置为-1，我们把它改为0，这样在运行程序时可以看到第一个单选按钮处于选中状态了。之后，还应该用ClassWizard为三个单选按钮添加单击响应函数，在里面修改m_Radio的值对应三个单选按钮就可以了。<br><br>　　以上就是通常制作单选按钮组的办法，现我们欲改为动态生成，主要要解决按钮分组和单击控制问题。以下为制作步骤：<br><br>　　1.定义三个单选按钮的ID：<br><br>　　打开资源中的&#8220;String Table&#8221;，在其中添加三个ID值：<br><br>　　&#183;第一个：ID为IDC_MYRADIO1，Caption为单选1<br>　　&#183;第二个：ID为IDC_MYRADIO2，Caption为单选2<br>　　&#183;第三个：ID为IDC_MYRADIO3，Caption为单选3<br><br>　　其中Caption为按钮上要显示的文字，可根据需要设置。<br><br>　　2.用CButton类的Create()函数生成三个单选按钮：<br><br>　　为方便起见，先定义一个函数生成单选按钮： <br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>CButton* CTextEditorView::NewMyRadio(int nID,CRect rect,int nStyle)<br>{<br>　CString m_Caption;<br>　m_Caption.LoadString( nID ); //取按钮标题<br>　CButton *p_Radio = new CButton();<br>　ASSERT_VALID(p_Radio);<br>　p_Radio-&gt;Create( m_Caption, WS_CHILD | WS_VISIBLE | nStyle | WS_TABSTOP | BS_AUTORADIOBUTTON, rect, this, nID ); //创建按钮<br>　return p_Radio;<br>} </td>
        </tr>
    </tbody>
</table>
<br>　　函数LoadString()用于从&#8220;String Table&#8221;中读取按钮文本，Create()函数中设定了单选按钮必须的属性，其中就包括了Visible、Tab stop、Auto属性。<br><br>　　参数nID为单选按钮ID号，rect为单选按钮尺寸，nStyle为除必要属性外的其它属性。返回值为指向新建按钮的指针。<br><br>　　有了这个函数后，创建单选按钮组时只要依次调用该函数即可，其中单选按钮组的第一个单选按钮必须指定WS_GROUP属性。<br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>CButton *p_MyRadio[3];<br>p_MyRadio[0] = NewMyRadio( IDC_MYRADIO1, CRect(15,90,60,105), WS_GROUP );<br>p_MyRadio[1] = NewMyRadio( IDC_MYRADIO2, CRect(15,108,60,123), 0 );<br>p_MyRadio[2] = NewMyRadio( IDC_MYRADIO3, CRect(15,126,60,141), 0 ); </td>
        </tr>
    </tbody>
</table>
<br>　　3.定义单选按钮组的控制变量，设置第一个单选按钮为选中状态：<br><br>　　这里不能用ClassWizard添加变量，也不要在DoDataExchange()中添加控制变量，因为动态控件一开始并不存在，在DoDataExchange()中添加控制变量会造成运行错误。这里我们只需在头文件中随意定义一个int型变量作为控制变量即可，如：<br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>int m_SelRadio;</td>
        </tr>
    </tbody>
</table>
<br>　　在构造函数中设置其初值为0：m_SelRadio = 0;<br><br>　　在上面的创建按钮的语句中，用SetCheck()函数设置初始选中的按钮：<br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>CButton *p_MyRadio[3];<br>p_MyRadio[0] = NewMyRadio( IDC_MYRADIO1, CRect(15,90,60,105), WS_GROUP );<br>p_MyRadio[1] = NewMyRadio( IDC_MYRADIO2, CRect(15,108,60,123), 0 );<br>p_MyRadio[2] = NewMyRadio( IDC_MYRADIO3, CRect(15,126,60,141), 0 );<br>p_MyRadio[m_SelRadio]-&gt;SetCheck(1); //设置第一个单选为选中状态 </td>
        </tr>
    </tbody>
</table>
<br>　　在SetCheck()函数中，参数为1表示设置为选中状态，为0表示未选中状态。<br><br>　　4.添加鼠标单击响应函数：<br><br>　　鼠标单击某单选按钮后，其状态已经能自动改变，这里我们还需修改控制变量m_SelRadio的值，以便跟踪选中的单选按钮。<br><br>　　首先在MESSAGE_MAP中把鼠标单击消息与响应函数联系起来： <br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)<br>//{{AFX_MSG_MAP(CTextEditorView)<br>ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0) //ClassWizard在此处添加<br>//}}AFX_MSG_MAP<br>ON_BN_CLICKED(IDC_MYRADIO1, OnMyRadio1) //单选按钮1<br>ON_BN_CLICKED(IDC_MYRADIO2, OnMyRadio2) //单选按钮2<br>ON_BN_CLICKED(IDC_MYRADIO3, OnMyRadio3) //单选按钮3<br>END_MESSAGE_MAP() </td>
        </tr>
    </tbody>
</table>
<br>　　然后在头文件的MESSAGE_MAP中定义单击函数：<br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>protected:<br>//{{AFX_MSG(CTextEditorView)<br>afx_msg void OnIconbut0(); //ClassWizard在此处添加<br>//}}AFX_MSG<br>afx_msg void OnMyRadio1(); //单选按钮1<br>afx_msg void OnMyRadio2(); //单选按钮2<br>afx_msg void OnMyRadio3(); //单选按钮3<br>DECLARE_MESSAGE_MAP() </td>
        </tr>
    </tbody>
</table>
<br>　　这里注意不要把函数加在AFX_MSG区间内，以防影响ClassWizard的使用。<br><br>　　定义具体的响应函数（这里是用手工加入的，不是用ClassWizard加入的）：<br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>//单击单选按钮1 void CTextEditorView::OnMyRadio1() <br>{<br>m_SelRadio=0;<br>} <br><br>//单击单选按钮2 void CTextEditorView::OnMyRadio2() <br>{<br>m_SelRadio=1;<br>} <br><br>//单击单选按钮3 void CTextEditorView::OnMyRadio3() <br>{<br>m_SelRadio=2;<br>}</td>
        </tr>
    </tbody>
</table>
<br>　　5.回收资源：<br><br>　　在析构函数中，回收创建的单选按钮（也可以在不使用单选按钮时立即回收）：<br><br>
<table border=1 borderColor=#ffcc66 width="90%" bgColor=#dadacf align=center>
    <tbody>
        <tr>
            <td>CTextEditorView::~CTextEditorView()<br>{<br>int i;<br>for( i=0; i&lt;3; i++)<br>{<br>if(p_MyRadio[i])<br>delete p_MyRadio[i];<br>}<br>}</td>
        </tr>
    </tbody>
</table>
<br>　　以上就是动态控件的生成和响应方法，各种不同的控件做法略有不同，但思路和步骤都是类似的，希望以上实例对你能够有所帮助。 </div>
<img src ="http://www.cppblog.com/deercoder/aggbug/107132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2010-02-03 22:41 <a href="http://www.cppblog.com/deercoder/articles/107132.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>动态创建按钮并相应消息</title><link>http://www.cppblog.com/deercoder/articles/107131.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Wed, 03 Feb 2010 14:31:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/107131.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/107131.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/107131.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/107131.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/107131.html</trackback:ping><description><![CDATA[<p align=justify>第一步：<br>在Resource.h中，添加按钮ID：ID_BTN_TEMP = 1001<br>第二步：<br>在View类【CView的子类】中添加一个变量，判断按钮是否已经创建：<br>bool m_bIsCreatButton;<br><br>第三步：<br>创建一个按钮数组：<br>CBitmapButton *m_bitList[11]<br><br><br>第四步：<br>在View类【CView的子类】的构造函数中，初始化bIsCreatButton：<br>m_bIsCreatButton = false;<br><br>第五步：<br>在View类【CView的子类】中添加函数创建按钮：<br>CBitmapButton* CHisNavView::CreateButton(int nID, char* text,int left, int top, int right, int bottom)<br>{<br>&nbsp;CRect&nbsp;rect;<br>&nbsp;GetClientRect(rect);<br>&nbsp;CBitmapButton *pButton = new CBitmapButton();<br>&nbsp;ASSERT_VALID(pButton);&nbsp;pButton-&gt;Create(TEXT(text), <br>&nbsp;&nbsp;WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, <br>&nbsp;&nbsp;CRect(left, top, right, bottom), <br>&nbsp;&nbsp;this, nID); <br>&nbsp;return pButton;<br>}<br><br>其中，nID为按钮ID，text为按钮文本。 其他为按钮显示范围。<br><br>第六步：<br>在View类【CView的子类】的OnDraw方法中创建按钮：<br>m_bitList[0] = CreateButton(ID_BTN_TEMP, "天志的按钮", 50, 50, 150, 80);&nbsp;<br><br>第六步:<br>在View类【CView的子类】中声明函数:<br>afx_msg void OnTest()<br><br>第七步:<br>在View类【CView的子类】的BEGIN_MESSAGE_MAP(CHisNavView, CView)添加:<br>ON_BN_CLICKED(ID_BTN_TEMP, CHisNavView::OnTest)<br><br>第八步:实现OnTest()函数<br>void CHisNavView::OnTest()<br>{<br>&nbsp;&nbsp;&nbsp;MessageBox(TEXT("天志自己写着玩!"), NULL, MB_OK);<br>} </p>
<img src ="http://www.cppblog.com/deercoder/aggbug/107131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2010-02-03 22:31 <a href="http://www.cppblog.com/deercoder/articles/107131.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>打开文件对话框和文件夹对话框之MFC和API实现。</title><link>http://www.cppblog.com/deercoder/articles/103065.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Sat, 12 Dec 2009 08:51:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/103065.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/103065.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/103065.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/103065.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/103065.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一、利用</span><span lang=EN-US>API</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实现打开文件对话框和利用</span><span lang=EN-US>MFC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来实现打开文件对话框。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法一：</span><span lang=EN-US>API</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">部分：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>OPENFILENAME ofn;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>char szFile[MAX_PATH];</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>ZeroMemory(&amp;ofn,sizeof(ofn));</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>ofn.lStructSize = sizeof(ofn);</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>ofn.lpstrFile = szFile;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>ofn.lpstrFile[0] = TEXT('\0');</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>ofn.nMaxFile = sizeof(szFile);</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>ofn.lpstrFilter = TEXT("all\0*.*\0jpg\0*.jpg\0bmp\0*.bmp\0"); //</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义三个选项，</span><span lang=EN-US>all</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang=EN-US>text</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang=EN-US>exe </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>ofn.nFilterIndex = 1;<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义首选项是哪一个</span><span lang=EN-US> </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>ofn.lpstrFileTitle = NULL;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>ofn.nMaxFileTitle = 0;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>ofn.lpstrInitialDir = NULL;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>if(GetOpenFileName(&amp;ofn))</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>{</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>::SetDlgItemText(this-&gt;m_hWnd,IDC_EDIT1,szFile);</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>}<span style="mso-spacerun: yes">&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法二、</span><span lang=EN-US>MFC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实现</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>CFileDialog dlg(TRUE, NULL, NULL, </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>NULL);</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>if(dlg.DoModal() == IDOK)</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>{</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>szFilename = dlg.GetPathName();</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>::MessageBox(NULL,szFilename,NULL,MB_OK);</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>// <span style="mso-tab-count: 1">&nbsp;&nbsp; </span>}</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意：打开文件的方式和打开文件夹的方式是不同的。打开文件的方式是不断的打开直到出现末端为文件，否则遇到文件夹还要继续打开。而打开文件夹则是只要选择到一个路径的文件夹就打开。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面的这种方式是<span style="COLOR: red">打开文件夹</span>：</span><span lang=EN-US>MFC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实现。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>static TCHAR strDirName[MAX_PATH];</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BROWSEINFO bi;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CString szString = TEXT("</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选择一个源文件子文件夹</span><span lang=EN-US>");</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>bi.hwndOwner = ::GetFocus();</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>bi.pidlRoot = NULL;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>bi.pszDisplayName = strDirName;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>bi.lpszTitle = szString;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>bi.ulFlags = BIF_BROWSEFORCOMPUTER | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>bi.lpfn = NULL;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>bi.lParam = 0;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>bi.iImage = 0;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>LPITEMIDLIST pItemIDList = ::SHBrowseForFolder(&amp;bi);</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(pItemIDList == NULL)</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return ;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>::SHGetPathFromIDList(pItemIDList, strDirName);</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CString str = strDirName;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(str != "" &amp;&amp; str.Right(1) != '\\')</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>str += '\\';</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>::SetDlgItemText(this-&gt;m_hWnd,IDC_EDIT1,str);</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.cppblog.com/deercoder/aggbug/103065.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-12-12 16:51 <a href="http://www.cppblog.com/deercoder/articles/103065.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解析MFC中的几个常见的函数用法</title><link>http://www.cppblog.com/deercoder/articles/103064.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Sat, 12 Dec 2009 08:49:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/103064.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/103064.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/103064.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/103064.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/103064.html</trackback:ping><description><![CDATA[<p>1.<br>VOID CFileIO::GetFolderNamesInDir(CStringArray &amp;StringArray, LPCTSTR lpszExpression)<br>{<br>&nbsp;CFileFind FileFind;<br>&nbsp;CString str = lpszExpression;<br>&nbsp;str += "\\*.*";<br>&nbsp;if(!FileFind.FindFile(str))<br>&nbsp;&nbsp;return;<br>&nbsp;BOOL bFound;<br>&nbsp;do{<br>&nbsp;&nbsp;bFound = FileFind.FindNextFile();<br>&nbsp;&nbsp;if(FileFind.IsDirectory())<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;CString strFileName = FileFind.GetFileName();<br>&nbsp;&nbsp;&nbsp;if(strFileName != "." &amp;&amp; strFileName != "..")<br>&nbsp;&nbsp;&nbsp;&nbsp;StringArray.Add(FileFind.GetFileName());<br>&nbsp;&nbsp;}<br>&nbsp;}while(bFound);<br>}<br>此函数的入口参数是一个CString数组，后面的那个lpszExpression是一个要搜索的文件名，你可以选择通配符，比如是"*.jpg"来搜索下面的所有的文件名。然后此函数会把文件名都存入到那个数组中，因为是用的引用。注意的是，那个lpszExpression需要绝对路径，所以需要的格式是类似这种形式："d:\\fp\\temp.bmp"。存入的也是名字，而没有路径的。<br><br>2.选择路径。<br>CString CFileIO::SelectDirectory(LPCTSTR lpszTitle)<br>{<br>&nbsp;static TCHAR strDirName[MAX_PATH];</p>
<p>&nbsp;BROWSEINFO bi;<br>&nbsp;bi.hwndOwner = ::GetFocus();<br>&nbsp;bi.pidlRoot = NULL;<br>&nbsp;&nbsp;&nbsp; bi.pszDisplayName = strDirName;<br>&nbsp;bi.lpszTitle = lpszTitle;<br>&nbsp;&nbsp;&nbsp; bi.ulFlags = BIF_BROWSEFORCOMPUTER | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS;<br>&nbsp;&nbsp;&nbsp; bi.lpfn = NULL;<br>&nbsp;bi.lParam = 0;<br>&nbsp;bi.iImage = 0;</p>
<p>&nbsp;LPITEMIDLIST pItemIDList = ::SHBrowseForFolder(&amp;bi);<br>&nbsp;if(pItemIDList == NULL)<br>&nbsp;{<br>&nbsp;&nbsp;return "";<br>&nbsp;}</p>
<p>&nbsp;::SHGetPathFromIDList(pItemIDList, strDirName);</p>
<p>&nbsp;CString str = strDirName;<br>&nbsp;if(str != "" &amp;&amp; str.Right(1) != '\\')<br>&nbsp;&nbsp;str += '\\';</p>
<p>&nbsp;return str;<br>}<br>最终得到的str就是那个路径的名字。上面的函数如果和下面这个配套使用的话，需要注意加如"\",因为需要多一个。这个函数的目的就是为了打开一个文件夹的对话框让你选择。<br><br>3.VOID CFileIO::GetFileNamesInDir(CStringArray &amp;StringArray, LPCTSTR lpszExpression)<br>{<br>&nbsp;// The File Name should apply with "d:\\fp\\temp.bmp" Style<br>&nbsp;CFileFind FileFind;<br>&nbsp;if(!FileFind.FindFile(lpszExpression))<br>&nbsp;&nbsp;return;<br>&nbsp;BOOL bFound;<br>&nbsp;do{<br>&nbsp;&nbsp;bFound = FileFind.FindNextFile();<br>&nbsp;&nbsp;if(!FileFind.IsDirectory())<br>&nbsp;&nbsp;&nbsp;StringArray.Add(FileFind.GetFileName());<br>&nbsp;}while(bFound);<br>}<br>传入一个路径，得到该路径下面的所有的文件名，还是存入数组，不过没有那些路径名，而只是文件名。还要不会搜索下面的所有的文件夹，只是当前文件夹下面是。<br>但是，你可以用上面这三个函数做很多事情了。递归调用，完全可以实现之&#8230;&#8230;&#8230;&#8230;<br><br>4.上面说到了递归调用。下面的这个就是实际的实现了读取一个目录下面所有的文件名，并且保存在一个CString数组中，而且还是详细的文件路径。<br>static void GetAllFilePathInDir( CStringArray &amp;strArray, CString strDir, CString strExt )<br>{<br>&nbsp;CFileFind finder;<br>&nbsp;CString strFileName;<br>&nbsp;if( strDir.IsEmpty() )<br>&nbsp;&nbsp;return;<br>&nbsp;if( strDir.Right(2) != "\\" )<br>&nbsp;&nbsp;strDir = strDir + "\\";<br>&nbsp;BOOL bWorking = finder.FindFile( strDir + "*.*" );<br>&nbsp;while( bWorking )<br>&nbsp;{&nbsp;<br>&nbsp;&nbsp;bWorking = finder.FindNextFile();<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;if ( finder.IsDots() )<br>&nbsp;&nbsp;&nbsp;continue;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;if ( finder.IsDirectory() )<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;GetAllFilePathInDir( strArray, finder.GetFilePath(), strExt );<br>&nbsp;&nbsp;&nbsp;continue;<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;strFileName = finder.GetFilePath();<br>&nbsp;&nbsp;strFileName.MakeLower();<br>&nbsp;&nbsp;CString needExt = GetFileExt( strExt );<br>&nbsp;&nbsp;CString srcExt = GetFileExt( strFileName );<br>&nbsp;&nbsp;if( strExt == "*.*" || needExt == srcExt )<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;strArray.Add( strFileName );<br>&nbsp;&nbsp;}<br>&nbsp;}&nbsp;</p>
<p>&nbsp;finder.Close();<br>}<br>一个典型的调用参数就是下面的这个：<br>GetAllFilePathInDir(FilenameALL,szSourceFilename,"*.jpg");<br>&nbsp;for (int i = 0; i &lt; FilenameALL.GetSize(); i++)<br>&nbsp;{<br>&nbsp;&nbsp;::MessageBox(NULL,FilenameALL.GetAt(i),"ok",MB_OK);<br>&nbsp;}<br>注意，前面第一个参数是表示要存放的数组，第二个是你要查找的那个路径，第三个是查找的文件名。可以用通配符来实现查找。这样就完成了功能。<br>强大的MFC。。。。<br></p>
<img src ="http://www.cppblog.com/deercoder/aggbug/103064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-12-12 16:49 <a href="http://www.cppblog.com/deercoder/articles/103064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初识MFC</title><link>http://www.cppblog.com/deercoder/articles/101010.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Sun, 15 Nov 2009 12:19:00 GMT</pubDate><guid>http://www.cppblog.com/deercoder/articles/101010.html</guid><wfw:comment>http://www.cppblog.com/deercoder/comments/101010.html</wfw:comment><comments>http://www.cppblog.com/deercoder/articles/101010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deercoder/comments/commentRss/101010.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deercoder/services/trackbacks/101010.html</trackback:ping><description><![CDATA[最近急用MFC，初识，用到了一些，有感而言，高手勿笑。<br><br>1.error C2660: &#8220;CWnd::MessageBoxA&#8221; : 函数不接受 4 个参数 错误解决<br><br>
<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"><span style="COLOR: #008080">&nbsp;1</span><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;CSerialPortEx::ProcessErrorMessage(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">ErrorText)&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img id=Codehighlighter1_66_673_Open_Image onclick="this.style.display='none'; Codehighlighter1_66_673_Open_Text.style.display='none'; Codehighlighter1_66_673_Closed_Image.style.display='inline'; Codehighlighter1_66_673_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_66_673_Closed_Image onclick="this.style.display='none'; Codehighlighter1_66_673_Closed_Text.style.display='none'; Codehighlighter1_66_673_Open_Image.style.display='inline'; Codehighlighter1_66_673_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif">&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_66_673_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_66_673_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">Temp</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">];&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;LPVOID&nbsp;&nbsp;&nbsp;lpMsgBuf;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;FormatMessage(&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;FORMAT_MESSAGE_ALLOCATE_BUFFER</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">FORMAT_MESSAGE_FROM_SYSTEM,&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;GetLastError(),&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Default&nbsp;&nbsp;&nbsp;language&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #008000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;(LPTSTR)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">lpMsgBuf,&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;NULL);&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;sprintf(Temp,&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WARNING:%s&nbsp;&nbsp;&nbsp;Failed&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;&nbsp;following&nbsp;&nbsp;&nbsp;error:\n%s\nPort:%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)ErrorText,&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;lpMsgBuf,&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;m_nPortNr);&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;MessageBox(NULL,&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Temp,&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Application&nbsp;&nbsp;&nbsp;Error</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MB_ICONSTOP);&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;LocalFree(lpMsgBuf);&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;delete[]&nbsp;&nbsp;&nbsp;Temp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;</span></div>
<br>四个参数的MessageBox()是API中定义的，而在MFC中被重新定义了，是只需要一个参数的MessageBox("");&nbsp;&nbsp;因此你在MFC中调用api的函数，要在前面加上::&nbsp;&nbsp; <br><br>《待续》
<img src ="http://www.cppblog.com/deercoder/aggbug/101010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deercoder/" target="_blank">刘畅</a> 2009-11-15 20:19 <a href="http://www.cppblog.com/deercoder/articles/101010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>