控件大小随窗口变化( 可多个控件,增加了tab下窗口大小,CCombox不能下拉 )
来源:互联网 发布:java彩票合买系统搭建 编辑:程序博客网 时间:2024/04/29 03:03
控件大小随窗口变化( 可多个控件,增加了tab下窗口大小,CCombox不能下拉 )
//功能,调整控件大小位置
//来源:网上
//类型:笔记
//个人修改过
如果是里面只有一两个控件倒好办,但控件太多的话这样做是不是重复劳动太多了?
有没有更好的办法啊?
视类中加成员函数和成员变量:
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函数( 窗口的是OnInitDialog函数 )中加入控件ID:
SetControlInfo(IDC_BUTTON1);
。。。。。。。。。。。。。。。。
运行,搞定!
Dialog也一样!
//刚刚用了一下,问题又来了,如果是窗口在tab控件下面的怎么办,网上找了一下,没有找到,只到自己想咯,
//第二个想法就用上了
//修改下上面的函数
void CTestFormView::OnSize(UINT nType, int cx, int cy)
{
CRect WndRect;
CWnd *pWnd;
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)
{
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;
//tab子窗口大小
pWnd = GetDlgItem( IDC_SPORTLOGS_TAB0 );
if ( NULL != pWnd )
{
pWnd-> GetClientRect(&WndRect);
m_tab_EveryDay.MoveWindow(&WndRect);; //每天活动
m_tab_ActivityReport.MoveWindow(&WndRect);; //活动报告
m_tab_CateGory.MoveWindow(&WndRect);; //类别
m_tab_equipment.MoveWindow(&WndRect);; //设备
m_tab_athletes.MoveWindow(&WndRect);;//运动员
m_tab_path.MoveWindow(&WndRect);; //路径
m_tab_internet.MoveWindow(&WndRect);;//上网
m_tab_set.MoveWindow(&WndRect);;//设置
}
}//红色的为修改过的
//问题又来了,发现如果窗口大小改变过,那下拉框控件( CCombox )竟然下拉不了,查查MFC库详解,竟然没有调整这个的
//后来想想,由MoveWindow搞的,就由它来解决,修改上面代码后完成 ,如下:(红色部分为新修改)
void CTestFormView::OnSize(UINT nType, int cx, int cy)
{
CRect WndRect;
CWnd *pWnd;
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)
{
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);
if ( 14 == i //对应的CCombox控件自定义数组下标
|| 15 == i
|| 21 == i
|| 22 == i )
{
pWnd->MoveWindow( WndRect.left,
WndRect.top,
WndRect.Width(),
WndRect.Height() + 200,//+200表示下拉长度
TRUE );
}
else
{
pWnd-> MoveWindow(&WndRect);
}
}}
m_old_cx = cx;
m_old_cy = cy;
//tab子窗口大小
pWnd = GetDlgItem( IDC_SPORTLOGS_TAB0 );
if ( NULL != pWnd )
{
pWnd-> GetClientRect(&WndRect);
m_tab_EveryDay.MoveWindow(&WndRect);; //每天活动
m_tab_ActivityReport.MoveWindow(&WndRect);; //活动报告
m_tab_CateGory.MoveWindow(&WndRect);; //类别
m_tab_equipment.MoveWindow(&WndRect);; //设备
m_tab_athletes.MoveWindow(&WndRect);;//运动员
m_tab_path.MoveWindow(&WndRect);; //路径
m_tab_internet.MoveWindow(&WndRect);;//上网
m_tab_set.MoveWindow(&WndRect);;//设置
}
}- 控件大小随窗口变化( 可多个控件,增加了tab下窗口大小,CCombox不能下拉 )
- 控件大小随窗口变化
- 控件随着窗口大小变化
- 控件随着窗口大小变化
- 控件适应窗口大小变化
- 对话框控件大小随窗口的大小变化而变化
- MFC控件随窗口大小变化
- 控件大小随窗口等比例变化
- MFC 控件随窗口大小变化
- MFC中的控件随窗口大小变化
- mfc控件自适应窗口大小,随窗口大小变化而变化
- 单文档下List控件的添加及随窗口大小变化而变化的实现
- 【.Net码农】WPF下怎么让控件大小跟着窗口的大小变化而变化
- VC++之随父窗口变化调整控件大小
- VC++之随父窗口变化调整控件大小
- VC++之随父窗口变化调整控件大小
- 控件大小随窗口变化的正确方法.
- VC++之随父窗口变化调整控件大小
- C++中longlong与__int64
- 设置Ubuntu 12.04 Unity返回到经典Gnome桌面 及面板调整相关
- Android 中获取屏幕大小的两种方法
- 致我们终究拥抱的距离
- demo_ASIFT_src运行
- 控件大小随窗口变化( 可多个控件,增加了tab下窗口大小,CCombox不能下拉 )
- A simple implementation of string split in C++
- 社会和经济环境
- Oracle LOB数据类型专题
- Intel IPP 之 视觉计算概述
- 六、硬盘全盘MBR转GPT格式化(注意备份全盘重要数据)
- springMVC系列源码之初始化过程——10
- eclipse自动生成方法注释 快捷键
- tiny6410裸机实验第4章--------------UART(源代码分析)