VC++之随Formview窗口变化调整控件大小 100
我在网上看了一个VC++之随Formview窗口变化调整控件大小,说在onsize函数中加入下面的代码,但是总是在rect.left=rect.left*cx/m_rec...
我在网上看了一个VC++之随Formview窗口变化调整控件大小,说在onsize函数中加入下面的代码,但是总是在 rect.left=rect.left*cx/m_rect.Width();报错,我看了一下是因为m_rect.Width()为0,m_rect中所有的值都为0,怎么会为0呢?
下面是我的代码,其中m_rect为类的变量用于盛放尺寸。
void CRunSelectView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(!IsWindowVisible())
return;
if(m_rect && m_timeendctrl.m_hWnd != NULL)
{
CRect rect; //获取控件变化前大小
GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
rect.left=rect.left * cx/m_rect.Width();
rect.right=rect.right* cx/m_rect.Width();
rect.top=rect.top * cy/m_rect.Height();
rect.bottom=rect.bottom * cy/m_rect.Height();
MoveWindow(rect);//设置控件大小
}
GetClientRect(&m_rect);
}
void CRunSelectView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
GetClientRect(&m_rect);
} 展开
下面是我的代码,其中m_rect为类的变量用于盛放尺寸。
void CRunSelectView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(!IsWindowVisible())
return;
if(m_rect && m_timeendctrl.m_hWnd != NULL)
{
CRect rect; //获取控件变化前大小
GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
rect.left=rect.left * cx/m_rect.Width();
rect.right=rect.right* cx/m_rect.Width();
rect.top=rect.top * cy/m_rect.Height();
rect.bottom=rect.bottom * cy/m_rect.Height();
MoveWindow(rect);//设置控件大小
}
GetClientRect(&m_rect);
}
void CRunSelectView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
GetClientRect(&m_rect);
} 展开
展开全部
是文档视图啊,要是Dialog倒有个现成的类库可以使用
http://www.codeproject.com/Articles/568/CResizableDialog
要是不能直接使用,修改修改应该也可以,FormView嘛
有时候就那样,宽带高度会是0的,特别在刚开始创建显示控件的时候
我直接来了个 if (0 == width) return; if (0 == height) return;
或者 if ((width < 10) || (height < 10)) return; 不干活,窗口不可能一直是那么小,所以可视区域那么小的话,索性什么都不干好了,歪道,你且看给有能解决的吧
反正我在C#中,自绘控件,会碰到这种情况,也是想根据控件宽高度,计算绘图位置和大小的
语言只是编程语言,但是控件是系统控件的,这个应该不是语言的问题
http://www.codeproject.com/Articles/568/CResizableDialog
要是不能直接使用,修改修改应该也可以,FormView嘛
有时候就那样,宽带高度会是0的,特别在刚开始创建显示控件的时候
我直接来了个 if (0 == width) return; if (0 == height) return;
或者 if ((width < 10) || (height < 10)) return; 不干活,窗口不可能一直是那么小,所以可视区域那么小的话,索性什么都不干好了,歪道,你且看给有能解决的吧
反正我在C#中,自绘控件,会碰到这种情况,也是想根据控件宽高度,计算绘图位置和大小的
语言只是编程语言,但是控件是系统控件的,这个应该不是语言的问题
2013-06-18
展开全部
::OnSize(UINT nType, int cx, int cy)最开始添加一句:GetClientRect(&m_rect);就可以了。
追问
如果一开始就加上GetClientRect(&m_rect);那么就失去意义了,因为m_rect存的是界面上次的值,如果一开始就加上那就每次都是新值了
追答
m_rect_last=m_rect;GetClientRect(&m_rect);那你就不应该用m_rect嘛,用m_rect_last不就完了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
GetWindowRect换成GetClientRect试试
追问
CRect rect; //获取控件变化前大小
GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
这三句就相当于GetClientRect了,而且GetClientRect只是改变rect的大小,不管m_rect.
追答
m_rect.Width()为0,那么你就用横坐标自己算出一个宽度
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询