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

  • 相关阅读:
    【19】网站搭建:标签功能
    【18】网站搭建:自定义用户模型
    【17】网站搭建:Celery定时刷新缓存
    【16】网站搭建:Redis缓存提速
    【15】网站搭建:用户注册登录
    【14】网站搭建:xadmin后台强化
    【13】网站搭建:全文搜索
    C#,一种简单的方式实现滚动鼠标缩放图片,平移
    WebGIS的开发方式
    C#中找不到MouseWheel事件的解决办法
  • 原文地址:https://www.cnblogs.com/memset/p/2974593.html
Copyright © 2011-2022 走看看