當我們呼叫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 座標原點從控制項所屬視窗客戶區移動到螢幕左上角,長寬為整個控制...