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)
| | |-+  Estilo visual thickframe no redimencionable en C++ 6.0 WinApi
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Estilo visual thickframe no redimencionable en C++ 6.0 WinApi  (Leído 4,256 veces)
xkiz ™


Desconectado Desconectado

Mensajes: 1.252


Ver Perfil WWW
Estilo visual thickframe no redimencionable en C++ 6.0 WinApi
« en: 1 Octubre 2011, 03:58 am »

pequeña consulta de principiante, tengo un ventana la cual necesito, por aspecto visual que sea como el ilustrado en la imagen de abajo, pero lo que no me sale es que esta ventana no se pueda redimendionar.



lo que estoy usando es lo siguiente:
Código
  1. HWND hWnd;
  2. DWORD StyleEx, Style;
  3.  
  4. Style = DS_MODALFRAME | WS_POPUP |  WS_THICKFRAME;
  5. StyleEx = WS_EX_TOOLWINDOW| WS_EX_STATICEDGE;
  6.  
  7. hInst = hInstance;
  8. hWnd = CreateWindowEx(StyleEx, szWindowVol, "Volume", Style, CW_USEDEFAULT, CW_USEDEFAULT, 60, 200, DIALOGHWND, NULL, hInstance, NULL);
  9.  
  10.  

osea se que si le saco WS_THICKFRAME la ventana ya no es redimencionable, pero la verdad es que me parece que queda mejor visualmente así,osea hay algun estilo que me este olvidando de poner?
osea lo que trato de hacer es lo mismo que la ventana de Windows donde se controla el volumen.


En línea

Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: Estilo visual thickframe no redimencionable en C++ 6.0 WinApi
« Respuesta #1 en: 1 Octubre 2011, 06:21 am »

fijate el mensaje WM_WINDOWPOSCHANGING

Código
  1. case WM_WINDOWPOSCHANGING:
  2.    WINDOWPOS *pwp=(WINDOWPOS *)lParam;
  3.    pwp->flags |= SWP_NOSIZE;
  4. break;
  5.  

S2


En línea

xkiz ™


Desconectado Desconectado

Mensajes: 1.252


Ver Perfil WWW
Re: Estilo visual thickframe no redimencionable en C++ 6.0 WinApi
« Respuesta #2 en: 1 Octubre 2011, 19:52 pm »

nunca pense que una ventanitta me iba a complicar tanto, @Karman  WM_WINDOWPOSCHANGING no la conocía, igual me hace un efecto medio raro, vah  aplicando eso igual se puede redimencionar la ventana.

lo que trato de hacer es una ventana semi control del volumen de Windows7(no me acuerdo como era en XP)

