我在1920*1080分辨率下做的对话框全屏显示,怎么让比在小的分辨率下也实现全屏显示?
时间:2011-12-06
来源:互联网
作者: yd250990477 发布时间: 2011-12-06
void OnGetMinMaxInfo(MINMAXINFO* lpMMI) { CDialog::OnGetMinMaxInfo(lpMMI); lpMMI->ptMinTrackSize.x = m_MinSize.cx; lpMMI->ptMinTrackSize.y = m_MinSize.cy; CRect rc(0, 0, 1024, 768); SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, 0); // 取得桌面区域 lpMMI->ptMaxPosition.x = rc.left; lpMMI->ptMaxPosition.y = rc.top; lpMMI->ptMaxSize.x = rc.Width(); lpMMI->ptMaxSize.y = rc.Height(); }
作者: wangweixu520 发布时间: 2011-12-06
RECT rect,rect2; //移动窗口到桌面的右侧 //此时取得的rect左上角是(0,0),估计是因为窗口刚创建 //桌面窗口的左上角总是(0,0) this-> GetDesktopWindow()-> GetWindowRect(&rect); this-> GetWindowRect(&rect2); rect2.left=rect.right-(rect2.right-rect2.left)-21; rect2.right=rect.right-21; rect2.top=rect.bottom/5; rect2.bottom=rect.bottom-rect.bottom/5; this-> MoveWindow(&rect2); //调整窗口内的控件位置 GetClientRect(&rect); MoveCtrl(rect.right,rect.bottom);
rect1得到的事窗口坐标(像素),无论是1024x768或者800x600分辨率,rect1就是这个分辨率的值,rect2是你窗口的坐标(像素)调整他就可以了
作者: wangweixu520 发布时间: 2011-12-06
int cx = GetSystemMetrics(SM_CXSCREEN); int cy = GetSystemMetrics(SM_CYSCREEN);
作者: shen_wei 发布时间: 2011-12-06
SystemParametersInfo(SPI_GETWORKAREA, 0, &rcClient, 0);
然后自己按比例计算控件位置大小,MoveWindow
作者: ndy_w 发布时间: 2011-12-06
然后想用它乘以控件大小得到新的大小。
可怎么得到比例系数啊,能不能详细点?
作者: yd250990477 发布时间: 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
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28