[C++ WinApi] Obtener texto de un ComboBox

Me ha llevado un tiempo encontrar ésta información así que se las comparto:

//Definimos la variable HWND del ComboBox

HWND cbx_combo;

/*Vinculamos la variable HWND con el ID del objeto que asignamos al ComboBox en la interfaz o en la ventana (para éste ejemplo usaremos CBX_COMBO con letras mayúsculas ya que C++ es “case sensitive” y hace la diferencia entre mayusculas y minusculas)*/

/*Nota 2:  hWnd es la variable Handle Window (HWND) de la ventana donde se encuentra nuestro objeto de comboBox, en éste ejemplo se llama “hWnd” pero todo depende de la definición previa que le hayamos asignado*/

//Es recomendable que el comando GetDlgItem se utilice dentro del case WM_INITDIALOG

cbx_combo = GetDlgItem(hWnd, CBX_COMBO);

/*Se ocupará una variable char que será el buffer de información y será donde se guardará el valor de cadena que necesitamos*/

/*

Las siguientes líneas de código deben ser agregadas en el evento dedicado para los objetos dentro de la ventana

case WM_COMMAND:
{

      switch (LOWORD(wParam))
{
case CBX_COMBO:
{

//CODIGO

           }

    }

}

*/

char temp[255];

/*

Aquí viene lo bueno, en ésta línea hay realmente dos mensajes de WinApi, y los pueden poner por separado, pero para fines de optimización se agregaron en la misma línea, la forma de leer esa línea de código es la siguiente:

Obtiene el indice [index] del comboBox, lo que nos permitirá saber que item del combobox seleccionamo para eso usamos el mensaje CB_GETCURSEL (CB de comboBox)

Recordar que el índice es entero (int)

int index = SendMessageA(

cbx_combo, //nuestro objeto HWND asignado para el combobox

CB_GETCURSEL, //Comando de WinApi para obtener el índice de un combobox

0, //No utilizado para éste mensaje

0 //No utilizado para éste mensaje

);

Para obtener el texto del comboBox lo que necesitamos es enviar el índice y la variable buffer donde queremos el valor

SendMessageA(

cbx_combo, //nuestro objeto HWND asignado para el combobox

CB_GETLBTEXT, //Comando de WinApi para obtener la cadena de texto de acuerdo al índice que le enviemos

index, //Aquí le enviamos el índice del valor que queremos obtener del combobox

cadena //Aquí recibiremos el valor en forma de cadena de texto desde el combobox

*/

SendMessageA(cbx_combo, CB_GETLBTEXT, SendMessageA(cbx_combo, CB_GETCURSEL, 0, 0), (LPARAM)temp);

//CODIGO COMLPETO

#include <windows.h>

HWND cbx_combo;

LRESULT CALLBACK callback_dialogBox(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{


switch (msg)
{


case WM_INITDIALOG:
{

cbx_combo = GetDlgItem(hWnd, CBX_COMBO);

break;

}

case WM_COMMAND:
{

switch (LOWORD(wParam))
{

case CBX_COMBO:
{

char temp[255];
SendMessageA(cbx_forma, CB_GETLBTEXT, SendMessageA(cbx_forma, CB_GETCURSEL, 0, 0), (LPARAM)temp);

break;

}

}

}

}

}

 

 

 

//SendMessage se utiliza en WinApi para enviar mensajes SendMessageA especifíca que se está utilizando ANSI excluivamente en ésta línea de código, esto evita conflictos entre UNICODE y MULTIBYTE

 

Fuente:

https://docs.microsoft.com/en-us/windows/desktop/controls/combo-boxes

 

También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *