elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Mostrar mensaje en ventana C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mostrar mensaje en ventana C++  (Leído 4,743 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Mostrar mensaje en ventana C++
« en: 2 Noviembre 2015, 11:29 am »

Código
  1. void enseñar_mensaje(string ventana, string mensaje, u_int icono)
  2. {
  3. wchar_t *caca = L"iaifhidhifhdi";
  4. MessageBox(NULL, caca,(LPCWSTR)ventana.c_str(), icono | MB_OK);
  5. }

El problema es que no hay manera de pasar de string wchar_t* o a wstring, ¿alguna idea?.

Saludos y gracias.

Bueno parece que hay muchos codes por stackoverflow cuando lo solucione pasaré la respuesta, de todas formas estaría bien meterle una scrollbar, un saludo.

Edito: solucionado, que aproveche:

Código
  1. void enseñar_mensaje(string ventana, string mensaje, u_int icono)
  2. {
  3. int len;
  4. int slength = (int)ventana.length() + 1;
  5. len = MultiByteToWideChar(CP_ACP, 0, ventana.c_str(), slength, 0, 0);
  6. wstring ven(len, L'\0');
  7. MultiByteToWideChar(CP_ACP, 0, ventana.c_str(), slength, &ven[0], len);
  8. slength = (int)mensaje.length() + 1;
  9. len = MultiByteToWideChar(CP_ACP, 0, mensaje.c_str(), slength, 0, 0);
  10. wstring men(len, L'\0');
  11. MultiByteToWideChar(CP_ACP, 0, mensaje.c_str(), slength, &men[0], len);
  12. MessageBox(NULL, men.c_str(), ven.c_str(), icono | MB_OK);
  13. }


« Última modificación: 2 Noviembre 2015, 11:39 am por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Mostrar mensaje en ventana C++
« Respuesta #1 en: 2 Noviembre 2015, 12:49 pm »

No entendí mucho el problema (aunque ya esté solucionado). ¿Querías convertir una cadena de caracteres (const char *) a una cadena de caracteres ancha (wchar_t *)?

Si es así, hay maneras más sencillas :P

Código
  1. const char lpszMessage[] = "Esto es una cadena de caracteres";
  2.    wchar_t *lpszWideMessage;
  3.    size_t uMessageSize = 0;
  4.  
  5.    uMessageSize = strlen(lpszMessage);
  6.    lpszWideMessage = new wchar_t[uMessageSize * sizeof(wchar_t)];
  7.  
  8.    for(size_t i = 0; i < uMessageSize; i++)
  9.        lpszWideMessage[i] = (wchar_t)lpszMessage[i];
  10.  
  11.    std::wcout << lpszWideMessage;

Y si quieres pasar la cadena wchar_t * a std::wstring, puedes hacer lo siguiente:
Código
  1. std::wstring cWideMessage = lpszWideMessage;

Si todo esto es porque lo necesitabas para la función MessageBox, que sepas que puedes usar MessageBoxA para cadenas de texto de un byte por carácter (const char * o LPCSTR).

Fíjate en el código extraído de la librería de Windows:

Código
  1. #ifdef UNICODE
  2. #define MessageBox MessageBoxW
  3. #else
  4. #define MessageBox MessageBoxA
  5. #endif

Espero haber ayudado


En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Mostrar mensaje en ventana C++
« Respuesta #2 en: 2 Noviembre 2015, 13:35 pm »

Cuidado con:

Código
  1. lpszWideMessage = new wchar_t[uMessageSize * sizeof(wchar_t)];

El sizeof no se necesita para ese caso. Ahí estás creando una cadena del doble de tamaño.
Y hay que poner caracter nulo.

Código
  1. lpszWideMessage = new wchar_t[uMessageSize + 1];
  2. for(size_t i = 0; i < uMessageSize; i++)
  3.    lpszWideMessage[i] = (wchar_t)lpszMessage[i];
  4. lpszWideMessage[uMessageSize] = '\0';
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Mostrar mensaje en ventana C++
« Respuesta #3 en: 2 Noviembre 2015, 14:07 pm »

Pues todo esto venía por la función de mostrar un mensaje MessageBox(), en mi caso al estar mi proyecto en UNICODE, por defecto necesitaba pasar de argumentos wchar_t*, y no sabía como obtenerlos hasta que encontre como hacerlo en el stackoverflow, pero como bien has indicado con MessageBoxA no es necesario ya que puedes pasar como parámetros const char*, luego la solución para mostrar un mensaje de la manera más sencilla queda de la forma:

Código
  1. void enseñar_mensaje(string ventana, string mensaje, u_int icono)
  2. {
  3. MessageBoxA(NULL, mensaje.c_str(), ventana.c_str(), icono | MB_OK);
  4. }

Saludos.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Mostrar mensaje en ventana C++
« Respuesta #4 en: 3 Noviembre 2015, 10:04 am »

Cuidado con:

Código
  1. lpszWideMessage = new wchar_t[uMessageSize * sizeof(wchar_t)];

El sizeof no se necesita para ese caso. Ahí estás creando una cadena del doble de tamaño.
Y hay que poner caracter nulo.

Código
  1. lpszWideMessage = new wchar_t[uMessageSize + 1];
  2. for(size_t i = 0; i < uMessageSize; i++)
  3.    lpszWideMessage[i] = (wchar_t)lpszMessage[i];
  4. lpszWideMessage[uMessageSize] = '\0';

Es cierto lo del sizeof... Que despiste tengo encima XD. También tengo que reafirmar lo del carácter nulo :S Siento los errores
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
MANDAR MENSAJE A UNA VENTANA
Programación Visual Basic
CARRY-ON 1 1,814 Último mensaje 20 Abril 2006, 02:43 am
por NYlOn
Evitar mostrar errores en mysql y en vez mostrar mensaje personalizado
Bases de Datos
Cioouw 3 11,772 Último mensaje 26 Abril 2010, 16:25 pm
por Cioouw
[Ayuda] Mostrar pagina web en ventana
Java
Geormarsch 2 8,839 Último mensaje 25 Diciembre 2012, 13:43 pm
por Debci
[DUDA] Mostrar mensaje al ingresar en red wifi
Dudas Generales
MDd2 0 2,112 Último mensaje 3 Junio 2017, 15:27 pm
por MDd2
Enviar mensaje de una ventana a otra en C# Visual Studio
Programación General
MTH1695 1 3,539 Último mensaje 16 Octubre 2019, 20:17 pm
por ThunderCls
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines