?? vctip5.html
字號(hào):
<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">、如何獲取一個(gè)對話控件的指針</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">數(shù)據(jù)類型</font></a> </p><p><a HREF="#tip37"><font SIZE="+0" FACE="Times New Roman">37</font><font SIZE="+0">、在不使用通用文件打開對話的情況下如何顯示一個(gè)文件列表</font></a> </p><p><a HREF="#tip38"><font SIZE="+0" FACE="Times New Roman">38</font><font SIZE="+0">、為什么旋轉(zhuǎn)按鈕控件看起來倒轉(zhuǎn)</font></a> </p><p><a HREF="#tip39"><font SIZE="+0" FACE="Times New Roman">39 </font><font SIZE="+0">為什么旋轉(zhuǎn)按鈕控件不能自動(dòng)地更新它下面的編輯控件</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="黑體">、如何獲取一個(gè)對話控件的指針</font></font></b> </p><p><font SIZE="+0">有兩種方法。其一,調(diào)用<font FACE="Times New Roman">CWnd: : GetDlgItem</font>,獲取一個(gè)<font FACE="Times New Roman">CWnd*</font>指針調(diào)用成員函數(shù)。下例調(diào)用<fontFACE="Times New Roman">GetDlgItem</font>,將返回值傳給一個(gè)<fontFACE="Times New Roman">CSpinButtonCtrl*</font>以便調(diào)用<font FACE="Times New Roman">CSpinButtonCtrl : : SetPos </font>函數(shù):</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>將控件和成員變量聯(lián)系起來。在<fontFACE="Times New Roman">ClassWizard</font>中簡單地選擇<font FACE="Times New Roman">Member Variables</font>標(biāo)簽,然后選擇<font FACE="Times New Roman">Add Variable </font>…按鈕。如果在對話資源編輯器中,按下<fontFACE="Times New Roman">Ctrl</font>鍵并雙擊控件即可轉(zhuǎn)到<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">控件也是窗口,所以可以調(diào)用<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">由于控件是也是窗口,用戶可以調(diào)用<fontFACE="Times New Roman">CWnd: : SetFont</font>指定新字體。該函數(shù)用一個(gè)<fontFACE="Times New Roman">Cfont</font>指針,要保證在控件撤消之前不能撤消字體對象。下例將下壓按鈕的字體改為<fontFACE="Times New Roman">8</font>點(diǎn)<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="黑體">數(shù)據(jù)類型</font></font></b> </p><p><font SIZE="+0">諸如<font FACE="Times New Roman">COleControl : : GetFortColor</font>和<fontFACE="Times New Roman">COleControl : : GetBackColor</font>等函數(shù)返回<fontFACE="Times New Roman">OLE _COLOR</font>數(shù)據(jù)類型的顏色,而<fontFACE="Times New Roman">GDI</font>對象諸如筆和刷子使用的是<fontFACE="Times New Roman">COLORREF</font>數(shù)據(jù)類型,調(diào)用<font FACE="Times New Roman">COleControl : : TranslateColor</font>可以很容易地將<font FACE="Times New Roman">OLE_COLOR</font>類型改為<fontFACE="Times New Roman">COLORREF</font>類型。下例創(chuàng)建了一個(gè)當(dāng)前背景顏色的刷子:</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="黑體">、在不使用通用文件打開對話的情況下如何顯示一個(gè)文件列表</font></font></b> </p><p><font SIZE="+0">調(diào)用<font FACE="Times New Roman">CWnd: : DlgDirList</font>或者<fontFACE="Times New Roman">CWnd: : DlgDirListComboBox</font>, <font FACE="Times New Roman">Windows </font>將自動(dòng)地向列表框或組合框填充可用的驅(qū)動(dòng)器名或者指定目錄中的文件,下例將<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="黑體">、為什么旋轉(zhuǎn)按鈕控件看起來倒轉(zhuǎn)</font></font></b> </p><p><font SIZE="+0">需要調(diào)用<font FACE="Times New Roman">CSpinCtrl : : SetRange </font>設(shè)置旋轉(zhuǎn)按鈕控件的范圍,旋轉(zhuǎn)按鈕控件的缺省上限為<fontFACE="Times New Roman">0</font>,缺省下限為<font FACE="Times New Roman">100</font>,這意味著增加時(shí)旋轉(zhuǎn)按控件的值由<fontFACE="Times New Roman">100</font>變?yōu)?lt;font FACE="Times New Roman">0</font>。下例將旋轉(zhuǎn)按鈕控件的范圍設(shè)置為<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>旋轉(zhuǎn)按鈕控件也有同樣的問題:按下<fontFACE="Times New Roman">Up</font>按鈕時(shí)拷貝的數(shù)目減少,而按下<fontFACE="Times New Roman">Down </font>按鈕時(shí)拷貝的數(shù)目增加。</font> </p><p><a NAME="tip39"></a><b><font SIZE="+2"><font FACE="Times New Roman">39</font><fontFACE="黑體">為什么旋轉(zhuǎn)按鈕控件不能自動(dòng)地更新它下面的編輯控件</font></font></b> </p><p><font SIZE="+0">如果使用旋轉(zhuǎn)按鈕的<font FACE="Times New Roman">autu buddy</font>特性, 則必須保證在對話的標(biāo)記順序中<font FACE="Times New Roman">buddy</font>窗口優(yōu)先于旋轉(zhuǎn)按鈕控件。從<fontFACE="Times New Roman">Layout</font>菜單中選擇<font FACE="Times New Roman">Tab Order</font>菜單項(xiàng)(或者按下<fontFACE="Times New Roman">Crtl+D</font>)可以設(shè)置對話的標(biāo)簽順序。</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>按鈕有幾處新的創(chuàng)建風(fēng)格,尤其是<fontFACE="Times New Roman">BS_BITMAP</font>和<font FACE="Times New Roman">BS_ICON</font>,要想具有位圖按鈕,創(chuàng)建按鈕和調(diào)用<fontFACE="Times New Roman">CButton : : SetBitmap</font>或<font FACE="Times New Roman">CButton : : SetIcon</font>時(shí)要指定<font FACE="Times New Roman">BS_BITMAP</font>或<fontFACE="Times New Roman">BS_ICON</font>風(fēng)格。</font> </p><p><font SIZE="+0">首先,設(shè)置按鈕的圖標(biāo)屬性。</font> </p><p><font SIZE="+0">然后,當(dāng)對話初始化時(shí)調(diào)用<font FACE="Times New Roman">CButton: : SetIcon</font>。注意:下例用圖標(biāo)代替位圖,使用位圖時(shí)要小心,因?yàn)椴恢辣尘八械念伾⒎敲總€(gè)人都使用淺灰色。</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>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -