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 ;

解决方案 »

  1.   

    1. 我没听说过BS_AUTORADIOBUTTON只能用在对话框上,尽信书不如无书
    2. 你的WM_COMMAND里处理RadioButton的BN_CLICKED没效,因为你把GroupBox作为RadioButton的父窗口了
      

  2.   


    又是你回复,多谢
    请问,
    检测哪一个  autoradiobutton   被选中。我目前没有好的法子,只能够对 每一个autoradiobutton进行发送BM_GETCHECK来获取状态。能否对group box进行发送呢?我尝试了一下,失败了。因为如果对每一个autoradiobutton发送,似乎太繁琐了。
      

  3.   


    IsDlgButtonChecked 或 SendDlgItemMessage 都可以
      

  4.   

    TextOut乱码的问题已经memset清零了多字节环境下
    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乱码啊
      

  5.   


    老帖子也有提到乱码可是他们的是用sizeof导致的