Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2707630
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: C/C++

2007-12-03 14:34:43

CButton   myButton;  
   
  //   Create   a   radio   button.  
  myButton.Create(_T("My   button"),   WS_CHILD|WS_VISIBLE|BS_RADIOBUTTON,    
        CRect(10,10,100,30),   pParentWnd,   1);  
   
  //   Change   the   button   style   to   use   one   of   the   "auto"   styles;   for  
  //   push   button,   change   to   def   push   button.  
  UINT   uStyle   =   myButton.GetButtonStyle();  
  if   (uStyle   ==   BS_PUSHBUTTON)  
        uStyle   =   BS_DEFPUSHBUTTON;  
  else   if   (uStyle   ==   BS_RADIOBUTTON)  
        uStyle   =   BS_AUTORADIOBUTTON;  
  else   if   (uStyle   ==   BS_CHECKBOX)  
        uStyle   =   BS_AUTOCHECKBOX;  
  else   if   (uStyle   ==   BS_3STATE)  
        uStyle   =   BS_AUTO3STATE;  
  -------------------------------------------------------------------  
  上面的代码摘自MSDN,另外从按钮风格的定义也可看出,判断风格不能用&,要用==判断:  
  #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_OWNERDRAW                 0x0000000BL  
  #define   BS_LEFTTEXT                   0x00000020L  
  ......  
对比一下三种方法:  
   
  UINT   uiStyle   =   m_check1.GetButtonStyle();  
  uiStyle   =   m_btnOK.GetButtonStyle();  
  uiStyle   =   m_radio1.GetButtonStyle();  
   
  uiStyle   =   ((CButton   *)GetDlgItem(IDC_RADIO1))->GetButtonStyle();  
  uiStyle   =   ((CButton   *)GetDlgItem(IDC_CHECK1))->GetButtonStyle();  
  uiStyle   =   ((CButton   *)GetDlgItem(IDOK))->GetButtonStyle();  
   
  uiStyle   =   GetWindowLong((HWND)GetDlgItem(IDC_RADIO1),GWL_EXSTYLE);  
  uiStyle   =   GetWindowLong((HWND)GetDlgItem(IDC_CHECK1),GWL_EXSTYLE);  
  uiStyle   =   GetWindowLong((HWND)GetDlgItem(IDOK),GWL_EXSTYLE);  
   
  前两种可以得到正确结果,第三种都不行,所以不要用。

1  
  if(!(GetWindowLong((HWND)GetDlgItem(IDC_BUTTON),GWL_EXSTYLE)&BS_RADIOBUTTON))  
  {  
  MessageBox("RadioButton");  
  }  
  >>  
  这里应该使用   GWL_STYLE   而不是   GWL_EXSTYLE。  
  有些风格是   GWL_STYLE   ,有些   风格是   GWL_EXSTYLE,这个要查看MSDN。  
   
  2  
  上面的代码摘自MSDN,另外从按钮风格的定义也可看出,判断风格不能用&,要用==判断:  
  #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_OWNERDRAW   0x0000000BL  
  #define   BS_LEFTTEXT   0x00000020L  
  >>  
  这个需要补充一下,就是判断低16位的时候是用   ==   的。  
  必须把高16位先去掉。  
   
  3   那你为什么没有判断对呢,有原因:  
        A1:一个   Style   是32位的。CWnd   风格占了高16位。低16位属于button的风格。如果   低16为0,就是   BS_PUSHBUTTON。  
        A2:所以在判断风格的时候,&   的时候需要把   button的风格分离开来。  
                DWORD   Style   =     GetWindowLong((HWND)GetDlgItem(IDC_BUTTON),GWL_STYLE);  
                WORD   button_style   =   Style   &   0x0000ffff;  
                然后再判断。  
   
  4   我的示例:  
   
  void CButtonStyleDlg::DebugTest()  
  {  
  //CButton m_Button;  
  //CButton m_Check;  
  //CButton m_Rad;  
   
  long   style[3]   =   {0};  
   
  style[0]   =   GetWindowLong(m_Button.m_hWnd,   GWL_STYLE);  
  style[1]   =   GetWindowLong(m_Check.m_hWnd,   GWL_STYLE);  
  style[2]   =   GetWindowLong(m_Rad.m_hWnd,   GWL_STYLE);  
   
  short   button_style[3]   =   {0};  
   
  button_style[0]   =   style[0]   &   0x0000ffff;  
  button_style[1]   =   style[1]   &   0x0000ffff;  
  button_style[2]   =   style[2]   &   0x0000ffff;  
   
  if(button_style[0]   ==   BS_PUSHBUTTON)  
  {  
  MessageBox("BS_PUSHBUTTON");  
  }  
   
  if(button_style[1]   ==   BS_AUTOCHECKBOX)  
  {  
  MessageBox("BS_AUTOCHECKBOX");  
  }  
   
  if(button_style[2]   ==   BS_AUTORADIOBUTTON)  
  {  
  MessageBox("BS_RADIOBUTTON");  
  }  
  }  
   
  这样就好了。  
阅读(1605) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~