2012-05-22 2 views
0

Я пытаюсь получить 2 флажка в своем приложении, чтобы действовать как переключатели. IE. Когда галочка будет нажата, другая кнопка отключится. Я не верю, что это может быть достигнуто через меню свойств, поэтому я пытаюсь сделать это в коде.C++ Checkbox действует как радиокнопки WINAPI (No MFC)

Я не знаю, как это сделать вообще, поэтому я немного теряюсь. Это то, что у меня есть до сих пор (что не работает)

case BN_CLICKED: 
    if(BN_CLICKED == IDC_CHECK_MW){ 
     SendMessage(GetDlgItem(hDlg,IDC_CHECK_MW), BM_GETCHECK, (WPARAM)0 ,(LPARAM)0) == BST_CHECKED; 
    } 

Возможно, мне будет удобно, но любая помощь будет замечательной!

+1

Почему на земле пытаются сделать флажок работать как кнопки радио? Почему бы вам просто не использовать набор переключателей? – jussij

+1

@jussij, может быть, программа предназначена для троллинга, кто знает? : p Я согласен, что причина должна быть дана. – chris

+0

Hah, Это не означало, что тролль нет, я просто подумал, что это сделает GUI немного лучше, но я не знаю, что я думал, потому что он просто закончится запутанным для пользователя. Все равно, ваш код сделал трюк @Chris. Благодаря! – L337BEAN

ответ

2

Если у вас есть ручки или что-то под рукой, просто отправить BM_SETCHECK:

int checkState = SendMessage (otherHwnd, BM_GETCHECK, 0, 0); 
SendMessage (otherHwnd, BM_SETCHECK, checkState == BST_CHECKED ? BST_UNCHECKED : BST_CHECKED, 0); 

Это, конечно, предполагает, что оно может быть проверено только или бесконтрольно, не в промежуточном состоянии. Я бы также пересмотрел ваше мышление, поскольку флажки должны действовать как таковые, а переключатели - правильные инструменты для такого поведения.

Кроме того, в коммутаторе сообщение, вы хотите, это, вероятно:

case WM_COMMAND: 
{ 
    if (HIWORD (wParam) == BN_CLICKED) 
    { 
     switch (LOWORD (wParam)) 
     { 
      case IDC_CHECK_MW: 
       //check this, uncheck that 
       break; 

      case IDC_OTHER_CHECK: 
       //check other, uncheck first 
       break; 

      default: 
       //something went wrong 
     } 
    }  
} 
+0

Это то, что я искал. Благодаря! – L337BEAN

Смежные вопросы