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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [DUDA] Manejo de varias ventanas Win32
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [DUDA] Manejo de varias ventanas Win32  (Leído 3,203 veces)
Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
[DUDA] Manejo de varias ventanas Win32
« en: 10 Septiembre 2015, 22:55 pm »

Buenas, mi duda consiste en como puedo crear varias ventanas utilizando la API de windows. Por ejemplo, creo las dos ventanas, y una llama a la otra desde un menu. He intentado hacer algo pero ni si quiera compila (si compila, pero en realidad no me compila nada por lo que no se cual es error...). Agradecería muchísimo que alguien "veterano" en el tema me pueda ayudar...

Código
  1. // Main File
  2. // Build Date: 10-09-2015
  3.  
  4. #ifndef UNICODE
  5. #define UNICODE
  6. #endif
  7.  
  8. #include <Windows.h>
  9.  
  10. LRESULT CALLBACK MainWindowProc(HWND, UINT, WPARAM, LPARAM);
  11. LRESULT CALLBACK ParentWindowProc(HWND, UINT, WPARAM, LPARAM);
  12.  
  13. int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
  14. {
  15. const wchar_t MAIN_CLASS_NAME[] = L"MainWindow";
  16. const wchar_t PARENT_CLASS_NAME[] = L"ParentWindow";
  17. HWND mainHwnd, parentHwnd;
  18. WNDCLASS mainWc = {}, parentWc = {};
  19. MSG msg = {};
  20.  
  21. //MainHwnd
  22. mainWc.hbrBackground = (HBRUSH)COLOR_WINDOW;
  23. mainWc.hInstance = hInstance;
  24. mainWc.lpfnWndProc = MainWindowProc;
  25. mainWc.lpszClassName = MAIN_CLASS_NAME;
  26. RegisterClass(&mainWc);
  27.  
  28. mainHwnd = CreateWindowEx(0, MAIN_CLASS_NAME, L"Ventana principal", WS_OVERLAPPEDWINDOW, 100, 100, 800, 600, NULL, NULL, hInstance, NULL);
  29. if (!mainHwnd) return 1;
  30. //ParentHwnd
  31. parentWc.hbrBackground = (HBRUSH)COLOR_WINDOWTEXT;
  32. parentWc.hInstance = hInstance;
  33. parentWc.lpfnWndProc = ParentWindowProc;
  34. parentWc.lpszClassName = PARENT_CLASS_NAME;
  35. RegisterClass(&parentWc);
  36.  
  37. parentHwnd = CreateWindowEx(0, PARENT_CLASS_NAME, L"Ventana secundaria", WS_OVERLAPPEDWINDOW, 300, 300, 800, 600, NULL, NULL, hInstance, NULL);
  38. if (!parentHwnd) return 2;
  39.  
  40. ShowWindow(mainHwnd, nCmdShow);
  41.  
  42. while (GetMessage(&msg, NULL, 0, 0))
  43. {
  44. TranslateMessage(&msg);
  45. DispatchMessage(&msg);
  46. }
  47.  
  48. return 0;
  49. }
  50.  
  51. LRESULT CALLBACK MainWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  52. {
  53. switch (uMsg)
  54. {
  55. case WM_DESTROY:
  56. PostQuitMessage(0);
  57.  
  58. return 0;
  59. }
  60.  
  61. return DefWindowProc(hwnd, uMsg, wParam, lParam);
  62. }
  63.  
  64. LRESULT CALLBACK ParentWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  65. {
  66. switch (uMsg)
  67. {
  68. case WM_DESTROY:
  69. PostQuitMessage(0);
  70.  
  71. return 0;
  72. }
  73.  
  74. return DefWindowProc(hwnd, uMsg, wParam, lParam);
  75. }
  76.  

Si compilo esto me pone "Compilación correcta" en VS 2015 pero luego no me encuentra el archivo ejecutable lo que indica que no se compiló...

Un saludo y gracias de antemano.


En línea

someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: [DUDA] Manejo de varias ventanas Win32
« Respuesta #1 en: 10 Septiembre 2015, 23:14 pm »

En particular, cada campo de texto, botones, digamos widgets para generalizar, son ventanas en Windows.
Lo mejor que podes hacer es crearlas y darles un wndProc distinto a cada una..
Si necesitas compartir datos o pasar informacion de una a la otra, simplemente usa SendMessage


En línea

Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Re: [DUDA] Manejo de varias ventanas Win32
« Respuesta #2 en: 10 Septiembre 2015, 23:40 pm »

Si, algo de eso sabía pero como podría crear la ventana secundaria accesible a través del menu? Y en CreateWindowEx tendri que darle el valor la ventana principal en lugar de NULL?
En línea

someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: [DUDA] Manejo de varias ventanas Win32
« Respuesta #3 en: 11 Septiembre 2015, 01:22 am »

Tendrias que darle el HWND de la ventana padre en el parametro PARENT(hwndParentWindow)
En línea

Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Re: [DUDA] Manejo de varias ventanas Win32
« Respuesta #4 en: 11 Septiembre 2015, 02:31 am »

Bien una duda menos jajajajja y otra cosilla.
Si en el WindowProc de la ventana principal quiero utilizar la funcion ShowWindow, de donde saco el hwnd? Deberia declararlo como funcion global? Esque como parametro no puedo pasarlo...
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [DUDA] Manejo de varias ventanas Win32
« Respuesta #5 en: 11 Septiembre 2015, 11:33 am »

Si es su propia ventana lo que tratas de conseguir, es el hwnd que te pasa en el callback.

Si quieres otra ventana, puedes pasar el parámetro con el mensaje WM_CREATE:

Código
  1. LRESULT CALLBACK call(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){
  2.    static HWND mainHwnd = 0;
  3.    LONG hw = GetWindowLong(hwnd,GWL_ID);
  4.    HWND parent = GetParent(hwnd);
  5.    if(msg==WM_CREATE){
  6.        mainHwnd=*(HWND*)((CREATESTRUCT*)lParam)->lpCreateParams;
  7.    }
  8.    // ...
  9. }
  10.  
  11.  
  12. int main(){
  13.  
  14.    //...
  15.    parentHwnd = CreateWindowEx(0, PARENT_CLASS_NAME, L"Ventana secundaria", WS_OVERLAPPEDWINDOW, 300, 300, 800, 600, NULL, NULL, hInstance,   /** Este parametro se pasa en el evento WM_CREATE **/ &mainHwnd);
  16.  
  17. }

No sé bien qué buscas, pero a ver si algo de eso te sirve xD
En línea

Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Re: [DUDA] Manejo de varias ventanas Win32
« Respuesta #6 en: 11 Septiembre 2015, 13:10 pm »

Si, creo que más o menos era eso jajaja. Gracias por las respuestas.

Un saludo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como cerrar varias ventanas
Programación Visual Basic
_DRIGIN_ 0 1,248 Último mensaje 29 Enero 2007, 21:10 pm
por _DRIGIN_
crear varias ventanas [allegro]
Programación C/C++
smasher666 3 5,492 Último mensaje 2 Mayo 2010, 14:09 pm
por bizco
Duda Inyección DLL en proceso con varias ventanas
Programación C/C++
TomaSs 1 1,936 Último mensaje 4 Septiembre 2013, 13:23 pm
por TomaSs
Duda sobre manejo de mensajes Win32
Programación C/C++
Bob1098 5 2,374 Último mensaje 2 Agosto 2015, 22:19 pm
por karmany
Fallo en Manejo de Ventanas
GNU/Linux
SDCC 4 2,307 Último mensaje 28 Enero 2020, 03:02 am
por SDCC
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines