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

2021-09-08 09:21:10 字數 1005 閱讀 9557

話說, windows sdk貌似並沒有提供設定乙個視窗的客戶區大小的api.

setwindowpos,movewindow 它們都只能設定整個視窗的大小, 如果不採取點其它的

方法, 是不能直接設定客戶區的大小的. 設定客戶區的大小用處不是很多,  但有

時候會用到, 比如在客戶區上進行文字輸出計算的時候.

windows的視窗由幾個部分組成, 這包括了客戶,非客戶區, getwindowrect可以

取得整個視窗的大小,getclientrect可以用來取得客戶的大小. 重要的是要知道非

客戶區的大小, 我記得可以通過getsystemmetrics來獲得, 但相對於***的方法來

說都要複雜. 下面說說我的辦法:

0) 變數定義

rect rcwindow; -> 整個視窗的大小

rect rcclient; -> 客戶區大小

int borderwidth,borderheight; ->非客戶大小

1) 通過 getwindowrect 取得整個視窗的大小

getwindowrect(hwnd,&rcwindow);

2) 通過 getclientrect 取得客戶矩形的大小

getclientrect(hwnd,&rcclient);

3) 由以上兩者相減得到非客戶的大小

borderwidth = (rcwindow.right-rcwindow.left)

-(rcclient.right-rcclient.left);

borderheight = (rcwindow.bottom-rcwindow.top)

-(rcclient.bottom-rcclient.top);

4) 使用 setwindowpos/movewindow 重新設定視窗大小

setwindowpos(hwnd,0,0,0,,boderwidth+新客戶區寬度,

boderheight+新客戶區高度,swp_nomove|swp_nozorder);

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

當我們呼叫createwindowex 函式時,我們使用了500 400來設定視窗的大小。然而,這和客戶區的大小是不一樣的。客戶區為視窗的一部分,遊戲軟體通常都在客戶區完成遊戲中的各種畫面 功能與效果的實現。當使用direct3d時,我們需要確定的大小。如果客戶區的大小與的大小不一致時,它將會被拉伸...

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

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

縮小客戶區 擴大非客戶區 的方法

當windows收到 wm nccalcsize 訊息時會指定客戶區大小,我們可以在這個時候設定客戶區的大小。引數lparam是乙個nccalcsize params結構,儲存包含三個矩形的陣列。第乙個矩形儲存視窗的客戶區。你只要改寫這個矩形的值就可以修改客戶區的大小了。修改了客戶區的大小後,還要響...