动态创建按钮控件及其常用函数介绍(VC++)
消息定义原型如下:
在XXXDlg.h中定义:
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CPushButtonDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnPushme();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
消息映射入口。它位于实现文件中XXXDlg.cpp;代码片断如下:
BEGIN_MESSAGE_MAP(CPushButtonDlg, CDialog)
//{{AFX_MSG_MAP(CPushButtonDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_PUSHME, OnPushme)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
其中第一个参数IDC_PUSHME为控件的标识符,第二个参数OnPushmeo为相应的消息处理函数。
常用成员操作函数。
l GetState:获取按钮的选择状态,高亮状态以及焦点状态。函数原型为
UNIT GetState() const;
例:如下这段代码创建按钮并反转其高亮状态。
m_myButton = newCButton;
//创建下压按钮
m_myButton->Create(_T("Mybutton"), S_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
CRect(10,10,100,30),this,1);
//反转其高亮状态
m_myButton->SetState(!(m_myButton->GetState() && 0x0004));
l SetState:设置按钮的高亮状态。函数原型为
void SetState(BOOL,bHightlight);
例:如下代码创建按钮并设置其状态为按下。
m_myButton = newCButton;
//创建下压按钮
m_myButton->Create(_T("Mybutton"), S_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
CRect(10,10,100,30),this,1);
//设置其状态为按下
m_myButton->SetState(!(m_myButton->GetState() && 0x0004));
l GetCheck():获取按钮的选中状态。函数原型为
int GetCheck() const;
例:如下这段代码创建按钮关设置其选中状态为三态的下一个状态。
m_myButton = new CButton;
//创建三态按钮
m_myButton->Create(_T("Mybutton"), S_CHILD|WS_VISIBLE|BS_AUTO3STATE,
CRect(10,10,100,30),this,1);
//设置其选中状态为三态的下一个状态
//(即0到1, 1 到2, 2 到0).
m_myButton->SetCheck(m_myButton->GetCheck() % 3);
l SetCheck:设置按钮的选中状态。函数原型为
void SetCheck( int nCheck );
例:如下这段代码创建一三态按钮并设置其选中状态为中间态。
m_myButton = new CButton;
//创建三态按钮
m_myButton->Create(_T("Mybutton"), S_CHILD|WS_VISIBLE|BS_AUTO3STATE,
CRect(10,10,100,30),this,1);
//设置其选中状态为中间态
m_myButton->SetCheck(2);
l GetButtonStyle:获取按钮样式信息。函数原型为
UINT GetButtonStyle() const;
例:如下这段代码创建一三态按钮并使用其中一种“自动”样式设置按钮,如把一般下压按钮变为默认下压按钮。
m_myButton = new CButton;
//创建三态按钮
m_myButton->Create(_T("Mybutton"), S_CHILD|WS_VISIBLE|BS_AUTO3STATE,
CRect(10,10,100,30),this,1);
//使用其中一种“自动”样式设置按钮,如把一般下压按钮变为默认下压钮
UINT uStyle = m_myButton->GetButtonStyle();
if ( uStyle & BS_PUSHBUTTON )
uStyle = (uStyle & ~ BS_PUSHBUTTON) | BS_DEFPUSHBUTTON;
else if (uStyle & BS_RADIOBUTTON)
uStyle = (uStyle & ~ BS_RADIOBUTTON) | BS_AUTORADIOBUTTON;
else if (uStyle & BS_CHECKBOX)
uStyle = (uStyle & ~ BS_CHECKBOX) | BS_AUTOCHECKBOX;
else if (uStyle & BS_3STATE)
uStyle = (uStyle & ~ BS_3STATE) | BS_AUTO3STATE;
m_myButton->SetButtonStyle(uStyle);
l SetButtonStyle:改变按钮样式。函数原型为
void SetButtonStyle(UINT nStyle,BOOL bRedraw=TRUE);
例如:如下代码创建三态按键样式并改变按钮样式为自动复选框。
m_myButton = new CButton;
//创建三态按钮
m_myButton->Create(_T("Mybutton"), S_CHILD|WS_VISIBLE|BS_AUTO3STATE,
CRect(10,10,100,30),this,1);
//改变按钮样式为自动复选框
m_myButton->SetButtonStyle(BS_AUTOCHECKBOX);
l GetIcon:获取用SetIcon()设置的图标句柄。函数原型为:
HICON GetIcon()const;
例:如下代码创建一显示图标按钮。
m_myButton = new CButton;
//创建可显示图标的按钮
m_myButton->Create(_T("Mybutton"), S_CHILD|WS_VISIBLE|BS_ICON,
CRect(10,10,100,30),this,1);
//如果按钮没有定义图标,用系统的报错图标定义之
if(m_myButton->GetIcon == NULL)
m_myButton->SetIcon(::LoadIcon(NULL,IDI_ERROR));
l SetIcon:设置一图标,将其显示在按钮上。函数原型为:
HICON SetIcon(HICON hIcon);
例:如下代码创建一可显示图标按钮并将图标设置为系统询问图标。
m_myButton = new CButton;
//创建可显示图标的按钮
m_myButton->Create(_T("Mybutton"), S_CHILD|WS_VISIBLE|BS_ICON,
CRect(10,10,100,30),this,1);
//如果按钮没有定义图标,用系统的报错图标定义之
if(m_myButton->GetIcon == NULL)
//设置图标按钮图标为系统询问图标
m_myButton->SetIcon(::LoadIcon(NULL,IDI_QUESTION));
l GetBitMap:获取先前用SetBitMap设置的按钮位图句柄。函数原型为:
HBITMAP GetBitMap()const;
例:如下代码创建一可显示位图按钮并显示系统关闭位图。
m_myButton = new CButton;
//创建可显示位图的按钮
m_myButton->Create(_T("Mybutton"), S_CHILD|WS_VISIBLE|BS_BITMAP,
CRect(10,10,100,30),this,1);
//在按钮上显示系统关闭位图
if(m_myButton->GetIcon == NULL)
if(m_myButton->GetBitmap() == NULL)
m_myButton->SetBitmap(::LoadBitmap(NULL,MAKEINTRESOURCE(OBM_CLOSE)));
l SetBitMap:设置按钮上显示的位图。函数原型为:
HBITMAP SetBitMap(HBITMAP hBitmap);
例如:如下代码创建一可显示位图按钮并在其上显示系统的复选按钮标记位图。
m_myButton = new CButton;
//创建可显示位图的按钮
m_myButton->Create(_T("Mybutton"), S_CHILD|WS_VISIBLE|BS_BITMAP,
CRect(10,10,100,30),this,1);
//在按钮上显示系统的复选按钮标记位图
if(m_myButton->GetIcon == NULL)
m_myButton->SetBitmap(::LoadBitmap(NULL,MAKEINTRESOURCE(OBM_CHECK)));
l GetCursor:获取先前用SetCursor设置的光标句柄。函数原型为:
HCURSOR GetCursor();
例:如下代码创建一可显示图标按钮并在设置关联光标为系统帮助光标。
m_myButton = new CButton;
//创建可显示图标的按钮
m_myButton->Create(_T("Mybutton"), S_CHILD|WS_VISIBLE|BS_BITMAP,
CRect(10,10,100,30),this,1);
//设置关联光标为系统帮助光标
if(m_myButton->GetCursor() == NULL)
m_myButton->SetCursor(::LoadCursor(NULL,IDC_HELP));
l SetCursor:为按钮设置相关联的光标。函数原型为:
HCURSOR SetCursor( HCURSOR hCursor );
例如下代码创建一可显示图标按钮并在设置关联光标为程序启动时的箭头加漏斗光标。
m_myButton = new CButton;
//创建可显示图标的按钮
m_myButton->Create(_T("Mybutton"), S_CHILD|WS_VISIBLE|BS_BITMAP,
CRect(10,10,100,30),this,1);
//设置关联光标为程序启动时的箭头加漏斗光标
m_myButton->SetCursor(::LoadCursor(NULL,IDC_APPSTARTING));