[C con Clase] Curso WINAPI. DialogBox con texto.

Davidson, Steven srd4121 en njit.edu
Mie Oct 18 19:13:59 CEST 2017


Hola Marcelinux,

Estás mezclando ASCII (CHAR o char) con Unicode (WCHAR o wchar_t). Hoy por
hoy, deberías usar Unicode, por lo que aconsejo que cambies la
representación del miembro, 'Texto'. Esto es,

typedef struct stDatos {
   WCHAR Texto[80];  // equivale a:  wchar_t Texto[80]
} DATOS;

Esto implica que tendrás que usar otras funciones para manipular cadenas de
caracteres de tipo 'wchar_t'; por ejemplo, usa 'wcscpy()'

Por último y para aclarar, las invocaciones que hiciste no son correctas.
Escribiste:

reinterpret_cast<LPWSTR>(&Datos->Texto)

El tipo del miembro, 'Texto', ya es un puntero, por lo que obtendrías un
doble puntero; sin embargo, esto no es lo que quieres. Gramaticalmente, la
expresión correcta debería ser:

reinterpret_cast<LPWSTR>(Datos->Texto)

Claro está, esto no es correcto en este caso, porque la representación de
caracteres usando 'char' es diferente que la de 'wchar_t'.


Espero que esto aclare las dudas.

Steven


2017-10-18 8:42 GMT-04:00 marcelinux <marcelinator en gmail.com>:

> Hola. Estoy en http://winapi.conclase.net/curso/index.php?cap=007b#inicio
> Tengo alguna dificultad con el valor inicial.
> Aparte del warning de aviso de la "inseguridad" de strcpy, al compilar me
> muestra el siguiente error:
> error C2664: 'SetDlgItemTextW' : no se puede convertir el parámetro 3 de
> 'char [80]' a 'LPCWSTR'
> Los tipos señalados no están relacionados; la conversión requiere
> reinterpret_cast, conversión de estilo de C o conversión de estilo de
> función
>
> Utilizo VisualStudio 2008.
> Si cambio:
> SetDlgItemText(hDlg, ID_TEXTO, Datos->Texto);
> por:
> SetDlgItemTextW(hDlg, ID_TEXTO, reinterpret_cast<LPWSTR>(&Datos->Texto));
> El control EDIT no me muestra "Inicial" como valor. En su lugar me muestra
> el símbolo "pipe".
> Por Debug, veo que Datos->Texto contiene "Inicial" pero con dos "bytes"
> por carácter.
> Sin embargo, usando reinterpret_cast, tras GetDlgItemText(hDlg, ID_TEXTO,
> reinterpret_cast<LPWSTR>(&Datos->Texto), 80);
> el valor del control es correcto.
> ¿Alguna pista para asignar el valor inicial?
> Gracias.
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20171018/e1586cbc/attachment.html>


Más información sobre la lista de distribución Cconclase