設置窗口客戶區大小的方法


    話說, 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);

結語:
  這個辦法巧妙地避開了調用系統函數來計算非客戶的大小,
況且,在調用之前還要知道非客戶的組成, 這太復雜了, 反正我
是不清楚的.

女孩不哭(QQ:191035066)@2013-03-21 23:45:22 http://www.cnblogs.com/nbsofer


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM