Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1347206
  • 博文数量: 118
  • 博客积分: 3888
  • 博客等级: 中校
  • 技术积分: 2940
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-10 18:15
个人简介

一看二做三总结

文章分类

全部博文(118)

分类: C/C++

2007-02-19 16:56:02

本文乃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

阅读(3436) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~