Lesson 4 視窗大小和客戶區大小

2021-07-25 08:32:22 字數 1513 閱讀 8598

當我們呼叫createwindowex()函式時,我們使用了500*400來設定視窗的大小。然而,這和客戶區的大小是不一樣的。客戶區為視窗的一部分,遊戲軟體通常都在客戶區完成遊戲中的各種畫面、功能與效果的實現。

當使用direct3d時,我們需要確定的大小。如果客戶區的大小與的大小不一致時,它將會被拉伸或收縮以適應客戶區的大小。

rendering with and without adjustwindowrect()的比較:

該函式依據所需客戶矩形的大小,計算需要的視窗矩形的大小。計算出的視窗矩形隨後可以傳遞給createwindow函式,用於建立乙個客戶區所需大小的視窗。

函式的原型如下:

bool adjustwindowrect(lprect lprect,

dword dwstyle,

bool bmenu);

第乙個引數是指向rect結構的指標,該結構包含所需客戶區域的左上角和右下角的座標。函式返回時,該結構容納所需客戶區域的視窗的左上角和右下角的座標。

第二個引數dwstyle指定將被計算尺寸的視窗的視窗風格

第三個引數bool型別的bmenu,指示視窗是否有選單。

在實用**裡是怎麼使用的呢?看下面這個例子:

rect wr = ;    // set the size, but not the position

// create the window and use the result as the handle

hwnd = createwindowex(null,

l"windowclass1",

l"our first windowed program",

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 = ;

宣告並初始化期望得到的客戶區域。

wr.right - wr.left,

wr.bottom - wr.top,

當adjustwindowrect()被呼叫之後,視窗的指定寬度變成了指定矩形rect wr的寬度,視窗的指定高度變成了指定矩形rect wr的高度。通過這兩個表示式可以為我們設定正確的視窗大小。

設定視窗客戶區大小的方法

話說,windows sdk貌似並沒有提供設定乙個視窗的客戶區大小的api.setwindowpos,movewindow 它們都只能設定整個視窗的大小,如果不採取點其它的 方法,是不能直接設定客戶區的大小的.設定客戶區的大小用處不是很多,但有 時候會用到,比如在客戶區上進行文字輸出計算的時候.wi...

如何調整視窗以適應客戶區大小

以下黑色字型部分為 假設我們用createwindow 0,0,w,h,建立乙個視窗,我們將獲得乙個w x h大小的視窗,通常我們需要的是客戶區大小為w x h,如何做呢?乙個方法是呼叫api函式setwindowpos,通常我們需要提供3個引數 視窗控制代碼hwnd,視窗寬度w,視窗高度h。下面是...

MFC獲取視窗和客戶區座標分析

cwnd pwnd getdlgitem idb but recognize pwnd getclientrect rect 指該控制項自身客戶區的矩形,原點為控制項左上角,長寬為整個控制項的尺寸 clienttoscreen rect 座標原點從控制項所屬視窗客戶區移動到螢幕左上角,長寬為整個控制...