⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 visual c++编程技巧之五.htm

📁 载之“阿蒙编程乐园”
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0038)http://www.vchome.net/tech/vctip5.html -->
<HTML><HEAD><TITLE>Visual C++编程技巧之五</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 5.50.4134.100" name=GENERATOR>
<META content=sss name=doccomm>
<META content=C:\MSOffice\Template\Sl_BOOK.dot name=Template>
<META content="Cheng Jinxing" name=Author></HEAD>
<BODY text=#000000 vLink=#551a8b aLink=#ff0000 link=#0000ee bgColor=#ccffff>
<P align=center><BR><FONT face=楷体_GB2312 size=+3>Visual C++编程技巧之五</FONT> </P>
<P><A href="http://www.vchome.net/tech/vctip5.html#tip33"><FONT 
face="Times New Roman" size=+0>33</FONT><FONT size=+0>、如何获取一个对话控件的指针</FONT></A> 
</P>
<P><A href="http://www.vchome.net/tech/vctip5.html#tip34"><FONT 
face="Times New Roman" size=+0>34</FONT><FONT size=+0>、如何禁止和使能控件</FONT></A> </P>
<P><A href="http://www.vchome.net/tech/vctip5.html#tip35"><FONT 
face="Times New Roman" size=+0>35</FONT><FONT size=+0>、如何改变控件的字体</FONT></A> </P>
<P><A href="http://www.vchome.net/tech/vctip5.html#tip36"><FONT 
face="Times New Roman" size=+0>36</FONT><FONT size=+0>、如何在</FONT><FONT 
face="Times New Roman" size=+0>OLE</FONT><FONT size=+0>控件中使用</FONT><FONT 
face="Times New Roman" size=+0>OLE_COLOR</FONT><FONT size=+0>数据类型</FONT></A> 
</P>
<P><A href="http://www.vchome.net/tech/vctip5.html#tip37"><FONT 
face="Times New Roman" size=+0>37</FONT><FONT 
size=+0>、在不使用通用文件打开对话的情况下如何显示一个文件列表</FONT></A> </P>
<P><A href="http://www.vchome.net/tech/vctip5.html#tip38"><FONT 
face="Times New Roman" size=+0>38</FONT><FONT size=+0>、为什么旋转按钮控件看起来倒转</FONT></A> 
</P>
<P><A href="http://www.vchome.net/tech/vctip5.html#tip39"><FONT 
face="Times New Roman" size=+0>39 </FONT><FONT 
size=+0>为什么旋转按钮控件不能自动地更新它下面的编辑控件</FONT></A> </P>
<P><A href="http://www.vchome.net/tech/vctip5.html#tip40"><FONT 
face="Times New Roman" size=+0>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><FONT face=黑体>、如何获取一个对话控件的指针</FONT></FONT></B> 
</P>
<P><FONT size=+0>有两种方法。其一,调用<FONT face="Times New Roman">CWnd: : 
GetDlgItem</FONT>,获取一个<FONT 
face="Times New Roman">CWnd*</FONT>指针调用成员函数。下例调用<FONT 
face="Times New Roman">GetDlgItem</FONT>,将返回值传给一个<FONT 
face="Times New Roman">CSpinButtonCtrl*</FONT>以便调用<FONT 
face="Times New Roman">CSpinButtonCtrl : : SetPos </FONT>函数:</FONT> </P>
<P><FONT face="Times New Roman" size=+0>BOOL CSampleDialog : : OnInitDialog ( 
)</FONT> </P>
<P><FONT face="Times New Roman" size=+0>{</FONT> </P>
<P><FONT face="Times New Roman" size=+0>CDialog : : OnInitDialog ( ) ;</FONT> 
</P>
<P><FONT face="Times New Roman" size=+0>//Get pointer to spin button .</FONT> 
</P>
<P><FONT face="Times New Roman" size=+0>CSpinButtonCtrl * pSpin - ( 
CSpinButtonCtrl *) GetDlgItem (IDC_SPIN) ;</FONT> </P>
<P><FONT face="Times New Roman" size=+0>ASSERT _ VALID (pSpin) ;</FONT> </P>
<P><FONT face="Times New Roman" size=+0>//Set spin button's default position 
.</FONT> </P>
<P><FONT size=+0><FONT face="Times New Roman">pSpin </FONT>—<FONT 
face="Times New Roman">&gt; SetPos (10) ;</FONT></FONT> </P>
<P><FONT face="Times New Roman" size=+0>return TRUE ;</FONT> </P>
<P><FONT face="Times New Roman" size=+0>}</FONT> </P>
<P><FONT size=+0>其二, 可以使用<FONT 
face="Times New Roman">ClassWizard</FONT>将控件和成员变量联系起来。在<FONT 
face="Times New Roman">ClassWizard</FONT>中简单地选择<FONT 
face="Times New Roman">Member Variables</FONT>标签,然后选择<FONT 
face="Times New Roman">Add Variable </FONT>…按钮。如果在对话资源编辑器中,按下<FONT 
face="Times New Roman">Ctrl</FONT>键并双击控件即可转到<FONT face="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><FONT face=黑体>、如何禁止和使能控件</FONT></FONT></B> </P>
<P><FONT size=+0>控件也是窗口,所以可以调用<FONT face="Times New Roman">CWnd : : 
EnableWindow</FONT>使能和禁止控件。</FONT> </P>
<P><FONT face="Times New Roman" size=+0>//Disable button controls .</FONT> </P>
<P><FONT face="Times New Roman" size=+0>m_wndOK.EnableWindow (FALSE ) ;</FONT> 
</P>
<P><FONT face="Times New Roman" size=+0>m_wndApply.EnableWindow (FALSE ) 
;</FONT> </P>
<P><A name=tip35></A><B><FONT size=+2><FONT 
face="Times New Roman">35</FONT><FONT face=黑体>、如何改变控件的字体</FONT></FONT></B> </P>
<P><FONT size=+0>由于控件是也是窗口,用户可以调用<FONT face="Times New Roman">CWnd: : 
SetFont</FONT>指定新字体。该函数用一个<FONT 
face="Times New Roman">Cfont</FONT>指针,要保证在控件撤消之前不能撤消字体对象。下例将下压按钮的字体改为<FONT 
face="Times New Roman">8</FONT>点<FONT 
face="Times New Roman">Arial</FONT>字体:</FONT> </P>
<P><FONT face="Times New Roman" size=+0>//Declare font object in class 
declaration (.H file ).</FONT> </P>
<P><FONT face="Times New Roman" size=+0>private :</FONT> </P>
<P><FONT face="Times New Roman" size=+0>Cfont m_font ;</FONT> </P>
<P><FONT face="Times New Roman" size=+0>// Set font in class implementation 
(.Cpp file ). Note m_wndButton is a</FONT> </P>
<P><FONT face="Times New Roman" size=+0>//member variable added by 
ClassWizard.DDX routines hook the member</FONT> </P>
<P><FONT face="Times New Roman" size=+0>//variable to a dialog button 
contrlo.</FONT> </P>
<P><FONT face="Times New Roman" size=+0>BOOL CSampleDialog : : OnInitDialog ( 
)</FONT> </P>
<P><FONT face="Times New Roman" size=+0>{</FONT> </P>
<P><FONT size=+0>…</FONT> </P>
<P><FONT face="Times New Roman" size=+0>//Create an 8-point Arial font</FONT> 
</P>
<P><FONT size=+0><FONT face="Times New Roman">m_font . CreateFont (MulDiv (8 , 
-pDC</FONT>—<FONT face="Times New Roman">&gt; GetDeviceCaps (LOGPIXELSY) , 
72).</FONT></FONT> </P>
<P><FONT face="Times New Roman" size=+0>0 , 0 , 0 , FW_NORMAL , 0 , 0, 0, 
ANSI_CHARSER, OUT_STROKE_PRECIS ,</FONT> </P>
<P><FONT face="Times New Roman" size=+0>CLIP_STROKE _PRECIS , DRAFT 
_QUALITY</FONT> </P>
<P><FONT size=+0><FONT face="Times New Roman">VARIABLE_PITCH </FONT>|<FONT 
face="Times New Roman">FF_SWISS, _T ("Arial") );</FONT></FONT> </P>
<P><FONT face="Times New Roman" size=+0>//Set font for push button .</FONT> </P>
<P><FONT face="Times New Roman" size=+0>m_wndButton . SetFont (&amp;m _font 
);</FONT> </P>
<P><FONT size=+0>…</FONT> </P>
<P><FONT face="Times New Roman" size=+0>}</FONT> </P>
<P><A name=tip36></A><B><FONT size=+2><FONT 
face="Times New Roman">36</FONT><FONT face=黑体>、如何在</FONT><FONT 
face="Times New Roman">OLE</FONT><FONT face=黑体>控件中使用</FONT><FONT 
face="Times New Roman">OLE_COLOR</FONT><FONT face=黑体>数据类型</FONT></FONT></B> </P>
<P><FONT size=+0>诸如<FONT face="Times New Roman">COleControl : : 
GetFortColor</FONT>和<FONT face="Times New Roman">COleControl : : 
GetBackColor</FONT>等函数返回<FONT face="Times New Roman">OLE 
_COLOR</FONT>数据类型的颜色,而<FONT face="Times New Roman">GDI</FONT>对象诸如笔和刷子使用的是<FONT 
face="Times New Roman">COLORREF</FONT>数据类型,调用<FONT 
face="Times New Roman">COleControl : : TranslateColor</FONT>可以很容易地将<FONT 
face="Times New Roman">OLE_COLOR</FONT>类型改为<FONT 
face="Times New Roman">COLORREF</FONT>类型。下例创建了一个当前背景颜色的刷子:</FONT> </P>
<P><FONT face="Times New Roman" size=+0>void CSampleControl : : OnDraw (CDC* 
pdc</FONT> </P>
<P><FONT face="Times New Roman" size=+0>const Crect&amp; rcBounds , const 
Crect&amp; rcInvalid )</FONT> </P>
<P><FONT face="Times New Roman" size=+0>{</FONT> </P>
<P><FONT face="Times New Roman" size=+0>//Create a brush of the cuttent 
background color .</FONT> </P>
<P><FONT face="Times New Roman" size=+0>CBrush brushBack (TranslateColor 
(GetBackColor ( ) ) );</FONT> </P>
<P><FONT face="Times New Roman" size=+0>//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">&gt; FilllRect (rcBounds , &amp;brushBack) 
;</FONT></FONT> </P>
<P><FONT face="Times New Roman" size=+0>//other drawign commands</FONT> </P>
<P><FONT size=+0>…</FONT> </P>
<P><FONT face="Times New Roman" size=+0>}</FONT> </P>
<P><A name=tip37></A><B><FONT size=+2><FONT 
face="Times New Roman">37</FONT><FONT 
face=黑体>、在不使用通用文件打开对话的情况下如何显示一个文件列表</FONT></FONT></B> </P>
<P><FONT size=+0>调用<FONT face="Times New Roman">CWnd: : DlgDirList</FONT>或者<FONT 
face="Times New Roman">CWnd: : DlgDirListComboBox</FONT>, <FONT 
face="Times New Roman">Windows </FONT>将自动地向列表框或组合框填充可用的驱动器名或者指定目录中的文件,下例将<FONT 
face="Times New Roman">Windows</FONT>目录中的文件填充在组合框中:</FONT> </P>
<P><FONT face="Times New Roman" size=+0>BOOL CSampleDig : : OnInitDialog ( 
)</FONT> </P>
<P><FONT face="Times New Roman" size=+0>{</FONT> </P>
<P><FONT face="Times New Roman" size=+0>CDialog : : OnInitDialog ( )</FONT> </P>
<P><FONT face="Times New Roman" size=+0>TCHAR szPath [MAX_PATH] = 
{"c:\\windows"} ;</FONT> </P>
<P><FONT face="Times New Roman" size=+0>int nReslt = DlgDirListComboBox (szPath 
, IDC_COMBO , IDC_CURIDIR,</FONT> </P>
<P><FONT size=+0><FONT face="Times New Roman">DDL_READWRITE </FONT>|<FONT 
face="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>|<FONT 
face="Times New Roman">DDL_ARCHIVE ) ;</FONT></FONT> </P>
<P><FONT face="Times New Roman" size=+0>return TRUE ;</FONT> </P>
<P><FONT face="Times New Roman" size=+0>}</FONT> </P>
<P><A name=tip38></A><B><FONT size=+2><FONT 
face="Times New Roman">38</FONT><FONT face=黑体>、为什么旋转按钮控件看起来倒转</FONT></FONT></B> 
</P>
<P><FONT size=+0>需要调用<FONT face="Times New Roman">CSpinCtrl : : SetRange 
</FONT>设置旋转按钮控件的范围,旋转按钮控件的缺省上限为<FONT face="Times New Roman">0</FONT>,缺省下限为<FONT 
face="Times New Roman">100</FONT>,这意味着增加时旋转按控件的值由<FONT 
face="Times New Roman">100</FONT>变为<FONT 
face="Times New Roman">0</FONT>。下例将旋转按钮控件的范围设置为<FONT 
face="Times New Roman">0</FONT>到<FONT face="Times New Roman">100</FONT>:</FONT> 
</P>
<P><FONT face="Times New Roman" size=+0>BOOL CAboutDlg : : OnInitDialog ( 
)</FONT> </P>
<P><FONT face="Times New Roman" size=+0>{</FONT> </P>
<P><FONT face="Times New Roman" size=+0>CDialog : : OnInitDialog ( )</FONT> </P>
<P><FONT face="Times New Roman" size=+0>//set the lower and upper limit of the 
spin button</FONT> </P>
<P><FONT face="Times New Roman" size=+0>m_wndSpin . SetRange ( 0 ,100 ) ;</FONT> 
</P>
<P><FONT face="Times New Roman" size=+0>return TRUE ;</FONT> </P>
<P><FONT face="Times New Roman" size=+0>}</FONT> </P>
<P><FONT size=+0><FONT face="Times New Roman">Visual C++ 4.0 
Print</FONT>对话中的<FONT face="Times New Roman">Copise</FONT>旋转按钮控件也有同样的问题:按下<FONT 
face="Times New Roman">Up</FONT>按钮时拷贝的数目减少,而按下<FONT face="Times New Roman">Down 
</FONT>按钮时拷贝的数目增加。</FONT> </P>
<P><A name=tip39></A><B><FONT size=+2><FONT 
face="Times New Roman">39</FONT><FONT 
face=黑体>为什么旋转按钮控件不能自动地更新它下面的编辑控件</FONT></FONT></B> </P>
<P><FONT size=+0>如果使用旋转按钮的<FONT face="Times New Roman">autu buddy</FONT>特性, 
则必须保证在对话的标记顺序中<FONT face="Times New Roman">buddy</FONT>窗口优先于旋转按钮控件。从<FONT 
face="Times New Roman">Layout</FONT>菜单中选择<FONT face="Times New Roman">Tab 
Order</FONT>菜单项(或者按下<FONT 
face="Times New Roman">Crtl+D</FONT>)可以设置对话的标签顺序。</FONT> </P>
<P><A name=tip40></A><B><FONT size=+2><FONT 
face="Times New Roman">40</FONT><FONT face=黑体>、如何用位图显示下压按钮</FONT></FONT></B> 
</P>
<P><FONT size=+0><FONT face="Times New Roman">Windows 
95</FONT>按钮有几处新的创建风格,尤其是<FONT face="Times New Roman">BS_BITMAP</FONT>和<FONT 
face="Times New Roman">BS_ICON</FONT>,要想具有位图按钮,创建按钮和调用<FONT 
face="Times New Roman">CButton : : SetBitmap</FONT>或<FONT 
face="Times New Roman">CButton : : SetIcon</FONT>时要指定<FONT 
face="Times New Roman">BS_BITMAP</FONT>或<FONT 
face="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 face="Times New Roman" size=+0>BOOL CSampleDlg : : OnInitDialog ( 
)</FONT> </P>
<P><FONT face="Times New Roman" size=+0>{</FONT> </P>
<P><FONT face="Times New Roman" size=+0>CDialog : : OnInitDialog ( ) ;</FONT> 
</P>
<P><FONT face="Times New Roman" size=+0>//set the images for the push buttons 
.</FONT> </P>
<P><FONT size=+0><FONT face="Times New Roman">m_wndButton1.SetIcon (AfxGetApp ( 
) </FONT>—<FONT face="Times New Roman">&gt; LoadIcon (IDI _ IPTION1) 
)</FONT></FONT> </P>
<P><FONT size=+0><FONT face="Times New Roman">m_wndButton2.SetIcon (AfxGetApp ( 
) </FONT>—<FONT face="Times New Roman">&gt; LoadIcon (IDI _ IPTION2) 
)</FONT></FONT> </P>
<P><FONT size=+0><FONT face="Times New Roman">m_wndButton3.SetIcon (AfxGetApp ( 
) </FONT>—<FONT face="Times New Roman">&gt; LoadIcon (IDI _ IPTION3) 
)</FONT></FONT> </P>
<P><FONT face="Times New Roman" size=+0>return TRUE ;</FONT> </P>
<P><FONT face="Times New Roman" size=+0>}</FONT> </P>
<HR>

<P>&nbsp;<A 
href="http://www.vchome.net/tech/skill.htm">返回上页</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</P></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -