我在网上看了一个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);
}
如果一开始就加上GetClientRect(&m_rect);那么就失去意义了,因为m_rect存的是界面上次的值,如果一开始就加上那就每次都是新值了
追答m_rect_last=m_rect;GetClientRect(&m_rect);那你就不应该用m_rect嘛,用m_rect_last不就完了。
CRect rect; //获取控件变化前大小
GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
这三句就相当于GetClientRect了,而且GetClientRect只是改变rect的大小,不管m_rect.
m_rect.Width()为0,那么你就用横坐标自己算出一个宽度
本回答被网友采纳VC 如何获得WM_CHILD风格窗口 控件ID
如果是前者,用MFC的标准视图获取方式比较好,大概用到的就是GetFirstViewPos GetNextView RUNTIMECLASS这些。后者必须通过父窗口的成员变量获取。
如何在VC++6.0中实现三叉切分窗口与多视图
实现步骤: 1、 利用VC++6.0 的AppWizard创建一个单文档SDI应用程序,项目名为Test。 2、 使用New Class对话框添加新的视图类: CinfoView 基类为列表视图类ClistView CLineView 基类为表单视图类CFormView CMyEditView 基类为编辑视图类CEditView 要点:在添加ClineView之前,需要先创建一个对话模板资源,I...