如何在VC ++中制作真正的全屏模式?
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("screen") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("Program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("Digital Clock"),
WS_POPUP|WS_DLGFRAME|WS_VISIBLE, // _OVERLAPPEDWINDOW| WS_MAXIMIZE,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, SW_MAXIMIZE);// iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
答案 0 :(得分:1)
游戏通常使用DirectX,其模式独占视频输出 - 这意味着没有其他窗口(或任务栏)可以绘制到屏幕上,整个屏幕可供应用程序使用您想要的分辨率和颜色深度(几乎无论视频卡支持什么)。
答案 1 :(得分:1)
确实
SetWindowPos( hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );
不要把它放在任务栏的顶部?
答案 2 :(得分:1)
查看this function并查看WS_EX_TOPMOST ...
的定义答案 3 :(得分:1)
请参阅Can a window be always on top of just one other window?
如果多个窗口设置为AlwaysOnTop;而不只是那个窗口将保持在顶部,已被手动带到顶部。例如,Window1和Window2有两个窗口;然后当你运行window1.exe时,它将成为顶部的窗口;当您运行window2.exe时,该窗口将位于顶部,这是默认行为。
否则,如果你不允许任何其他窗口进入顶层,你将不得不寻找在你之后被调用的其他应用程序,然后可能以某种方式挂钩这些窗口,并且很可能调用它的Minimize事件将其发送到任务栏。