Win32 Botones

Los controles son clases especiales de ventanas los cuales nos sirven para interactuar con el usuario, entre los controles más comunes tenemos el button o botón sobre el que podemos hacer clic. La creación de los controles win32 la haremos una vez se haya creado la ventana en el mensaje WM_CREATE.

Los controles en win32 se crean con la función que usamos anteriormente para crear las ventanas CreateWindow, funciona de la misma manera como la explicamos anteriormente solo deberemos cambiar el nombre de la clase por “BUTTON”, el nombre de la ventana será el texto que aparecerá en el botón y deberemos especificar los estilos de ventana win32 WS_CHILD | WS_VISIBLE para que el button se muestre, además debemos indicar un identificador para el botón será en el parámetro hMenu al hacer clic en el botón se envía el mensaje WM_COMMAND y LOWORD(wParam) contendrá el ID del botón que especificamos en hMenu, lParam es HWND del button.

clip_image002
Existen diferentes tipos de botones como los Check Boxes, Group Boxes, Radio Button, Push Button, estos estilos los conseguimos con los diferentes estilos de botones entre los que tenemos los que inician con BS_ mencionamos algunos:
  • BS_3STATE
  • BS_AUTO3STATE
  • BS_AUTOCHECKBOX
  • BS_AUTORADIOBUTTON
  • BS_CHECKBOX
  • BS_DEFPUSHBUTTON
  • BS_GROUPBOX
  • BS_LEFTTEXT
  • BS_OWNERDRAW
  • BS_PUSHBUTTON
  • BS_RADIOBUTTON
  • BS_USERBUTTON
  • BS_BITMAP
  • BS_FLAT
  • BS_LEFT
  • BS_MULTILINE
  • BS_NOTIFY
  • BS_PUSHLIKE
  • BS_RIGHT
  • BS_RIGHTBUTTON
  • BS_TEXT
  • BS_TOP
  • BS_TYPEMASK
  • BS_VCENTER
  • BS_BOTTOM
  • BS_CENTER
  • BS_ICON

Push Buttons


Estos botones se pueden definir usando los estilos BS_PUSHBUTTOM y BS_DEFPUSHBUTTON. En el segundo caso, el botón será el botón por defecto, y se activará cuando el usuario pulse la tecla de ENTER.
Crear un botón con un icono:

clip_image004
La función SendMessage se encarga de enviar un mensaje tenemos que indicar el HWND del control, el mensaje que deseamos enviar BM_SETIMAGE el cual establece la imagen del Button, el siguiente parámetro es el tipo de imagen puede ser IMAGE_ICON o IMAGE_BITMAP, por último el manejador del icono que deseamos usar el cual cargamos con la función LoadIcon que ya conocemos.
BS_ICON es el estilo de botón que nos permite insertar una imagen dentro del botón.


Check boxes


Los estilos BS_CHECKBOX, BS_AUTOCHECKBOX, BS_3STATE y BS_AUTO3STATE defiene botónes check box de dos estados (los dos primeros) o de tres estados (los dos últimos). Los estilos AUTO, además, se procesarán automáticamente por el sistema, los demás debemos encargarnos de cambiar su estado manualmente, por ejemplo BS_CHECKBOX al hacer clic sobre él no ocurre nada. Añadir que el estilo BS_PUSHLIKE permite definir un check box con la misma apariencia que un botón pulsable.
Crear un check box manual:

clip_image006
Al hacer clic en el check box enviamos en mensaje BM_SETCHECK para establecer el estado el cual será el contrario el que tiene actualmente el cual obtenemos con ¡SendMessage(hh,BM_GETCHECH, 0, 0), los posibles estados para un check box en win32 son: BST_CHECKED, BST_UNCHECKED, los controles de tres estados cuentan con un estado más BST_INDETERMINATE.


Radio Buttons


Para definir este tipo de botones disponemos de los estilos BS_RADIOBUTTON y BS_AUTORADIOBUTTON. El segundo define radio buttons automáticos. En este caso, el estilo BS_PUSHLIKE también permite definir un radio buttons con la misma apariencia que un botón pulsable. Para cambiar el estado de un radio button es similar a check box SendMessage (hwndButton, BM_SETCHECK, 1, 0) ; selecciona el radio button y SendMessage (hwndButton, BM_SETCHECK, 0, 0) ; lo deselecciona.


Group Boxes


El estilo BS_GROUPBOX permite definir cajas de grupo. Todos estos controles, menos los group boxes, envián mensajes WM_COMMAND cuando son pulsados, y mensajes de notificación BN_CLICKED.


Botones owner-draw

Existe un quinto tipo de botón, el owner-draw, que se define con el estilo BS_OWNERDRAW. El comportamiento de estos botones depende de nosotros, ya que estaremos obligados a diseñarlos y pintarlos dependiendo de su estado.


Mostrar y ocultar controles

Si no especificamos el estilo WS_VISIBLE el control no se mostrara por los que contamos con la función ShowWindow la cual muestra una ventana, como los controles son ventanas podemos usarla con los buttons. ShowWindow (hwndChild, SW_SHOWNORMAL) muestra el control cuyo manejador es hwndChild que devuelve la función CreateWindow, ShowWindow (hwndChild, SW_HIDE) oculta el control, podemos determinar si un control esta visible con la función IsWindowVisible (hwndChild).


Habilitar y deshabilitar controles

Los controles están habilitados por defecto, para deshabilitarlos tenemos la función EnableWindow (hwndChild, FALSE), indicamos TRUE para habilitarlo y para determinar si está habilitado o no usamos la función IsWindowEnabled (hwndChild).

Comentarios

Temas relacionados

Entradas populares de este blog

tkinter Grid

Conectar SQL Server con Java

Controles y Contenedores JavaFX 8 - I

Histogramas OpenCV Python