C++ Checkbox actúa como botones de radio WINAPI (sin MFC)

Estoy tratando de obtener 2 casillas de verificación en mi aplicación para que actúen como botones de opción. IE: cuando uno está marcado, el otro botón se desmarcará solo. No creo que esto se pueda lograr a través del menú de propiedades, así que estoy tratando de hacerlo en código.

No sé mucho acerca de cómo hacer esto en absoluto, así que me estoy perdiendo un poco. Esto es lo que tengo hasta ahora (que no está funcionando)

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

¡Puede que esté muy lejos, pero cualquier ayuda sería genial!

preguntado el 22 de mayo de 12 a las 13:05

¿Por qué diablos están tratando de hacer que una casilla de verificación funcione como un botón de opción? ¿Por qué no usarías simplemente un conjunto de botones de opción? -

@jussij, tal vez el programa esté destinado a trolear a la gente, ¿quién sabe? :p Estoy de acuerdo en que se debe dar la razón. -

Hah, no estaba destinado a ser un troll, no, solo pensé que haría que la GUI se viera un poco mejor, pero no sé en qué estaba pensando porque terminará confundiendo al usuario. De todos modos, tu código hizo el truco @Chris. ¡Gracias! -

1 Respuestas

Si tiene las manijas o algo a mano, simplemente envíe un BM_SETCHECK:

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

Por supuesto, esto supone que solo se puede marcar o desmarcar, no en un estado intermedio. Realmente también reconsideraría su pensamiento, ya que las casillas de verificación están destinadas a actuar como tales, y los botones de opción son las herramientas adecuadas para este comportamiento.

Además, en su cambio de mensaje, probablemente quiera esto:

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
        }
    }    
}

contestado el 22 de mayo de 12 a las 13:05

Esto era lo que estaba buscando. ¡Gracias! - L337FRIJOL

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.