|
|
发表于 2010-3-21 21:33:00
|
显示全部楼层
Re:关于directx中坐标系的问题!!
恩 情况跟我想的一样。
首先CreateWindow()这个函数中的宽高是指整个窗口的大小,而你要的是程序窗口“客户区”的大小。
整个窗口包括标题栏、边框等,中间的那部分“客户区”才是大多数窗口程序希望提供给用户的内容。而如果你按照600*600的大小创建窗口,那么你的客户区实际上是不足600*600的! 至于到底缩小多少,那是跟你的窗口的风格有关的(取决于被窗口标题、边框等占据了多大)。
如果你想要创建的窗口客户区的实际大小有600*600,那你可以这样做(这也是一种通用的方法):
1.在你调用CreateWindow()时大小可以随便写(因为一会儿还要更改)。
2.通过AdjustWindowRectEX(LPRECT lpRect,DWORD dwStyte;BOOL bMenu;DWORD dwExStyle)函数算出实际的窗口大小。此函数会根据所需的窗口客户区大小算出窗口实际大小。
其中lpRect是希望的客户区的大小,dwStyte是窗口风格,bMenu是是否有菜单栏,dwExStyle是窗口的扩展风格。
函数会将计算好的窗口RECT通过lpRect返回。
3.用MoveWindow()函数调整窗口的大小。
具体代码如下;
RECT WindowsRect = { 0, 0, WIDTH, HEIGHT }; //WIDTH:需要的客户区宽度, HEIGHT:需要的客户区高度
AdjustWindowRectEx( &WindowsRect,
GetWindowStyle( hWnd ), //得到窗口风格
GetMenu( hWnd ) != NULL, //是否有菜单栏
GetWindowExStyle( hWnd ) ); //得到窗口扩展风格
MoveWindow( hWnd, 0, 0, WindowsRect.right-WindowsRect.left, WindowsRect.bottom-WindowsRect.top, FALSE ); //调整窗口
你可以将这段代码放在CreateWindow()和ShowWindow()之间。 |
|