He estado en múltiples sitios, documentos y tutoriales y todos dicen lo mismo, es decir, cualquier control no es más que una ventana en la API de Win32, por lo tanto uno puede usar la función CreateWindowExW()
para crear un control ListBox
/ventana sobre la ventana principal de la aplicación.Win32: ¿Cómo crear un control ListBox usando la función CreateWindowExW()?
Aunque consigo los conceptos de todos los controles son ventanas con diferentes dwStyle, que tienen dificultades para encontrar la manera de crear una instancia, por decirlo así, el control ListBox
.
me encontré con un tutorial donde un diálogo escrito para tener una LISTBOX
señalados en su declaración de la siguiente manera:
// resource.h
#define IDD_MAIN 101
#define IDC_TEXT 1000
#define IDC_NUMBER 1001
#define IDC_LIST 1002
#define IDC_ADD 1003
#define IDC_CLEAR 1004
#define IDC_REMOVE 1005
#define IDC_SHOWCOUNT 1006
// .rc resource file
IDD_MAIN DIALOG DISCARDABLE 0, 0, 207, 156
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Controls One"
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "Add",IDC_STATIC,7,10,14,8
EDITTEXT IDC_TEXT,25,7,120,14,ES_AUTOHSCROLL
EDITTEXT IDC_NUMBER,150,7,21,14,ES_NUMBER
LTEXT "times.",IDC_STATIC,177,10,23,8
LISTBOX IDC_LIST,7,25,138,106,LBS_NOINTEGRALHEIGHT |
LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "&Add",IDC_ADD,150,30,50,14
PUSHBUTTON "&Remove",IDC_REMOVE,150,47,50,14
PUSHBUTTON "&Clear",IDC_CLEAR,150,63,50,14
LTEXT "This item was added",IDC_STATIC,7,141,66,8
CTEXT "-",IDC_SHOWCOUNT,77,141,32,8
LTEXT "times",IDC_STATIC,114,141,17,8
END
Y su uso en su programa de C, así:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
return DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc);
}
Ahora, esto soy capaz de hacer y comprender completamente los conceptos. Además, me gustaría poder crear y diseñar la ventana principal de mi aplicación para agregar un control ListBox
. Este ejemplo tutorial no usa la función CreateWindowExW()
para crear el control, sino que crea un cuadro de diálogo que en realidad será la ventana principal de la aplicación.
1 - ¿Alguna pista sobre cómo agregar un control ListBox
a la ventana principal en el código?
Pensé en crearlo mientras manejaba el mensaje WM_CREATE.
2 - ¿Es esta una buena idea?
3 - ¿Cuál es la mejor práctica/enfoque en este escenario?
Escribir este tipo de código nunca es una buena idea, hay un montón de librerías de clases excelentes disponibles que tienen el tedio y los errores de esto. Está bien si quieres aprender el lenguaje ensamblador de Win32. Aunque no es una pregunta muy convincente. –
No pienso escribir un sistema empresarial completo utilizando Win32. Amo a C, y siempre quise saber más sobre Win32. Al principio de mis estudios de programación, Win32 era demasiado complejo para aprender. Hoy, entiendo por completo los conceptos que hay detrás, así que es más fácil para mí aprender. Dado que .NET Framework se basa en Win32, deseo obtener más información al respecto. –