问题描述:如何在windows程序中设置窗口程序为全屏呢?下面的例子中只使用到windows的API函数,如果你的编译环境下有类似于SDL_FULLSCREEN这样的参数可以设置,那就不用看这个例子了,当然这样的参数的设置也有失效的时候,如果出现这种情况也是可以借鉴后面的例子的。这个例子中使用的主要API函数是SetWindowPlacement,当然网络上也会介绍使用其他的方法。
解决描述:首先我们了解windows的窗口是如何全屏的呢?注意我说的是全屏,不是MAX_SIZE,不是窗口最大化。其实窗口全屏只需要满足两个主要条件即可:第一、窗口的工作区域的左上角与桌面的(0、0)点重合,第二、窗口的尺寸与桌面的尺寸一致。当然你的窗口也要在前端。
代码部分:
第一步:你需要获得窗口的句柄,如果你可以直接从外部获得,就可以跳过这一部分了。
HWND hWnd = FindWindow(NULL,L"你窗口的标题"); //通过你窗口的标题获得窗口的句柄
第二步:获得一些你的当前系统的信息(我们使用GetSystemMetrics这个API函数,这个函数可以获得很多系统信息,如果你的本例子使用失败,可以从这个函数中获得一些有用的帮助。)
int ScreenX = GetSystemMetrics(SM_CXSCREEN); //获得全屏的宽
int ScreenY = GetSystemMetrics(SM_CYSCREEN); //获得全屏的高
int DialogX = GetSystemMetrics(SM_CXDLGFRAME); //获得你的窗口左边空白边框的宽度
int DialogY = GetSystemMetrics(SM_CYDLGFRAME) + GetSystemMetrics(SM_CYCAPTION); //获得你的窗口的上面部分空白的高度,注意这里是边框高度加上标题栏的高度
第三步:有了上面的参数你就可以做到如何让你的窗口满足全屏需要的主要条件了吧。来试一试。
WINDOWPLACEMENT newment;
newment.length = sizeof(WINDOWPLACEMENT);
newment.flags = WPF_RESTORETOMAXIMIZED;
newment.showCmd = SW_SHOWMAXIMIZED;
newment.ptMaxPosition.x = 0;
newment.ptMaxPosition.y = 0;
newment.ptMinPosition.x = 0;
newment.ptMinPosition.y = 0;
newment.rcNormalPosition.left = - DialogX; //(0,0)点重合
newment.rcNormalPosition.top = - DialogY;
newment.rcNormalPosition.bottom = ScreenX - DialogY; //尺寸一致
newment.rcNormalPosition.right = ScreenY - DialogX;
SetWindowPlacement(hWnd,&newment);
好了通过上面的设置,窗口就应该全屏了,希望朋友们能够补充和完善。