[C con Clase] Winapi y c++

Davidson, Steven srd4121 en njit.edu
Jue Abr 10 15:31:28 CEST 2014


Hola Hugo,

2014-04-10 7:56 GMT-04:00 Hugo García <hgc2204 en gmail.com>:

> Hola,
>
> Estoy intentando hacer un pgm con GUI y quiero hacerlo lo más orientado a
> objetos posible recurriendo a temas de punteros y "al bajo nivel" lo menos
> posible, vengo de hacer cosas en c# en visual estudio 2010) y me estoy
> encontrando con cosas que me resultan bastante puñeteras.
>
> Ya se que el framework que tiene detras .net tiene mucho código que
> facilita la tarea, mi pregunta es ¿hay cabeceras en c++ que hagan esto?
>
>
Si quieres usar el API de MS-Windows, pero "más C++", entonces puedes usar
MFC, que es una colección de clases envolventes.

Por ejemplo quiero una función que aunque lo que haga sea en c, lo que
> utilice sea de c++ (no se si he expresado muy bien esto...), por ejemplo
> ahora estaba intentando esto:
>
> void DisplayMessageExtl(string szText, string szCaption)
>

Como vienes de C#, te aclaro que en C++ todos los parámetros se pasan por
copia (o por valor). Por lo tanto, si quieres pasar por referencia, tienes
que ser explícito. Esto es,

void DisplayMessageExtl( const string &szText, const string &szCaption )

Sin embargo, sugiero usar 'u16string' si quieres usar cadenas de caracteres
de Unicode de 16 bits.

{
>     int msgboxID = MessageBox(
>         NULL,
>         szText.c_str(),
>         szCaption.c_str(),
>

Tienes que conseguir la representación de puntero a 'char' - "al estilo de
C". Para esto, invocamos la función miembro (método), 'c_str()'.

        MB_ICONQUESTION | MB_YESNOCANCEL | MB_DEFBUTTON2
>     );
>
>     switch (msgboxID)
>     {
>     case IDYES:
>         PostQuitMessage (0);
>         break;
>     case IDNO:
>         break;
>     case IDCANCEL:
>         break;
>     }
> }
>
> Pero claro no es posible pq MessageBox espera un puntero a un char. He
> intenado hacer un cast con (LPCSTR) pero no funciona.
>
>
No puedes hacer este cásting, porque 'string' no ofrece tal conversión; es
decir, no sobrecarga el operador de conversión a 'const char *'.

¿Hay alguna manera de conseguir lo que quiero?
>
> Ya no solo una solución para este caso si no en las futuras cosas que me
> encuentre. ¿Alguno ha usado una librería que solvente este tipo de
> situaciones?
>

Como dije antes, supongo que te interesa algo como MFC. Existen otras
clases envolventes como las ATL al igual que las WTL, las cuales extienden
las ATL.


Espero que esto aclare la duda.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140410/4aef2415/attachment.html>


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