本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接,严禁用于任何商业用途。
作者:fireaxe_hq@hotmail.com
博客:fireaxe.blog.chinaunix.net
全屏的实现实际上是利用窗口的client区覆盖了整个屏幕实现的,为了实现完全的全屏,第一步就是获得当前显卡的显示模式,因为如果显示模式为1024×768的而把窗口按800×600设置不能实现全屏。要去掉窗口的非client区,然后去掉client区里的所有控件,最后利用当前的显示模式设置client区的大小,并把窗口移动到(0,0)位置。
当然为了实现全屏,首先要利用DirectX获得对显示模式的控制,并进行相应设计。
第一步: 加入DirectX所需的动态链接库
#include <ddraw.h> #pragma comment (lib,"ddraw.lib") |
第二步: 显示模式的获得与控制
HRESULT WINAPI DirectDrawCreate(GUID FAR *lpGUID, LPDIRECTDRAW FAR *lplpDD, IUnknown FAR *pUnkOuter);
HRESULT SetCooperativeLevel(HWND hWnd, DWORD dwFlags);
HRESULT SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) ;
|
示例:
LPDIRECTDRAW DXW; HRESULT ddrval;
ddrval=DirectDrawCreate( NULL, &DXW, NULL ); if( DD_OK != DD_OK) return FALSE;//创建DirectDraw对象失败返回
ddrval=DXW->SetCooperativeLevel(NULL,DDSCL_NORMAL); if( DD_OK!= DD_OK) return FALSE;// 取得窗口模式失败返回
ddrval=DXW->SetDisplayMode(800,600,16); if( DD_OK!= DD_OK) return FALSE;//设置显示模式失败返回
|
第三步: 窗口的设置
去掉窗口里的所有空间,打开窗口大Properties界面,取消Style属性页里Title bar前面的勾
ok! 现在只剩下client区了,下面的代码可以把窗口移动到合适的位置并变到合适的大小:
void MoveWindow( int x, int y, int nWidth, int nHeight,
BOOL bRepaint = TRUE ); |
经测试发现前两个变量都为零时,窗口会默认在屏幕的中央显示,如果真正控制其位置,就要选择为非零整数。
一定要主意:如果两个变量有一个不为零时,全屏后不能屏蔽工具栏,如果要实现完全的全屏,必须使两个变量都为零!!!!!
本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接,严禁用于任何商业用途。
作者:fireaxe_hq@hotmail.com
博客:fireaxe.blog.chinaunix.net
阅读(3485) | 评论(0) | 转发(0) |