VC 对话框 控件 随对话框大小改变
2011-04-18 20:55
357 查看
//该结构体保存控件相对于对话框的比例 typedef struct Perent { double percentX; double percentY; double lxP; double lyP; }PERCENT; /////////////////////////////计算子控件相对于父窗口的比例填入结构体//////////////// void CBiJiBenDlg::InitCtrlPercent(UINT nID) { int index = nID - 1000; CRect rcDialog,rc;//保存控件窗口的位置 GetWindowRect(&rcDialog);//得到的是相对于CBiJiBenDlg的位置 GetDlgItem(nID)->GetWindowRect(rc); m_per[index].percentX = (double)(rc.right-rc.left) / (rcDialog.right-rcDialog.left); m_per[index].percentY = (double)(rc.bottom-rc.top) / (rcDialog.bottom-rcDialog.top); m_per[index].lxP = (double)rc.left / rcDialog.right; m_per[index].lyP = (double)rc.top / rcDialog.bottom;//这4个比例应该是不变值 } ///////////////////////////根据子控件号重设子控件位置////////////////////////// void CBiJiBenDlg::RePositionCtrl(UINT nID) { CRect rcDialog,rc;//保存控件窗口的位置 GetWindowRect(&rcDialog); int index = nID - 1000; #pragma warning(disable:4244) int wid = (rcDialog.right-rcDialog.left) * m_per[index].percentX; int height = (rcDialog.bottom-rcDialog.top) * m_per[index].percentY; rc.left = /*rcDialog.left + */(rcDialog.right-rcDialog.left)*m_per[index].lxP; rc.top = /*rcDialog.top + */(rcDialog.bottom-rcDialog.top)*m_per[index].lyP; GetDlgItem(nID)->MoveWindow(rc.left, rc.top, wid, height);//这个函数的参数后两个是宽和高,而不是右下角坐标 }
InitCtrlPercent函数在BOOL CBiJiBenDlg::OnInitDialog()中添加,例如“InitCtrlPercent(IDC_TOPMOST);”。
RePositionCtrl函数在void CBiJiBenDlg::OnSize(UINT nType, int cx, int cy)中添加例如“RePositionCtrl(IDC_TOPMOST);”。
改变对话框大小前:
改变对话框大小后:
相关文章推荐
- 【转】VC中动态改变控件和对话框字体(大小)
- VC中动态改变控件和对话框字体(大小)
- VC改变控件或对话框的大小和位置方法
- VC中动态改变控件和对话框字体(大小)
- VC中动态改变控件和对话框字体(大小)
- VC中动态改变控件和对话框字体(大小)
- vc++根据对话框大小改变控件大小
- 在VC的win32 Application 工程中,在改变对话框大小时,控件始终保持充满整个客户区的问题
- MFC界面控件随对话框大小改变问题求助
- VC对话框全屏显示及相应控件位置改变
- VC 控件根据窗口大小变化改变大小和位置。(EasySize)
- VC中自动改变控件位置和大小的对话框类
- MFC 控件随着对话框大小的改变而改变
- VC6.0中改变控件、对话框字体(大小)
- VC中自动改变控件位置和大小的对话框类
- MFC改变对话框的大小,以及子控件的动态改变
- 随对话框大小改变控件大小
- VC对话框全屏显示及相应控件位置改变(转)
- MFC改变对话框大小,控件的大小和位置随着改变
- 对话框上的控件的大小和位置随着对话框的大小的改变而变化