大大:子框架中获取view类不同实例的窗口大小,为什么不一样
请教各位大大:子框架中获取view类不同实例的窗口大小,为什么不一样?
具体如下:
void CChildFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIChildWndEx::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
RECT WindowRect;
RECT ClientRect;
if (!f_start)
{
f_start=TRUE;
::GetWindowRect(GetSafeHwnd(),&WindowRect);
::GetClientRect(GetSafeHwnd(),&ClientRect);
int lr=WindowRect.right-ClientRect.right;
int tb=WindowRect.bottom-ClientRect.bottom;
WindowRect.right = (479 +(lr*2)-1);
WindowRect.bottom = (271 +(tb+lr)-1);
MoveWindow(WindowRect.left,WindowRect.top, WindowRect.right-WindowRect.left, WindowRect.bottom-WindowRect.top, true);
}
}
在新建文档的时候,获取了窗口和客户区的区域大小,第一次点击新建文件获取的数据为什么跟第二次或者第三次都不一样?
请教???????????
------解决方案--------------------
不能 取出来 改 再存,
因为 movewindow 已经 改了 大小,
下次取出来 , 再改 ,再move 大小又变了。
要 保存 原始大小, 按 原始大小 来 计算 需要的 大小。
------解决方案--------------------
把
RECT m_WindowRect;
RECT m_ClientRect;
放 模块中 试试。
------解决方案--------------------
为啥要在OnSize里MoveWindow本身窗口?
------解决方案--------------------
在OnSize里MoveWindow,这本身就有问题,因为onSize会调用多次.用楼主你的代码,当窗口不是最大化时最会出现变更大的现象。WindowRect比ClientRect大很多,所以出错了
我想楼主是想要新建的窗口的客户区固定大小,所以要获取边框的宽度和高度再计算。我最近也做类似这样的程序D。
在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)里调用函数获取:
保存起宽度高度,让CChildFrame直接获取边框的信息,再计算.
------解决方案--------------------
还不行的话,私信我。这个我应该会的.
------解决方案--------------------
“子框架中获取view类不同实例的窗口大小,为什么不一样”
CChildFrame::OnSize 中 ,你并没有区分 不同的 实例 !
具体如下:
void CChildFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIChildWndEx::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
RECT WindowRect;
RECT ClientRect;
if (!f_start)
{
f_start=TRUE;
::GetWindowRect(GetSafeHwnd(),&WindowRect);
::GetClientRect(GetSafeHwnd(),&ClientRect);
int lr=WindowRect.right-ClientRect.right;
int tb=WindowRect.bottom-ClientRect.bottom;
WindowRect.right = (479 +(lr*2)-1);
WindowRect.bottom = (271 +(tb+lr)-1);
MoveWindow(WindowRect.left,WindowRect.top, WindowRect.right-WindowRect.left, WindowRect.bottom-WindowRect.top, true);
}
}
在新建文档的时候,获取了窗口和客户区的区域大小,第一次点击新建文件获取的数据为什么跟第二次或者第三次都不一样?
请教???????????
框架
实例
类
------解决方案--------------------
不能 取出来 改 再存,
因为 movewindow 已经 改了 大小,
下次取出来 , 再改 ,再move 大小又变了。
要 保存 原始大小, 按 原始大小 来 计算 需要的 大小。
------解决方案--------------------
把
RECT m_WindowRect;
RECT m_ClientRect;
放 模块中 试试。
------解决方案--------------------
为啥要在OnSize里MoveWindow本身窗口?
------解决方案--------------------
在OnSize里MoveWindow,这本身就有问题,因为onSize会调用多次.用楼主你的代码,当窗口不是最大化时最会出现变更大的现象。WindowRect比ClientRect大很多,所以出错了
我想楼主是想要新建的窗口的客户区固定大小,所以要获取边框的宽度和高度再计算。我最近也做类似这样的程序D。
在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)里调用函数获取:
/***********************************************************
** 函数名称: void CMainFrame::initDLGFrameWidthAndHeight(int& width, int& height)
** 功能描述: 获取窗口的边框高度和宽度
** 输入参数:int& width 保存边框的宽度
int& Height 保存边框的高度
************************************************************/
void CMainFrame::initDLGFrameWidthAndHeight(int& width, int& height)
{
CRect clientrect;
GetClientRect(&clientrect);
CRect windowrect;
GetWindowRect(&windowrect);
width = windowrect.Width()-clientrect.Width();
height = windowrect.Height()-clientrect.Height();
}
保存起宽度高度,让CChildFrame直接获取边框的信息,再计算.
------解决方案--------------------
还不行的话,私信我。这个我应该会的.
------解决方案--------------------
“子框架中获取view类不同实例的窗口大小,为什么不一样”
CChildFrame::OnSize 中 ,你并没有区分 不同的 实例 !