怎样让CFormView中的控件随着View大小的改变而比例改变?
答案:2 悬赏:70 手机版
解决时间 2021-02-21 04:01
- 提问者网友:浮克旳回音
- 2021-02-20 16:37
怎样让CFormView中的控件随着View大小的改变而比例改变?
最佳答案
- 五星知识达人网友:纵马山川剑自提
- 2021-02-20 16:44
已经搞定,共享之:
视类中加成员函数和成员变量:
void SetControlInfo(WORD CtrlId);protected:int m_old_cx,m_old_cy;
CDWordArray m_control_info;
构造函数中初始化:
m_old_cx = m_old_cy = 0;
加控件信息的函数定义:
void CTestFormView::SetControlInfo(WORD CtrlId){m_control_info.Add(CtrlId);}
修改OnSize函数:
void CTestFormView::OnSize(UINT nType, int cx, int cy){if(cx==0 || cy==0){cx=800;cy=600;}CFormView::OnSize(nType, cx, cy);
float dx_percent = (m_old_cx ==0)? 1 : (float)((float)cx/(float)m_old_cx);
float dy_percent = (m_old_cy ==0)? 1 : (float)((float)cy/(float)m_old_cy);
if(m_old_cx){CRect WndRect;
CWnd *pWnd;
for(int i = 0; i < m_control_info.GetSize(); i++){pWnd = GetDlgItem(m_control_info[i]);if(!pWnd){TRACE("Control ID - %d NOT FOUND!!\n",m_control_info[i]);continue;}
pWnd-GetWindowRect(&WndRect);
ScreenToClient(&WndRect);
WndRect.left = (int)(WndRect.left*dx_percent);
WndRect.right = (int)(WndRect.right* dx_percent);
WndRect.bottom = (int)(WndRect.bottom*dy_percent);
WndRect.top = (int)(WndRect.top*dy_percent);
pWnd-MoveWindow(&WndRect);}}m_old_cx = cx;
m_old_cy = cy;}
在OnInitialUpdate函数中加入控件ID:
SetControlInfo(IDC_BUTTON1);
。。。。。。。。。。。。。。。。
视类中加成员函数和成员变量:
void SetControlInfo(WORD CtrlId);protected:int m_old_cx,m_old_cy;
CDWordArray m_control_info;
构造函数中初始化:
m_old_cx = m_old_cy = 0;
加控件信息的函数定义:
void CTestFormView::SetControlInfo(WORD CtrlId){m_control_info.Add(CtrlId);}
修改OnSize函数:
void CTestFormView::OnSize(UINT nType, int cx, int cy){if(cx==0 || cy==0){cx=800;cy=600;}CFormView::OnSize(nType, cx, cy);
float dx_percent = (m_old_cx ==0)? 1 : (float)((float)cx/(float)m_old_cx);
float dy_percent = (m_old_cy ==0)? 1 : (float)((float)cy/(float)m_old_cy);
if(m_old_cx){CRect WndRect;
CWnd *pWnd;
for(int i = 0; i < m_control_info.GetSize(); i++){pWnd = GetDlgItem(m_control_info[i]);if(!pWnd){TRACE("Control ID - %d NOT FOUND!!\n",m_control_info[i]);continue;}
pWnd-GetWindowRect(&WndRect);
ScreenToClient(&WndRect);
WndRect.left = (int)(WndRect.left*dx_percent);
WndRect.right = (int)(WndRect.right* dx_percent);
WndRect.bottom = (int)(WndRect.bottom*dy_percent);
WndRect.top = (int)(WndRect.top*dy_percent);
pWnd-MoveWindow(&WndRect);}}m_old_cx = cx;
m_old_cy = cy;}
在OnInitialUpdate函数中加入控件ID:
SetControlInfo(IDC_BUTTON1);
。。。。。。。。。。。。。。。。
全部回答
- 1楼网友:孤老序
- 2021-02-20 17:38
是文档视图啊,要是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#中,自绘控件,会碰到这种情况,也是想根据控件宽高度,计算绘图位置和大小的
语言只是编程语言,但是控件是系统控件的,这个应该不是语言的问题
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