不要在 mfc 中更改相对于 windows dpi 的对话框字体?
Posted
技术标签:
【中文标题】不要在 mfc 中更改相对于 windows dpi 的对话框字体?【英文标题】:Don't change the font of dialog with respect to windows dpi in mfc? 【发布时间】:2014-03-14 07:17:44 【问题描述】:我有一个 (355,99) 尺寸的对话框,它只有一个菜单和任务栏,所以它的尺寸很小。它的显示在 100% dpi 下很好,但在 125% dpi 上,一些任务控件被切断。如何在以下函数中根据 dpi 缩放它们
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
CMDIFrameWnd::OnGetMinMaxInfo(lpMMI);
lpMMI->ptMinTrackSize = CPoint(355,99); // set minimum size
【问题讨论】:
显然您从不想要对像素数量进行硬编码。对话框很特殊,它们不使用像素值,而是使用对话框单位。使用 MapDialogRect() 进行转换。 如何使用 MapDialogRect()?能给我举个例子吗? 【参考方案1】:我自己找到了解决方案,因此我将其发布以帮助他人。对于我的问题,我找到了系统的 dpi 并相应地设置了对话框大小。 这是我的代码:
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
CMDIFrameWnd::OnGetMinMaxInfo(lpMMI);
HDC hdcScreen = ::GetDC(NULL);
int iDPI = -1; // assume failure
if (hdcScreen)
iDPI = ::GetDeviceCaps(hdcScreen, LOGPIXELSX);
::ReleaseDC(NULL, hdcScreen);
switch(iDPI)
case 96:
lpMMI->ptMinTrackSize = CPoint(355,99);
break;
case 120:
lpMMI->ptMinTrackSize = CPoint(360,115);
break;
case 144:
lpMMI->ptMinTrackSize = CPoint(365,134);
break;
case 196:
lpMMI->ptMinTrackSize = CPoint(370,150);
break;
default:
lpMMI->ptMinTrackSize = CPoint(355,99);
break;
【讨论】:
以上是关于不要在 mfc 中更改相对于 windows dpi 的对话框字体?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 MFC 以编程方式更改 ActiveX 控件的属性?