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