Windows API Cuadros de Dialogo
Los cuadros de dialogo como su nombre lo indica son ventanas que nos permiten comunicarnos con la aplicación, por ejemplo, la aplicación podría pedirnos la ubicación donde deseamos almacenar un archivo, el color que deseamos para pintar, cual es el archivo de video que queremos reproducir, etc., existen muchos cuadros de dialogo definidos para distintas tareas, veremos algunos de ellos.
Seleccionar color en cuadro de dialogo
Es usado cuando deseamos pedirle al usuario de la aplicación que seleccione o indique un color, este cuadro de dialogo lo creamos con la función ChooseColor
, esta función hace uso de la estructura CHOOSECOLOR
para configurar el cuadro de dialogo de color, además no dará acceso al color seleccionado.
VOID OnChooseColor(HWND hwnd)
{
CHOOSECOLOR cc; // common dialog box structure
static COLORREF acrCustClr[16]; // array of custom colors
ZeroMemory(&cc, sizeof(cc));
cc.lStructSize = sizeof(cc);
cc.hwndOwner = hwnd; // ventana principal
cc.lpCustColors = (LPDWORD)acrCustClr; // colores personalidados
cc.rgbResult = RGB(0, 255, 0); // color inicial
cc.Flags = CC_FULLOPEN | CC_RGBINIT; // mostrar el cuadro completo y seleccionar el color inicial
if (ChooseColor(&cc) == TRUE)
{
// crear una brocha con el color seleccionado
hbrush = CreateSolidBrush(cc.rgbResult);
// volver a pintar la ventana
InvalidateRect(hwnd, NULL, TRUE);
}
}
Esta función nos devuelve TRUE
si el usuario selecciono un color, obtendremos un valor distinto en caso contrario.
Cambiar fuente en Win32
Este cuadro de los utilizaremos para seleccionar una fuente, se mostraran todas las fuentes instaladas en el sistema, el usuario podrá seleccionar la fuente, modificar el estilo y tamaño de la misma, entre otras cosas.
VOID onChooseFont(HWND hwnd)
{
CHOOSEFONT cf; // common dialog box structure
LOGFONT lf; // logical font structure
// Initialize CHOOSEFONT
ZeroMemory(&cf, sizeof(cf));
cf.lStructSize = sizeof(cf);
cf.hwndOwner = hwnd;
cf.lpLogFont = &lf;
cf.rgbColors = RGB(0, 0, 255);
cf.Flags = CF_SCREENFONTS | CF_EFFECTS;
if (ChooseFont(&cf) == TRUE)
{
// crear la fuente a partir de la seleccion
hfont = CreateFontIndirect(cf.lpLogFont);
// guargar el color de texto
tcolor = cf.rgbColors;
// volver a pintar la ventana
InvalidateRect(hwnd, NULL, TRUE);
}
}
Para cambiar la fuente en una aplicación Win32 usamos la función ChooseFont
la cual inicializamos mediante la estructura CHOOSEFONT
que obtenemos con cf.lpLogFont
, la información de la fuente seleccionada se almacena en la estructura LOGFONT
, algo que también nos interesa es que el usuario puede seleccionar un color para el texto, accedemos a el en cf.rgbColors
.
Abrir y Guardar Archivos en Windows API
Los cuadros de dialogo usados para abrir un archivo o para seleccionar donde crear o guardar el archivo son los siguientes: GetOpenFileName
y GetSaveFileName
el primero para abrir un archivo el segundo para guardarlo.
VOID OnOpenFile(HWND hwnd)
{
OPENFILENAME ofn; // common dialog box structure
TCHAR szFile[260]; // buffer for file name
HANDLE hf; // file handle
// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
// Set lpstrFile[0] to '\0' so that GetOpenFileName does not
// use the contents of szFile to initialize itself.
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = L"All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
// Display the Open dialog box.
if (GetOpenFileName(&ofn) == TRUE) {
MessageBox(hwnd, szFile, L"Abrir archivo:", MB_OK);
}
}
Este cuadro lo configuramos con la estructura OPENFILENAME
con ofn.lpstrFile
indicamos el buffer donde se almacenara la ruta del archivo seleccionado, ofn.lpstrFilter
nos permite establecer el filtro de búsqueda, esta función nos devuelve TRUE
si el usuario selecciono correctamente el archivo, en este ejemplo no hay acción, lo normal seria abrir el archivo y leer su contenido, pero eso es otro tema.
La función GetSaveFileName
funciona prácticamente igual, salvo que la ruta del archivo devuelto será usado para guardar, el código de ejemplo completo contiene ejemplos de estas dos funciones.
GitHub: Windows API Cuadros de Dialogo
no sirve
ResponderEliminar