Acerca de:

Este blog contiene los códigos, ejemplos y bases de datos que he usado cuando aprendía acerca de algún tema específico. En lugar de borrarlos (una vez dominado ya el tema), he decidido publicarlos :)

sábado, 14 de diciembre de 2013

Cómo Convertir de long a LPCWSTR (puntero largo a Wide String constante) en Visual C++

Todo empezó cuando quise aprender a usar las apis GetWindowRect y GetClientRect. La primera devuelve las coordenadas que ocupa la ventana, la segunda devuelve las coordenadas que ocupa la ventana sin la barra de título.

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:

Oscar dijo...

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

Broken_Window dijo...
Este comentario ha sido eliminado por el autor.
Broken_Window dijo...

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!