Antes de utilizar SetWindowLong
, llame ShowWindow(hWnd, SW_HIDE)
, a continuación, llamar SetWindowLong
, a continuación, llamar de nuevo como ShowWindow
ShowWindow(hWnd, SW_SHOW)
. Así que el código se verá así:
long style= GetWindowLong(hWnd, GWL_STYLE);
style &= ~(WS_VISIBLE); // this works - window become invisible
style |= WS_EX_TOOLWINDOW; // flags don't work - windows remains in taskbar
style &= ~(WS_EX_APPWINDOW);
ShowWindow(hWnd, SW_HIDE); // hide the window
SetWindowLong(hWnd, GWL_STYLE, style); // set the style
ShowWindow(hWnd, SW_SHOW); // show the window for the new style to come into effect
ShowWindow(hWnd, SW_HIDE); // hide the window so we can't see it
Aquí es una cita relevante de Microsoft's Website:
Para evitar que el botón de la ventana por la inscripción en la barra de tareas, crear la ventana sin dueño con el WS_EX_TOOLWINDOW extendida estilo. Como una alternativa , puede crear una ventana oculta y hacer que esta ventana oculta sea la propietaria de su ventana visible.
El Shell eliminará el botón de una ventana de la barra de tareas solo si el estilo de la ventana admite los botones visibles de la barra de tareas. Si desea cambiar dinámicamente el estilo de una ventana a una que no admite botones de la barra de tareas visibles, primero debe ocultar la ventana (llamando al ShowWindow con SW_HIDE), cambiar el estilo de la ventana y mostrar la ventana .
WS_EX_ * debe ser get/set con GWL_EXSTYLE - no GWL_STYLE. (WS_EX_TOOLWINDOW tiene el valor 0x00000080, que si lo usa como un GWL_STYLE en lugar de un _EXSTYLE, terminará modificando la parte de un estilo de Windows que normalmente no se usa para las ventanas de la aplicación, por lo que parecerá que no se está ejecutando. La parte baja de un estilo de Windows normalmente se usa para bits de estilo específicos del control, por ejemplo, para un botón, este tiene el mismo valor que BS_BITMAP.) – BrendanMcK