大家都知道,很多游戏都是制作成全屏的,可能看起来效果会更好一些。之前看到有朋友提出关于窗口全屏怎么制作的问题,还有些朋友以为最大化就是全屏,我说一下我的思路吧,全屏的方法不唯一,我这个方法也许不是很好,不过比较容易想到,思路也比较明确,但是要用到一些sdk函数(其实这个没办法,必须要用,否则做不到的),可能对于只熟悉easyx的朋友稍微有点陌生,我尽量说的细一些吧。首先,要全屏,就不能显示标题栏和任务栏(当然了,状态栏和菜单都不能显示,只是我们建立简单的窗口没有这些),也就是必须让窗口的客户区占据整个屏幕,现在思路有了,下一步就要着手写代码。我们这是要修改窗口,就要先得到窗口的句柄,有了窗口句柄,我们才可以对这个窗口做手脚嘛,呵呵,easyx为我们提供了GetHWnd()这个函数,可以得到窗口句柄,具体怎么得到呢,要先创建一个句柄变量来存放我们得到的句柄,也就是这样:HWND hwnd = GetHWnd(),那么得到以后呢,很遗憾easyx库里面没有其他关于修改窗口相关的函数了,没关系,可以借助win32 sdk函数嘛,反正我们有句柄了(窗口把柄握在手),我们想对它干什么可以啦,哈哈,然后,我们先来把标题栏给拆掉吧,我们可以用SetWindowLong这个函数来拆掉标题栏,这个函数有3个参数,第一个参数就是我们窗口的句柄,第二个参数可以有很多值,他们都是宏,我们选择GWL_STYLE,他是用来表示我们要设定一个新的窗口风格,到底设定什么样的风格呢,就是第三个参数啦,我们可以把第三个参数设置为GetWindowLong(hWnd,GWL_STYLE)-WS_CAPTION,这就是一种新的风格诞生了,就是一个减掉标题栏的窗口风格,所以,这个函数如下,就是SetWindowLong(hwnd , GWL_STYLE , GetWindowLong(hwnd,GWL_STYLE)-WS_CAPTION);既然没有标题栏了,也就是只有客户区了,但是大小还不对啊,位置也不对啊,我们需要让这个客户区覆盖整个屏幕,也就是从屏幕的左上角到右下角全都是客户区,我们需要做两件事,1是让窗口的尺寸和屏幕的尺寸达成一致,2是让窗口的左上角和屏幕的左上角对齐开始绘制窗口,这样就完全覆盖了,我们可以用SetWindowPos这样一个函数,这个函数有6个参数呢,虽然多,但是不复杂,第一个参数依然是我们窗口的句柄,第二个参数是窗口的Z序,什么叫Z序呢,也就是我们通常说的几个同时打开的窗口 谁在谁前面 谁挡住了谁,这样的顺序,我们设置为HWND_TOP这样一个宏,他就是让我们的窗口始终是最前端,覆盖所有窗口,我们要全屏嘛,必须的,第三个和第四个参数是我们的窗口要显示的左上角X坐标和Y坐标,这个不用说啦,肯定是0,0啦,要和屏幕的左上角达成一致嘛,第五个和第六个参数呢,是我们窗口的宽度和高度,之前说过啦,要让我们的窗口和屏幕达成一致嘛,所有屏幕是多宽,我们的窗口就弄多宽,屏幕是多高,我们的窗口就多高,但是我们怎么知道屏幕的宽和高呢,这里又有个函数要用,就是GetSystemMetrics,这个函数就一个参数,他可以根据这个参数的不同而返回很多很多系统内部的东西,我们这里要的就是屏幕的宽和高,所以参数就设置为SM_CXSCREEN表示我们要得到屏幕的宽,SM_CXSCREEN表示我们要得到屏幕的高,也就是GetSystemMetrics(SM_CXSCREEN)和GetSystemMetrics(SM_CXSCREEN)分别会返回宽和高,一会把这两个函数分别当成参数写进SetWindowPos里面就可以啦,最后一个参数是窗口尺寸和定位的标志,我们就设置成SWP_SHOWWINDOW正常显示窗口就可以啦,复杂的我们也不弄,呵呵,现在6个参数都有啦,我们填进去吧,也就是SetWindowPos(hwnd , HWND_TOP , 0 , 0 , GetSystemMetrics(SM_CXSCREEN) , GetSystemMetrics(SM_CXSCREEN) , SWP_SHOWWINDOW);好啦,我们的工作完成啦,下面我把代码整理一下,发个整体的,其实也没几行代码,呵呵,主要为了好复制粘贴嘛,试试结果吧,希望能满意哦。
#include <graphics.h>
#include <conio.h>
void main()
{
initgraph(640, 480);
HWND hwnd = GetHWnd();
SetWindowLong(hwnd , GWL_STYLE , GetWindowLong(hwnd, GWL_STYLE) - WS_CAPTION);
SetWindowPos(hwnd , HWND_TOP , 0 , 0 , GetSystemMetrics(SM_CXSCREEN) , GetSystemMetrics(SM_CXSCREEN) , SWP_SHOWWINDOW);
getch();
closegraph();
}
#include <graphics.h>
#include <conio.h>
void main()
{
initgraph(640, 480);
HWND hwnd = GetHWnd();
SetWindowLong(hwnd , GWL_STYLE , GetWindowLong(hwnd, GWL_STYLE) - WS_CAPTION);
SetWindowPos(hwnd , HWND_TOP , 0 , 0 , GetSystemMetrics(SM_CXSCREEN) , GetSystemMetrics(SM_CXSCREEN) , SWP_SHOWWINDOW);
getch();
closegraph();
}