arriba omití poner código:
Código
  1. LRESULT CALLBACK VolWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){/*
  2. FUNCTION: VolWndProc
  3. PURPOSE : Manage the Volume control.
  4. RESULT : None
  5. */
  6. // int wmId, wmEvent;
  7. RECT r,q;
  8. POINT p;
  9. int x;
  10. int y;
  11. WINDOWPOS *pwp;
  12.  
  13. switch (message) {
  14. case WM_ACTIVATEAPP:
  15. if(wParam == FALSE){
  16. //OutputDebugString((LPCTSTR)"WM_ACTIVATEAPP lParam FALSE");
  17. DestroyWindow(hWnd);
  18. }
  19. break;
  20. case WM_CREATE:
  21.  
  22. GetWindowRect(GetDesktopWindow(), &r);
  23. GetWindowRect(hWnd, &q);
  24. SHAppBarMessage(ABM_GETTASKBARPOS, &abdAppBar);
  25. GetCursorPos(&p);
  26.  
  27. if( (abdAppBar.rc.top > 100) ){ ///Bottom
  28. y = ( (abdAppBar.rc.top - (q.bottom - q.top) ));
  29. x = p.x -((q.right - q.left) /2);
  30. }else if( (abdAppBar.rc.top <= 0) && (abdAppBar.rc.left <=0) && ( (abdAppBar.rc.right - abdAppBar.rc.left) < 600 ) ){ // Left
  31. x = (abdAppBar.rc.right +10);
  32. y = p.y -((q.bottom - q.top)-((q.bottom - q.top)/2) );
  33. }else if( ( (abdAppBar.rc.right  - abdAppBar.rc.left  ) > 600) && ((abdAppBar.rc.bottom - abdAppBar.rc.top) < 600 ) ){ // Top
  34. y = ( (abdAppBar.rc.bottom + 10 ));
  35. x = p.x -((q.right - q.left) /2);
  36. }else if( (abdAppBar.rc.left >100) ){ // Right
  37. x = ( (r.right - (q.right - q.left))- (abdAppBar.rc.right - abdAppBar.rc.left) -10);
  38. y = p.y -((q.bottom - q.top)-((q.bottom - q.top)/2) );
  39. }else{
  40. y = ( (abdAppBar.rc.top - (q.bottom - q.top) ));
  41. x = p.x -((q.right - q.left) /2);
  42. }
  43. MoveWindow(hWnd, x,y, 56, 200, TRUE);
  44. //SetWindowPos(hWnd, 0, x, y, q.right - q.left, (q.bottom - q.top), SWP_NOMOVE | SWP_FRAMECHANGED | SWP_NOACTIVATE);
  45. //SetWindowPos(hWnd, 0,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
  46.  
  47. break;
  48. /*case WM_WINDOWPOSCHANGING:
  49. pwp=(WINDOWPOS *)lParam;
  50. pwp->flags |= SWP_NOSIZE;
  51. break;*/
  52. case WM_SIZE:
  53. //SetWindowPos(hWnd, 0, x, y, q.right - q.left, (q.bottom - q.top), SWP_NOMOVE | SWP_FRAMECHANGED | SWP_NOACTIVATE);
  54. break;
  55. case WM_NOTIFY:
  56. int pos;
  57. char dumy[10];
  58. switch (((LPNMHDR)lParam)->code){
  59. case NM_CUSTOMDRAW:
  60. //if (((LPNMHDR)lParam)->idFrom == IDC_CUSTOMLISTBOX1){
  61. if (((LPNMHDR)lParam)->hwndFrom  == Slider){
  62. pos = (int)SendMessage(Slider, TBM_GETPOS, 0, 0);
  63. StreamVolume = pos *-1;
  64. sprintf(dumy,"%i %%", StreamVolume);
  65. SetWindowText(StaticVol, dumy); //StaticVol: Static control
  66. if(StreamLoaded){
  67. SetVol(StreamVolume);// cambia el volumen MCISendString
  68. }
  69. break;
  70. }
  71. break;
  72. break;
  73. }
  74. break;
  75. default:
  76. return DefWindowProc(hWnd, message, wParam, lParam);
  77.   }
  78.   return 0;
  79. }
  80.  

yo pense que con SetWindowPos con SWP_NOSIZE lo iba a poder hacer pero no cambia nada.
encima no puedo capturar la ventana de control de volumen de windows con mingun Control Spy para ver el Style que tiene aplicado ni nada....
En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Estilo visual thickframe no redimencionable en C++ 6.0 WinApi
« Respuesta #3 en: 1 Octubre 2011, 20:52 pm »

Yo estaba pensando en obtener el estilo de la ventana, el proceso se llama SndVol.exe puedes recorrer todas las ventanas y verificar que su proceso sea ese, si tengo tiempo mas tarde me pongo a probar...
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Estilo visual thickframe no redimencionable en C++ 6.0 WinApi
« Respuesta #4 en: 1 Octubre 2011, 21:37 pm »

Solo debes cancelar el mensaje de NOTIFICACION al redimencionar la ventana...

con un Hook seria interceptar a WM_SYSCOMMAND y rectificar wParam... y cancelar!¡.

Código
  1. case WM_SYSCOMMAND:
  2.    if ((wParam & 0xfff0) == SC_SIZE) return 0;
  3.    break;
  4.  

pero como ya tienes el Callback de la ventana solo debas ajustar esas lineas.

Dulces Lunas!¡.
« Última modificación: 1 Octubre 2011, 21:42 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: Estilo visual thickframe no redimencionable en C++ 6.0 WinApi
« Respuesta #5 en: 1 Octubre 2011, 22:57 pm »

nunca pense que una ventanitta me iba a complicar tanto, @Karman  WM_WINDOWPOSCHANGING no la conocía, igual me hace un efecto medio raro, vah  aplicando eso igual se puede redimencionar la ventana.

Probaste desactivar el flag de redimencionamiento?

Código
  1. DWORD Style = (DS_MODALFRAME | WS_POPUP |  WS_THICKFRAME)&~WS_SIZEBOX;

S2
En línea

xkiz ™


Desconectado Desconectado

Mensajes: 1.252


Ver Perfil WWW
Re: Estilo visual thickframe no redimencionable en C++ 6.0 WinApi
« Respuesta #6 en: 1 Octubre 2011, 23:52 pm »

mm no se que hice que ahora no me anda nada se me crashea  de nada, no se que hice pero arruine todo, nada me anda del programa ya...

error de la PC Virtual, reinstalo la pc virtual y VS6 y veo que onda..
por ahora lo de @BlackZeroX, me sirve, pero...
@Karman: no lo habia conciderado, ahora cuando arregle la PCV lo pruebo.

EI: juntando mensajes.

bue, no se que paso ahora maquina virtual re formateada, limpia y todo lindo al iniciar la aplicación se cierra, al iniciar en modo de Debug me devuelve:
Código:
First-chance exception in Radio.exe: 0xC0000096: Privileged Instruction.
The program 'D:\Projects\VC++\Radio 2\Radio\Release\Radio.exe' has exited with code 0 (0x0).

haga lo que haga, pero si la pongo en la pc principal anda todo bien.
hasta que no solucione eso no puedo seguir con el proyecto.

Edit:
no se como ni por que, ahora todo funciona bien se soluciono solo ese problema comentado arriba.
@Karman: si le pongo eso en Stile, me lo visualiza sin bordes, como estilo clásico.
« Última modificación: 2 Octubre 2011, 20:30 pm por xkiz ™ » En línea

xkiz ™


Desconectado Desconectado

Mensajes: 1.252


Ver Perfil WWW
Re: Estilo visual thickframe no redimencionable en C++ 6.0 WinApi
« Respuesta #7 en: 3 Octubre 2011, 01:23 am »

encontré la solución:

Código
  1. void create(){
  2. HWND hWnd;
  3. DWORD StyleEx, Style;
  4.  
  5. Style = DS_MODALFRAME | WS_POPUP |  WS_THICKFRAME;
  6. StyleEx = WS_EX_TOOLWINDOW| WS_EX_STATICEDGE;
  7.  
  8. hInst = hInstance;
  9. hWnd = CreateWindowEx(StyleEx, szWindowVol, "Volume", Style, CW_USEDEFAULT, CW_USEDEFAULT, 60, 200, DIALOGHWND, NULL, hInstance, NULL);
  10. /// bla bla bla...........
  11. }
  12.  
  13. LRESULT CALLBACK VolWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
  14. switch (message) {
  15. case WM_ACTIVATEAPP:
  16. if(wParam == FALSE){
  17. DestroyWindow(hWnd);
  18. }
  19. break;
  20. case WM_NCHITTEST:
  21. return -1;
  22. default:
  23. return DefWindowProc(hWnd, message, wParam, lParam);
  24. }
  25.   return 0;
  26. }
  27.  

WM_NCHITTEST era el mensaje que tenia que interrumpir para que no permita redimencionar la ventana.


@BlackZeroX & @Karman muchas gracias por la ayuda.
PD: reposteo solo por que encontré la solución.
« Última modificación: 3 Octubre 2011, 02:12 am por xkiz ™ » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como se llaman este estilo de imagenes? (otro estilo XD) « 1 2 »
Diseño Gráfico
Jnex 16 12,386 Último mensaje 18 Marzo 2009, 02:16 am
por JERRY110982
Equivalencia de función WINAPI unsigned int WINAPI myRun en Windows con Ubuntu
Programación C/C++
bertamax 2 3,097 Último mensaje 7 Agosto 2010, 16:27 pm
por bertamax
Problemas con WinApi
Programación C/C++
Nobody12 0 3,128 Último mensaje 10 Enero 2011, 21:47 pm
por Nobody12
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines