zoukankan      html  css  js  c++  java
  • 设置窗口客户区大小的方法

        话说, 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

  • 相关阅读:
    ZOJ 1002 Fire Net (火力网)
    UVa OJ 117 The Postal Worker Rings Once (让邮差只走一圈)
    UVa OJ 118 Mutant Flatworld Explorers (变体扁平世界探索器)
    UVa OJ 103 Stacking Boxes (嵌套盒子)
    UVa OJ 110 MetaLoopless Sorts (无循环元排序)
    第一次遇到使用NSNull的场景
    NSURL使用浅析
    从CNTV下载《小小智慧树》
    NSDictionary and NSMutableDictionary
    Category in static library
  • 原文地址:https://www.cnblogs.com/memset/p/2974593.html
Copyright © 2011-2022 走看看