Como práctica, quise calcular el alto de la barra de título de una ventana.
El valor calculado es del tipo long. Luego debía convertirlo a LPCWSTR para pasarlo como parámetro a la api setWindowText que lo escribirá en lugar del título de la ventana.
He usado la información que hallé en estas webs:
La función ltoa (reemplazada por _ltoa)
Convertir de char* a LPCWSTR
La función MultiByteToWideChar
El código es el siguiente:
RECT
r1, r2;
GetWindowRect(hWnd,
&r1);
GetClientRect(hWnd,
&r2);
long
alto1 = r1.bottom - r1.top;
long
alto2 = r2.bottom - r2.top;
long
alto3 = alto1-alto2;
//
convertir long a Wide WCHAR*
int
size=sizeof(long)*8+1;
char*
texto = new
char[size];
WCHAR*
texto2 = new
WCHAR[size];
_ltoa(alto3,texto,10);
MultiByteToWideChar(CP_UTF8,
0, texto, -1, texto2, size);
//
fin de la conversión. Para convertir de WCHAR* a LPCWSTR (puntero
largo a Const Wide String) basta un casteo
SetWindowText(hWnd,
(LPCWSTR)texto2);
En el caso de una aplicación tipo win32, coloqué este código dentro de la función que procesa los mensajes de la ventana (WndProc), exactamente en el mensaje que se envía al crearla:
Al ejecutar el programa, mostrará el alto de la barra de título en el texto de... la barra de título.
3 comentarios:
Interesting my friend, el valor calculado que nos muestra en la barra de titulo en base a que esta amiga.
Oscar Cueva M.
cueva009@gmail.com
Hola Oscar!
El valor del alto de la barra de título varía con el tema de Windows escogido. Para Windows clásico me da un valor de cuarentaitantos, y en Windos 7 es de casi sesenta. Este ejemplo no tenía la intención de ser práctico, si no académico (por ningún lado hallé un tutorial que me mostrara cómo convertir de long a LPCWSTR), pero sirve para saber dónde están las cuatro esquinas de la barra de tareas y hacerle unos cuantos pantallazos con la api BitBlt o PrintWindow.
Saludos!
Publicar un comentario