MFC按鈕
1) 按鈕
在Page1中加入按鈕資源,並加入按鈕設置風格相關的選擇框,在CMFCButton中可以設置按鈕的圖標、圖標和文本的位置、信息提示等
m_bRightImage設置圖標是否靠右;
m_bTopImage設置圖標是否朝上;
m_nFlatStyle設置按鈕的屬性;
SetImage設置按鈕上的圖標,其中參數1爲正常狀態下的圖標,參數2爲鼠標置於其上的圖標,參數3爲禁止狀態下的圖標,如果設置爲NULL則表示按鈕上沒有圖標;
SetMouseCursor()設置位於按鈕上的鼠標狀態,
m_Button.SetMouseCursor(NULL);
m_Button.SetMouseCursorHand();
m_Button.SetMouseCursor(AfxGetApp()->LoadCursor(IDC_CURSOR));
SizetoContent()使得按鈕大小和其上的內容相一致
2) 單選按鈕
在資源對話框中加入單選按鈕,並定義變量爲CMFCButton型,分別設置當前圖標和Check圖標
m_btnRadio1.m_nFlatStyle= CMFCButton::BUTTONSTYLE_SEMIFLAT;
m_btnRadio2.m_nFlatStyle= CMFCButton::BUTTONSTYLE_SEMIFLAT;
m_btnRadio3.m_nFlatStyle =CMFCButton::BUTTONSTYLE_SEMIFLAT;
m_btnRadio4.m_nFlatStyle =CMFCButton::BUTTONSTYLE_SEMIFLAT;
m_btnRadio1.SetImage( IDB_RADIO_OFF);
m_btnRadio2.SetImage( IDB_RADIO_OFF);
m_btnRadio3.SetImage( IDB_RADIO_OFF);
m_btnRadio4.SetImage( IDB_RADIO_OFF);
m_btnRadio1.SetCheckedImage(IDB_RADIO_ON);
m_btnRadio2.SetCheckedImage(IDB_RADIO_ON);
m_btnRadio3.SetCheckedImage(IDB_RADIO_ON);
m_btnRadio4.SetCheckedImage(IDB_RADIO_ON);
m_btnRadio1.SizeToContent();
m_btnRadio2.SizeToContent();
m_btnRadio3.SizeToContent();
m_btnRadio4.SizeToContent();
m_btnRadio1.SetCheck(TRUE);
3) 複選按鈕
在資源對話框中加入複選按鈕,並定義變量爲CMFCButton型,分別設置當前圖標和Check圖標。
m_CheckBut.SetImage(IDB_CHECKNO);
m_CheckBut.SetCheckedImage(IDB_CHECK);
m_CheckBut.m_nFlatStyle= CMFCButton::BUTTONSTYLE_SEMIFLAT;
m_CheckBut.SizeToContent();
4) Windows XP風格按鈕
CMFCButton默認爲XP類型的按鈕,能夠根據設定的風格顯示相應界面的風格,也可去掉這樣的風格,成爲普通的按鈕。
UpdateData();
CMFCButton::EnableWindowsTheming(m_XPStyle);
RedrawWindow();
5) 帶菜單的按鈕設計
在資源中加入加入按鈕控件,並定義變量CMFCMenuButton類型,利用該類的成員函數加入相應的菜單資源,並設置屬性
m_menu.LoadMenu(IDR_MENU1);
m_MenuBut.m_hMenu= m_menu.GetSubMenu(0)->GetSafeHmenu();
m_MenuBut.SizeToContent();
m_MenuBut.m_bOSMenu= TRUE;
m_MenuBut.m_bRightArrow= TRUE;
m_MenuBut.m_bStayPressed = TRUE;
m_MenuBut.m_bDefaultClick= TRUE;
CMFCToolBar::AddToolBarForImageCollection(IDR_TOOLBAR_MENU_IMAGES);
按鈕菜單的選擇,判斷選擇的是那一個菜單
CStringstrItem;
switch(m_MenuBut.m_nMenuResult)
{
case ID_MENU_MENUITEM1:
strItem= _T("Menu item1");
break;
case ID_MENU_MENUITEM2:
strItem= _T("Menu item2");
break;
case ID_MENU_MENUITEM3:
strItem= _T("Menu item3");
break;
case ID_MENU_MENUITEM4:
strItem= _T("Menu item4");
break;
}
AfxMessageBox(strItem);
有關各種按鈕的控制界面如下: