我有一个(355,99)尺寸的对话框,它只有一个菜单和任务栏,所以它是小尺寸的。它的显示在100% dpi时很好,但在125% dpi时,任务上的一些控制被切断。如何根据以下函数
中的dpi缩放它们void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
CMDIFrameWnd::OnGetMinMaxInfo(lpMMI);
lpMMI->ptMinTrackSize = CPoint(355,99); // set minimum size
}
我自己找到了解决方案,所以我把它贴出来帮助别人。对于我的问题,我已经找到了系统的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;
}
}