在大分辨率下的全屏对话框,上面有控件,怎么让它在小分辨率上也 全屏,并且控件的位置和大小也自动调整?
时间:2011-12-06
来源:互联网
我的想法是让 现在控件大小=原来控件大小 * 2个分辨率的比例系数,
怎么得到这个比例系数?
作者: yd250990477 发布时间: 2011-12-06
作者: yisiyou 发布时间: 2011-12-06
上面的控件大小和位置自动调整。
作者: yd250990477 发布时间: 2011-12-06
如果是,那你就换算 1920*1080 到 1280*767 之间的关系。。
当屏幕发生分辨率的变化时取得屏幕的尺寸
然后在以上的消息中用SetWindowPos或其他调整窗口大小的函数处理即可
作者: shen_wei 发布时间: 2011-12-06
我把他拷到1280电脑上了,运行时有部分按钮没有显示出来,
怎么让他全屏显示出来,
作者: yd250990477 发布时间: 2011-12-06
作者: cxj6543546 发布时间: 2011-12-06
作者: VisualEleven 发布时间: 2011-12-06
int cy = GetSystemMetrics(SM_CYSCREEN);
这个函数可以获得当前屏幕大小
作者: mayudong1 发布时间: 2011-12-06
可以分为以下几个步骤:
1)在OnInitDialog中,使用
::EnumChildWindows(m_hWnd, GetChildWindowPos, (LPARAM)m_hWnd);
其中GetChildWindowPos是Callback函数,由你来实现,你可以用类似以下代码实现:
C/C++ code
BOOL CALLBACK xxx::GetChildWindowPos(HWND hwnd, LPARAM lparam) { HWND hWnd = (HWND)lparam; CWnd *pWnd = CWnd::FromHandle(hwnd); ASSERT(pWnd); UINT u32ID = pWnd->GetDlgCtrlID(); YouMainDlg *pDlg = (YouMainDlg*)CWnd::FromHandle(hWnd); ASSERT(pDlg); pDlg->AddChildWindow(u32ID); return TRUE; } //其中AddChildWindow实现大概如下: struct sControl; //你自己定义.大概有offset/width/height/hwnd...信息 CRect rect; GetWindowRect(&rect); CRect rcChild; GetDlgItem(u32ID)->GetWindowRect(&rcChild); nt i32TitleHeight = GetSystemMetrics(SM_CYCAPTION); sControl.u32ID = u32ID; sControl.i32OffsetX = rcChild.left - rect.left; sControl.i32OffsetY = rcChild.top - rect.top - i32TitleHeight; sControl.i32Width = rcChild.Width(); sControl.i32Height = rcChild.Height(); sControl.hWnd = GetDlgItem(u32ID)->m_hWnd; vectControl.push_back(sControl); //其中vectControl为std::vector int i32MaxWidth = GetSystemMetrics(SM_CXMAXIMIZED); int i32MaxHeight = GetSystemMetrics(SM_CYMAXIMIZED); float fRatioX = (float)i32MaxWidth / rect.Width(); float fRatioY = (float)i32MaxHeight / rect.Height(); sControl.i32OffsetX *= fRatioX; sControl.i32OffsetY *= fRatioY; sControl.i32Width *= fRatioX; sControl.i32Height *= fRatioY; vectControl.push_back(sControl); return TRUE; }
2)实现一个AdjustChildWindow函数,里面大概如下:
C/C++ code
//判断是否最大化或者其他情况:根据Onsize中的nType参数来判断. //... ::EnumChildWindows(m_hWnd, SetChildWindowPos, ...); SetChildWindowPos是一个CallBack函数,由你自己来实现: 大概内容是把容器中的控件信息取出来,然后调整合适,调用SetWindowPos or MoveWindow即可
3)在OnSize中调用AdjustChildWindow.
作者: yuucyf 发布时间: 2011-12-06
作者: lijunda213 发布时间: 2011-12-06
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28