如何在窗口上移动客户区的起始坐标?

用户名

我参考了下面的文章以使用DWM绘制自定义框架区域。使用DWM的自定义窗口框架删除标准框架之后,该框架中不存在非客户区域。

void CMainFrame::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp)
{
    int nTHight = 30; /*The title bar height*/
    RECT * rc;
    RECT aRect;
    RECT bRect;
    RECT bcRect;
    if(bCalcValidRects == TRUE)
    {
        CopyRect(&aRect,&lpncsp->rgrc[1]); 
        CopyRect(&bRect,&lpncsp->rgrc[0]);
        bcRect.left = bRect.left;
        bcRect.top = bRect.top - nTHight;
        bcRect.right = bRect.right;
        bcRect.bottom = bRect.bottom;
        CopyRect(&lpncsp->rgrc[0],&bcRect);
        CopyRect(&lpncsp->rgrc[1],&bRect);
        CopyRect(&lpncsp->rgrc[2],&aRect);
    }
    else
    {
        rc = (RECT *)lpncsp;
        rc->left = rc->left;
        rc->top = rc->top - nTHight;
        rc->right = rc->right;
        rc->bottom = rc->bottom;
    }

    CFrameWnd::OnNcCalcSize(bCalcValidRects, lpncsp);
}

因为整个窗口是客户区域,所以我必须调整框架的UI控件位置,但是我不知道如何处理此问题。例如,在删除非客户部分之前,应将红色矩形下方的所有UI组件移至客户区域的原始坐标。

在此处输入图片说明

拉比德76

CWnd::GetWindowRect给您屏幕上窗口的矩形。包括字幕,边框和滚动条的尺寸(如果有)。

CWnd::GetClientRect给您窗口的客户矩形。左侧和顶部成员将为0。右侧和底部成员将包含窗口的宽度和高度。

CWnd::ScreenToClientCWnd::ClientToScreen从客户区域计算屏幕坐标和返回屏幕的点或矩形。

AdjustWindowRect 根据窗口的客户端矩形计算所需的窗口矩形。

这是计算窗口边距的函数:

void CalculateWndMargin( const CWnd &wnd, int &leftM, int &rightM , int &topM, int &bottomM )
{
    CRect wndRect;
    wnd.GetWindowRect( wndRect );
    CRect screenRect;
    wnd.GetClientRect( screenRect );
    wnd.ClientToScreen( screenRect );
    leftM = screenRect.left - wndRect.left;
    rightM = wndRect.right - screenRect.right;
    topM = screenRect.top - wndRect.top;
    bottomM = wndRect.bottom - screenRect.bottom;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在窗口上设置图标

来自分类Dev

如何在窗口上设置图标

来自分类Dev

如何在窗口滚动上上下移动div

来自分类Dev

如何在移动或小窗口上的HTML中隐藏元素?

来自分类Dev

如何在窗口上模拟array_agg(distinct x)?

来自分类Dev

子进程生成如何在窗口上工作而不在ubuntu上工作?

来自分类Dev

子进程生成如何在窗口上工作而不在ubuntu上工作?

来自分类Dev

如何在ClojureScript中创建可以集中在窗口上的js / Notification?

来自分类Dev

Python:如何在窗口上以不同颜色显示输出消息?

来自分类Dev

如何在窗口坐标中插入一个带有数字的圆?

来自分类Dev

如何使用anaconda在窗口上安装tensorflow

来自分类Dev

当鼠标不在窗口上时,如何在不冻结的情况下为 UI 设置动画?

来自分类Dev

如何在C#.Net中使用鼠标指针在窗口内移动图片框

来自分类Dev

如何在窗口中对齐DIV

来自分类Dev

鼠标左移窗口后如何保持焦点在窗口上

来自分类Dev

在窗口上连续应用groupby pyspark

来自分类Dev

CreateBitmap 图像未打印在窗口上

来自分类Dev

如何在代码窗口上放大Xcode

来自分类Dev

Vim:如何在窗口调整大小时使缓冲区自动平均分配空间

来自分类Dev

如何使用qt5(QtQuick 2.1)及更高版本在窗口上打印度数符号

来自分类Dev

如何确保在窗口上仅使用一个选项卡

来自分类Dev

拖动未装饰的舞台时,如何强制光标停留在窗口上

来自分类Dev

(Java)在窗口内获取鼠标坐标

来自分类Dev

在窗口中创建坐标查找

来自分类Dev

(Java)在窗口内获取鼠标坐标

来自分类Dev

硒,运行firefox而不在窗口上显示窗口

来自分类Dev

如何在Python / PyQt5 / PySide2 / Tkinter的任务栏中选择窗口工作区的特定部分显示在窗口缩略图中?

来自分类Dev

如何在bash中使用其ID将窗口移动到其他工作区?

来自分类Dev

如何在窗口标题中设置StaticResource绑定

Related 相关文章

  1. 1

    如何在窗口上设置图标

  2. 2

    如何在窗口上设置图标

  3. 3

    如何在窗口滚动上上下移动div

  4. 4

    如何在移动或小窗口上的HTML中隐藏元素?

  5. 5

    如何在窗口上模拟array_agg(distinct x)?

  6. 6

    子进程生成如何在窗口上工作而不在ubuntu上工作?

  7. 7

    子进程生成如何在窗口上工作而不在ubuntu上工作?

  8. 8

    如何在ClojureScript中创建可以集中在窗口上的js / Notification?

  9. 9

    Python:如何在窗口上以不同颜色显示输出消息?

  10. 10

    如何在窗口坐标中插入一个带有数字的圆?

  11. 11

    如何使用anaconda在窗口上安装tensorflow

  12. 12

    当鼠标不在窗口上时,如何在不冻结的情况下为 UI 设置动画?

  13. 13

    如何在C#.Net中使用鼠标指针在窗口内移动图片框

  14. 14

    如何在窗口中对齐DIV

  15. 15

    鼠标左移窗口后如何保持焦点在窗口上

  16. 16

    在窗口上连续应用groupby pyspark

  17. 17

    CreateBitmap 图像未打印在窗口上

  18. 18

    如何在代码窗口上放大Xcode

  19. 19

    Vim:如何在窗口调整大小时使缓冲区自动平均分配空间

  20. 20

    如何使用qt5(QtQuick 2.1)及更高版本在窗口上打印度数符号

  21. 21

    如何确保在窗口上仅使用一个选项卡

  22. 22

    拖动未装饰的舞台时,如何强制光标停留在窗口上

  23. 23

    (Java)在窗口内获取鼠标坐标

  24. 24

    在窗口中创建坐标查找

  25. 25

    (Java)在窗口内获取鼠标坐标

  26. 26

    硒,运行firefox而不在窗口上显示窗口

  27. 27

    如何在Python / PyQt5 / PySide2 / Tkinter的任务栏中选择窗口工作区的特定部分显示在窗口缩略图中?

  28. 28

    如何在bash中使用其ID将窗口移动到其他工作区?

  29. 29

    如何在窗口标题中设置StaticResource绑定

热门标签

归档