話說, 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結構,儲存包含三個矩形的陣列。第乙個矩形儲存視窗的客戶區。你只要改寫這個矩形的值就可以修改客戶區的大小了。修改了客戶區的大小後,還要響...