windows 程序设计 9.1.6 节,page:294说这个风格这能用在对话框我提供一个反例:用在窗口上的。而且我把风格改成: BS_RADIOBUTTON 竟然不能选中了。怎么回事?struct
{
int iStyle ;
TCHAR * szText ;
}
button[] =
{
BS_GROUPBOX, TEXT ("性别选择"),
BS_AUTORADIOBUTTON, TEXT ("男"),
BS_AUTORADIOBUTTON, TEXT ("女") } ;
switch (message)
{
case WM_CREATE :
cxChar = LOWORD (GetDialogBaseUnits ()) ;
cyChar = HIWORD (GetDialogBaseUnits ()) ;
hwndButton[0] = CreateWindow ( TEXT("button"),
button[0].szText,
WS_CHILD | WS_VISIBLE | button[0].iStyle,
0,0,
100,200,
hwnd, (HMENU) 1000,
((LPCREATESTRUCT) lParam)->hInstance, NULL) ;
hwndButton[1] = CreateWindow ( TEXT("button"),
button[1].szText,
WS_CHILD | WS_VISIBLE | button[1].iStyle,
0,20,
60,60,
hwndButton[0], (HMENU) 1001,
((LPCREATESTRUCT) lParam)->hInstance, NULL) ;
hwndButton[2] = CreateWindow ( TEXT("button"),
button[2].szText,
WS_CHILD | WS_VISIBLE | button[2].iStyle,
0,100,
60,60,
hwndButton[0], (HMENU) 1002,
((LPCREATESTRUCT) lParam)->hInstance, NULL) ;
return 0 ;
case WM_COMMAND :
if(LOWORD(wParam)== 1001)
{
SendMessage(hwndButton[1], BM_SETCHECK,1,0);
SendMessage(hwndButton[2], BM_SETCHECK,0,0);
}
else
{
SendMessage(hwndButton[2], BM_SETCHECK,1,0);
SendMessage(hwndButton[1], BM_SETCHECK,0,0);
}
break ;
2. 你的WM_COMMAND里处理RadioButton的BN_CLICKED没效,因为你把GroupBox作为RadioButton的父窗口了
又是你回复,多谢
请问,
检测哪一个 autoradiobutton 被选中。我目前没有好的法子,只能够对 每一个autoradiobutton进行发送BM_GETCHECK来获取状态。能否对group box进行发送呢?我尝试了一下,失败了。因为如果对每一个autoradiobutton发送,似乎太繁琐了。
IsDlgButtonChecked 或 SendDlgItemMessage 都可以
switch (message)
{
case WM_CREATE :
hwndButton[0] = CreateWindow ( TEXT("button"),
button[0].szText,
WS_CHILD | WS_VISIBLE | button[0].iStyle,
0,0,
100,200,
hwnd, (HMENU) 1000,
((LPCREATESTRUCT) lParam)->hInstance, NULL) ;
hwndButton[1] = CreateWindow ( TEXT("button"),
button[1].szText,
WS_CHILD | WS_VISIBLE | button[1].iStyle,
0,20,
60,60,
hwndButton[0], (HMENU) 1001,
((LPCREATESTRUCT) lParam)->hInstance, NULL) ;
hwndButton[2] = CreateWindow ( TEXT("button"),
button[2].szText,
WS_CHILD | WS_VISIBLE | button[2].iStyle,
0,100,
60,60,
hwndButton[0], (HMENU) 1005,
((LPCREATESTRUCT) lParam)->hInstance, NULL) ;
SendMessage(hwndButton[1], BM_SETCHECK,1,0); //默认"男"
return 0 ; break;
case WM_PAINT :
{ char buf[100]={0}; memset(buf,0,100); GetClientRect(hwnd,&rect); InvalidateRect (hwnd, &rect, TRUE) ;
hdc = BeginPaint (hwnd, &ps) ; // SetBkMode (hdc, TRANSPARENT) ;
//获取group box的状态
if(BST_CHECKED==(SendMessage(hwndButton[1],BM_GETCHECK,0,0)) )
{
strcpy(buf,"单选按钮:男");
}
else if(BST_CHECKED==(SendMessage(hwndButton[2],BM_GETCHECK,0,0)) )
{
strcpy(buf,"单选按钮:女");
} TextOut(hdc,200,200,buf,strlen(buf)); EndPaint (hwnd, &ps) ; return 0 ;
}
break;TextOut乱码啊
老帖子也有提到乱码可是他们的是用sizeof导致的