程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> VC++ 動態生成 成組的 RadioButton 按鈕組,vcradiobutton

VC++ 動態生成 成組的 RadioButton 按鈕組,vcradiobutton

編輯:C++入門知識

VC++ 動態生成 成組的 RadioButton 按鈕組,vcradiobutton


先說一下 靜態創建的方法:

單選按鈕也屬於CButton類,但由於單選按鈕總是成組使用的,所以它在制作和使用上與普通按鈕有一定區別。
假設有三個單選按鈕組成一組,初始時,第一個單選按鈕處於選中狀態。
我們先來看靜態制作方法:在對話框中放置三個單選按鈕,設置屬性如下:
Radio1屬性:Visible、Group、Tab stop、Auto
Radio2屬性:Visible、Tab stop、Auto
Radio3屬性:Visible、Tab stop、Auto
這樣的屬性設置就把三個單選按鈕分成了一組,它們一次只能有一個被選中,若對話框中還有其它成組的單選按鈕,使用時也會互不干擾。但這時還沒有使第一個按鈕處於選中狀態。接著就用ClassWizard為這組單選按鈕添加變量,這裡只需為第一個單選按鈕添加變量即可。設變量名為m_Radio,類型選為int型。在構造函數中ClassWizard把m_Radio的值設置為-1,我們把它改為0,這樣在運行程序時可以看到第一個單選按鈕處於選中狀態了。之後,還應該用ClassWizard為三個單選按鈕添加單擊響應函數,在裡面修改m_Radio的值對應三個單選按鈕就可以了。

 

在這個靜態創建時,是手工指定了Group屬性.那麼如何在動態創建時,指定這個屬性呢.我在所有的方法裡面找了一圈,沒有發現.

那會是在哪兒設置呢,總得有個辦法吧!   那就只省下哪一個辦法了,就是 ModifyStyle 方法,看看這個方法裡面有沒有相應的樣式!

我先查了按鈕的樣式

#define BS_PUSHBUTTON       0x00000000L
#define BS_DEFPUSHBUTTON    0x00000001L
#define BS_CHECKBOX         0x00000002L
#define BS_AUTOCHECKBOX     0x00000003L
#define BS_RADIOBUTTON      0x00000004L
#define BS_3STATE           0x00000005L
#define BS_AUTO3STATE       0x00000006L
#define BS_GROUPBOX         0x00000007L
#define BS_USERBUTTON       0x00000008L
#define BS_AUTORADIOBUTTON  0x00000009L
#define BS_PUSHBOX          0x0000000AL
#define BS_OWNERDRAW        0x0000000BL
#define BS_TYPEMASK         0x0000000FL
#define BS_LEFTTEXT         0x00000020L
#if(WINVER >= 0x0400)
#define BS_TEXT             0x00000000L
#define BS_ICON             0x00000040L
#define BS_BITMAP           0x00000080L
#define BS_LEFT             0x00000100L
#define BS_RIGHT            0x00000200L
#define BS_CENTER           0x00000300L
#define BS_TOP              0x00000400L
#define BS_BOTTOM           0x00000800L
#define BS_VCENTER          0x00000C00L
#define BS_PUSHLIKE         0x00001000L
#define BS_MULTILINE        0x00002000L
#define BS_NOTIFY           0x00004000L
#define BS_FLAT             0x00008000L
#define BS_RIGHTBUTTON      BS_LEFTTEXT
#endif /* WINVER >= 0x0400 */

找到所有的樣式,裡面在沒有相應的設置,與GROUP相關的,只有一個 BS_GROUPBOX ,我試了一下,這個樣式的意思,就是將按鈕改造成一個GROUPBOX,而不是指定 GROUP.不對.  除此之外,就只能找上一層的樣式也就是 CWnd的樣式了.

#define WS_OVERLAPPED       0x00000000L
#define WS_POPUP            0x80000000L
#define WS_CHILD            0x40000000L
#define WS_MINIMIZE         0x20000000L
#define WS_VISIBLE          0x10000000L
#define WS_DISABLED         0x08000000L
#define WS_CLIPSIBLINGS     0x04000000L
#define WS_CLIPCHILDREN     0x02000000L
#define WS_MAXIMIZE         0x01000000L
#define WS_CAPTION          0x00C00000L     /* WS_BORDER | WS_DLGFRAME  */
#define WS_BORDER           0x00800000L
#define WS_DLGFRAME         0x00400000L
#define WS_VSCROLL          0x00200000L
#define WS_HSCROLL          0x00100000L
#define WS_SYSMENU          0x00080000L
#define WS_THICKFRAME       0x00040000L
#define WS_GROUP            0x00020000L
#define WS_TABSTOP          0x00010000L

#define WS_MINIMIZEBOX      0x00020000L
#define WS_MAXIMIZEBOX      0x00010000L


#define WS_TILED            WS_OVERLAPPED
#define WS_ICONIC           WS_MINIMIZE
#define WS_SIZEBOX          WS_THICKFRAME
#define WS_TILEDWINDOW      WS_OVERLAPPEDWINDOW

裡面果真有一個 WS_GROUP ,這就是我想要的,於是

((CButton*)GetDlgItem(IDC_CHECK1))->ModifyStyle(BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON | WS_GROUP, 0);

至此 動態創建按鈕組的方法也有了!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved