Lesson 4: 窗口大小和客户区大小

原文地址:
http://www.directxtutorial.com/Lesson.aspx?lessonid=11-1-4

当我们调用CreateWindowEx()函数时,我们使用了500*400来设置窗口的大小。然而,这和客户区的大小是不一样的。客户区为窗口的一部分,游戏软件通常都在客户区完成游戏中的各种画面、功能与效果的实现。
这里写图片描述

当使用Direct3D时,我们需要确定图片的大小。如果客户区的大小与图片的大小不一致时,它将会被拉伸或收缩以适应客户区的大小。

Rendering With and Without AdjustWindowRect()的比较:
这里写图片描述

The AdjustWindowRect() Function

该函数依据所需客户矩形的大小,计算需要的窗口矩形的大小。计算出的窗口矩形随后可以传递给CreateWindow函数,用于创建一个客户区所需大小的窗口。
函数的原型如下:

BOOL AdjustWindowRect(LPRECT lpRect,
                      DWORD dwStyle,
                      BOOL bMenu);

第一个参数是指向RECT结构的指针,该结构包含所需客户区域的左上角和右下角的坐标。函数返回时,该结构容纳所需客户区域的窗口的左上角和右下角的坐标。

第二个参数dwStyle指定将被计算尺寸的窗口的窗口风格

第三个参数BOOL类型的bMenu,指示窗口是否有菜单。

在实用代码里是怎么使用的呢?看下面这个例子:

RECT wr = {0, 0, 500, 400};    // set the size, but not the position
AdjustWindowRect(&wr, WS_OVERLAPPEDWINDOW, FALSE);    // adjust the size

// create the window and use the result as the handle
hWnd = CreateWindowEx(NULL,
                      L"WindowClass1",
                      L"Our First Windowed Program",
                      WS_OVERLAPPEDWINDOW,
                      300,    // x-position of the window
                      300,    // y-position of the window
                      wr.right - wr.left,    // width of the window
                      wr.bottom - wr.top,    // height of the window
                      NULL,
                      NULL,
                      hInstance,
                      NULL);

RECT wr = {0, 0, 500, 400};
声明并初始化期望得到的客户区域。

AdjustWindowRect(&wr, WS_OVERLAPPEDWINDOW, FALSE);
初始化RECT之后调用AdjustWindowRect()函数,我们把刚刚初始化的RECT的地址作为第一个参数传进去,以及设置窗口样式为WS_OVERLAPPEDWINDOW,没有菜单栏。

wr.right - wr.left,
wr.bottom - wr.top,
当AdjustWindowRect()被调用之后,窗口的指定宽度变成了指定矩形RECT wr的宽度,窗口的指定高度变成了指定矩形RECT wr的高度。通过这两个表达式可以为我们设置正确的窗口大小。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值