MFC重绘控件,座标配置相关笔记

@2017-12-06

源由

接到任务需要调整窗口适应。这边使用
GetWindowRect
GetClientRect
MoveWindow
三个函数进行操作,但是操作出来的显示都不对,总结问题到这

过程

对于this.xxx()
    //通用的操作是        
    CRect myRect;
    CRect myRect2;
    CRect myRect3;
    GetClientRect(&myRect);
    m_lstCtrlSelTag.GetWindowRect(&myRect2);
    m_lstCtrlSelTag.GetClientRect(&myRect3);
    int tmp =myRect2.Width();
    m_lstCtrlSelTag.MoveWindow(myRect.Width()-myRect2.Width(), myRect3.top,
        myRect2.Width(), myRect2.Height());
/*调整的执行需要依靠MoveWindow
    然而,MoveWindow是一种函数。功能是改变指定窗口的位置和大小。对子窗口来说,位置和大小取决于父窗口客户区的左上角;对于Owned窗口,位置和大小取决于屏幕左上角。
*/

/*调整的信息需要依靠GetWindowRect和GetClientRect
     GetWindowRect();获取的是以屏幕为座标轴,此窗口在屏幕上的位置。
    GetClientRect();获取的是以其自身的最左上角的点为座标原点,此窗口的位置。

*/

/*座标转换
    ClientToScreen是把座标从当前窗体转化成全屏幕的!!!
    ScreenToClient是把屏幕座标转化成相对当前窗体的座标!!!!
    注意此处的参数是 cpoint,而不是rect
    对于movewindow来说这个刚好用来确定起始点,见其参数。
*/
名词
屏幕
系统区
客户区
座标
控件或者窗体的移动需要以上一级父窗为基准的相对座标
然而当前只能获取到,
    以屏幕为基准的绝对座标。
    自身的客户座标。
那么就要座标转换,
    屏幕座标减去

矩形获取 https://www.cnblogs.com/yongtaiyu/archive/2011/05/18/2049554.html
座标转换http://blog.csdn.net/ljh0600301217/article/details/8736494

发布了67 篇原创文章 · 获赞 5 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章