📄 vctip5.html
字号:
<html><head><meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"><meta NAME="GENERATOR" CONTENT="Microsoft FrontPage 3.0"><meta NAME="doccomm" CONTENT="sss"><meta NAME="Template" CONTENT="C:\MSOffice\Template\Sl_BOOK.dot"><meta NAME="Author" CONTENT="Cheng Jinxing"><title>Visual C++编程技巧之五</title></head><body TEXT="#000000" BGCOLOR="#CCFFFF" LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000"><p align="center"><br><font SIZE="+3" FACE="楷体_GB2312">Visual C++编程技巧之五</font> </p><p><a HREF="#tip33"><font SIZE="+0" FACE="Times New Roman">33</font><font SIZE="+0">、如何获取一个对话控件的指针</font></a> </p><p><a HREF="#tip34"><font SIZE="+0" FACE="Times New Roman">34</font><font SIZE="+0">、如何禁止和使能控件</font></a> </p><p><a HREF="#tip35"><font SIZE="+0" FACE="Times New Roman">35</font><font SIZE="+0">、如何改变控件的字体</font></a> </p><p><a HREF="#tip36"><font SIZE="+0" FACE="Times New Roman">36</font><font SIZE="+0">、如何在</font><fontSIZE="+0" FACE="Times New Roman">OLE</font><font SIZE="+0">控件中使用</font><fontSIZE="+0" FACE="Times New Roman">OLE_COLOR</font><font SIZE="+0">数据类型</font></a> </p><p><a HREF="#tip37"><font SIZE="+0" FACE="Times New Roman">37</font><font SIZE="+0">、在不使用通用文件打开对话的情况下如何显示一个文件列表</font></a> </p><p><a HREF="#tip38"><font SIZE="+0" FACE="Times New Roman">38</font><font SIZE="+0">、为什么旋转按钮控件看起来倒转</font></a> </p><p><a HREF="#tip39"><font SIZE="+0" FACE="Times New Roman">39 </font><font SIZE="+0">为什么旋转按钮控件不能自动地更新它下面的编辑控件</font></a> </p><p><a HREF="#tip40"><font SIZE="+0" FACE="Times New Roman">40</font><font SIZE="+0">、如何用位图显示下压按钮</font></a> </p><p><font SIZE="+2"><b> </b></font> </p><p><a NAME="tip33"></a><b><font SIZE="+2"><font FACE="Times New Roman">33</font><fontFACE="黑体">、如何获取一个对话控件的指针</font></font></b> </p><p><font SIZE="+0">有两种方法。其一,调用<font FACE="Times New Roman">CWnd: : GetDlgItem</font>,获取一个<font FACE="Times New Roman">CWnd*</font>指针调用成员函数。下例调用<fontFACE="Times New Roman">GetDlgItem</font>,将返回值传给一个<fontFACE="Times New Roman">CSpinButtonCtrl*</font>以便调用<font FACE="Times New Roman">CSpinButtonCtrl : : SetPos </font>函数:</font> </p><p><font SIZE="+0" FACE="Times New Roman">BOOL CSampleDialog : : OnInitDialog ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">CDialog : : OnInitDialog ( ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Get pointer to spin button .</font> </p><p><font SIZE="+0" FACE="Times New Roman">CSpinButtonCtrl * pSpin - ( CSpinButtonCtrl *) GetDlgItem (IDC_SPIN) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">ASSERT _ VALID (pSpin) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Set spin button's default position .</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">pSpin </font>—<fontFACE="Times New Roman">> SetPos (10) ;</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">return TRUE ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">其二, 可以使用<font FACE="Times New Roman">ClassWizard</font>将控件和成员变量联系起来。在<fontFACE="Times New Roman">ClassWizard</font>中简单地选择<font FACE="Times New Roman">Member Variables</font>标签,然后选择<font FACE="Times New Roman">Add Variable </font>…按钮。如果在对话资源编辑器中,按下<fontFACE="Times New Roman">Ctrl</font>键并双击控件即可转到<fontFACE="Times New Roman">Add Member Variable</font>对话。</font> </p><p><a NAME="tip34"></a><b><font SIZE="+2"><font FACE="Times New Roman">34</font><fontFACE="黑体">、如何禁止和使能控件</font></font></b> </p><p><font SIZE="+0">控件也是窗口,所以可以调用<font FACE="Times New Roman">CWnd : : EnableWindow</font>使能和禁止控件。</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Disable button controls .</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_wndOK.EnableWindow (FALSE ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_wndApply.EnableWindow (FALSE ) ;</font> </p><p><a NAME="tip35"></a><b><font SIZE="+2"><font FACE="Times New Roman">35</font><fontFACE="黑体">、如何改变控件的字体</font></font></b> </p><p><font SIZE="+0">由于控件是也是窗口,用户可以调用<fontFACE="Times New Roman">CWnd: : SetFont</font>指定新字体。该函数用一个<fontFACE="Times New Roman">Cfont</font>指针,要保证在控件撤消之前不能撤消字体对象。下例将下压按钮的字体改为<fontFACE="Times New Roman">8</font>点<font FACE="Times New Roman">Arial</font>字体:</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Declare font object in class declaration (.H file ).</font> </p><p><font SIZE="+0" FACE="Times New Roman">private :</font> </p><p><font SIZE="+0" FACE="Times New Roman">Cfont m_font ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">// Set font in class implementation (.Cpp file ). Note m_wndButton is a</font> </p><p><font SIZE="+0" FACE="Times New Roman">//member variable added by ClassWizard.DDX routines hook the member</font> </p><p><font SIZE="+0" FACE="Times New Roman">//variable to a dialog button contrlo.</font> </p><p><font SIZE="+0" FACE="Times New Roman">BOOL CSampleDialog : : OnInitDialog ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Create an 8-point Arial font</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">m_font . CreateFont (MulDiv (8 , -pDC</font>—<fontFACE="Times New Roman">> GetDeviceCaps (LOGPIXELSY) , 72).</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">0 , 0 , 0 , FW_NORMAL , 0 , 0, 0, ANSI_CHARSER, OUT_STROKE_PRECIS ,</font> </p><p><font SIZE="+0" FACE="Times New Roman">CLIP_STROKE _PRECIS , DRAFT _QUALITY</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">VARIABLE_PITCH </font>|<fontFACE="Times New Roman">FF_SWISS, _T ("Arial") );</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">//Set font for push button .</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_wndButton . SetFont (&m _font );</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><a NAME="tip36"></a><b><font SIZE="+2"><font FACE="Times New Roman">36</font><fontFACE="黑体">、如何在</font><font FACE="Times New Roman">OLE</font><fontFACE="黑体">控件中使用</font><font FACE="Times New Roman">OLE_COLOR</font><fontFACE="黑体">数据类型</font></font></b> </p><p><font SIZE="+0">诸如<font FACE="Times New Roman">COleControl : : GetFortColor</font>和<fontFACE="Times New Roman">COleControl : : GetBackColor</font>等函数返回<fontFACE="Times New Roman">OLE _COLOR</font>数据类型的颜色,而<fontFACE="Times New Roman">GDI</font>对象诸如笔和刷子使用的是<fontFACE="Times New Roman">COLORREF</font>数据类型,调用<font FACE="Times New Roman">COleControl : : TranslateColor</font>可以很容易地将<font FACE="Times New Roman">OLE_COLOR</font>类型改为<fontFACE="Times New Roman">COLORREF</font>类型。下例创建了一个当前背景颜色的刷子:</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CSampleControl : : OnDraw (CDC* pdc</font> </p><p><font SIZE="+0" FACE="Times New Roman">const Crect& rcBounds , const Crect& rcInvalid )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Create a brush of the cuttent background color .</font> </p><p><font SIZE="+0" FACE="Times New Roman">CBrush brushBack (TranslateColor (GetBackColor ( ) ) );</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Paint the background using the current background color .</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">pdc</font>—<font FACE="Times New Roman">> FilllRect (rcBounds , &brushBack) ;</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">//other drawign commands</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><a NAME="tip37"></a><b><font SIZE="+2"><font FACE="Times New Roman">37</font><fontFACE="黑体">、在不使用通用文件打开对话的情况下如何显示一个文件列表</font></font></b> </p><p><font SIZE="+0">调用<font FACE="Times New Roman">CWnd: : DlgDirList</font>或者<fontFACE="Times New Roman">CWnd: : DlgDirListComboBox</font>, <font FACE="Times New Roman">Windows </font>将自动地向列表框或组合框填充可用的驱动器名或者指定目录中的文件,下例将<fontFACE="Times New Roman">Windows</font>目录中的文件填充在组合框中:</font> </p><p><font SIZE="+0" FACE="Times New Roman">BOOL CSampleDig : : OnInitDialog ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">CDialog : : OnInitDialog ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">TCHAR szPath [MAX_PATH] = {"c:\\windows"} ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">int nReslt = DlgDirListComboBox (szPath , IDC_COMBO , IDC_CURIDIR,</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">DDL_READWRITE </font>|<fontFACE="Times New Roman">DDL_READONLY</font>|<font FACE="Times New Roman">DDL_HIDDEN</font>|</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">DDL_SYSTEM</font>|<fontFACE="Times New Roman">DDL_ARCHIVE ) ;</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">return TRUE ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><a NAME="tip38"></a><b><font SIZE="+2"><font FACE="Times New Roman">38</font><fontFACE="黑体">、为什么旋转按钮控件看起来倒转</font></font></b> </p><p><font SIZE="+0">需要调用<font FACE="Times New Roman">CSpinCtrl : : SetRange </font>设置旋转按钮控件的范围,旋转按钮控件的缺省上限为<fontFACE="Times New Roman">0</font>,缺省下限为<font FACE="Times New Roman">100</font>,这意味着增加时旋转按控件的值由<fontFACE="Times New Roman">100</font>变为<font FACE="Times New Roman">0</font>。下例将旋转按钮控件的范围设置为<fontFACE="Times New Roman">0</font>到<font FACE="Times New Roman">100</font>:</font> </p><p><font SIZE="+0" FACE="Times New Roman">BOOL CAboutDlg : : OnInitDialog ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">CDialog : : OnInitDialog ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">//set the lower and upper limit of the spin button</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_wndSpin . SetRange ( 0 ,100 ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">return TRUE ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">Visual C++ 4.0 Print</font>对话中的<fontFACE="Times New Roman">Copise</font>旋转按钮控件也有同样的问题:按下<fontFACE="Times New Roman">Up</font>按钮时拷贝的数目减少,而按下<fontFACE="Times New Roman">Down </font>按钮时拷贝的数目增加。</font> </p><p><a NAME="tip39"></a><b><font SIZE="+2"><font FACE="Times New Roman">39</font><fontFACE="黑体">为什么旋转按钮控件不能自动地更新它下面的编辑控件</font></font></b> </p><p><font SIZE="+0">如果使用旋转按钮的<font FACE="Times New Roman">autu buddy</font>特性, 则必须保证在对话的标记顺序中<font FACE="Times New Roman">buddy</font>窗口优先于旋转按钮控件。从<fontFACE="Times New Roman">Layout</font>菜单中选择<font FACE="Times New Roman">Tab Order</font>菜单项(或者按下<fontFACE="Times New Roman">Crtl+D</font>)可以设置对话的标签顺序。</font> </p><p><a NAME="tip40"></a><b><font SIZE="+2"><font FACE="Times New Roman">40</font><fontFACE="黑体">、如何用位图显示下压按钮</font></font></b> </p><p><font SIZE="+0"><font FACE="Times New Roman">Windows 95</font>按钮有几处新的创建风格,尤其是<fontFACE="Times New Roman">BS_BITMAP</font>和<font FACE="Times New Roman">BS_ICON</font>,要想具有位图按钮,创建按钮和调用<fontFACE="Times New Roman">CButton : : SetBitmap</font>或<font FACE="Times New Roman">CButton : : SetIcon</font>时要指定<font FACE="Times New Roman">BS_BITMAP</font>或<fontFACE="Times New Roman">BS_ICON</font>风格。</font> </p><p><font SIZE="+0">首先,设置按钮的图标属性。</font> </p><p><font SIZE="+0">然后,当对话初始化时调用<font FACE="Times New Roman">CButton: : SetIcon</font>。注意:下例用图标代替位图,使用位图时要小心,因为不知道背景所有的颜色——并非每个人都使用浅灰色。</font> </p><p><font SIZE="+0" FACE="Times New Roman">BOOL CSampleDlg : : OnInitDialog ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">CDialog : : OnInitDialog ( ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">//set the images for the push buttons .</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">m_wndButton1.SetIcon (AfxGetApp ( ) </font>—<fontFACE="Times New Roman">> LoadIcon (IDI _ IPTION1) )</font></font> </p><p><font SIZE="+0"><font FACE="Times New Roman">m_wndButton2.SetIcon (AfxGetApp ( ) </font>—<fontFACE="Times New Roman">> LoadIcon (IDI _ IPTION2) )</font></font> </p><p><font SIZE="+0"><font FACE="Times New Roman">m_wndButton3.SetIcon (AfxGetApp ( ) </font>—<fontFACE="Times New Roman">> LoadIcon (IDI _ IPTION3) )</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">return TRUE ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><hr><p> <a HREF="skill.htm">返回上页</a> </p></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -