|
问题:
我有一个多文档视图类的程序,我想在程序关闭的时候保存子窗口的位置和大小,在程
序打开的时候自动还原原有的子窗口配置。 我的做法是,通过GetWindowRect获取子窗口的位置和大小,然后用ScreenToClient转换 为相对于主框架的坐标,再将这个坐标保存;打开程序还原时,通过MoveWindow来恢复 子窗口的坐标。 但我遇到了以下问题: (1)在保存子窗口位置时,通过ScreenToClient获取的相对于主框架的坐标是从toolb ar的左上角算起的,就是说toolbar的区域也被算入了客户区,而通过movewindow恢复窗 口时,该函数的左上角点是从toolbar以下的区域算起的,两者相差了一个toolbar的高 度。 (2)在保存子窗口位置时,通过ScreenToClient获取的相对于主框架的坐标是从主框架 最外侧算起的,而通过movewindow恢复窗口时,该函数的有效区域是主框架除边框外的 内部空间,也就是说两者相差了一个边框的宽度。 请问上述问题是什么原因呢?我从MSDN里看,各个函数都说是指client area,难道还有 不同的client area的定义? ----------------------------------------------------------------------- 答案1:
GetClientRect才是获得客户区域
----------------------------------------------------------------------- 答案2:
多文档视图类ScreenToClient时要根据hWnd应为主框架的hMdiClient子窗口句柄,而不是主框架的窗口句柄
----------------------------------------------------------------------- 答案3[推荐答案]:
多文档视图类ScreenToClient时的hWnd应为主框架的hMdiClient子窗口句柄,而不是主框架的窗口句柄
----------------------------------------------------------------------- 答案4: 我还是不明白怎么使用,我现在是在CChildFrm的OnWindowPosChanged消息响应里做如下处理: GetWindowRect(&m_RectRawWindow); g_pMainFrm->ScreenToClient(&m_RectRawWindow); 其中g_pMainFrm是指向主框架类的全局指针,怎么使用hMdiClient句柄呢?ScreenToClient只有一个参数呀。 ----------------------------------------------------------------------- 答案5:
我理解了,直接用::ScreenToClient就行,谢了
|