VC++之随Formview窗口变化调整控件大小

我在网上看了一个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);

}

是文档视图啊,要是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#中,自绘控件,会碰到这种情况,也是想根据控件宽高度,计算绘图位置和大小的

语言只是编程语言,但是控件是系统控件的,这个应该不是语言的问题
温馨提示:内容为网友见解,仅供参考
第1个回答  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不就完了。

第2个回答  推荐于2018-04-10
GetWindowRect换成GetClientRect试试追问

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...

相似回答