如何让我的程序在VC ++中进行真正的全屏视图?

时间:2009-10-07 09:05:02

标签: winapi visual-c++

如何在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 ;
     }

4 个答案:

答案 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事件将其发送到任务栏。