Re: draw image as per system DPI setting
"heavenlysmile" <heavenlysmile@discussions.microsoft.com> wrote in message
news:BBE7722F-1BB7-4E6B-B5EF-9142D6766E63@microsoft.com...
I have an issues related to loading and drawing the bitmap.
I have an mfc application mfc with transparent ctrlbutton. I have bitmap
file with 96 dpi resolution, but if i chage the system setting to 120 dpi
,
image does not appear proper on the dialog box. I used stretchblt to
resolve
the issue , but at the same time, image loading on control button (to make
it
transparent i used bitblt) does not show properly.
Is there any function in VC to get the current screen resolution and draw
the bitmap accordingly ?
It's been a few years, but here's some code that I copied from an old
project:
// Call from a CWnd derived class
CClientDC dc(this);
int nLogicalPixelsX = dc.GetDeviceCaps(LOGPIXELSX); // will be 96 for
small fonts (default)
int nLogicalPixelsY = dc.GetDeviceCaps(LOGPIXELSY); // will be 72 for
small fonts (default)?
This might work to scale the bitmap size to the current dpi returned by
these functions. But I also wanted to keep my dialog the same width and
height no matter the dpi, so I resize it to the original size and reduce
font size for larger dpi so my text fit on my dialog. I tried the above
calculations to determine the font size, but it did not work in Japanese on
WinME (and Korean also was hard). I ended up not using the above and
instead:
if ( HIWORD(GetDialogBaseUnits()) != 16 )
{
lf.lfHeight = MulDiv(lf.lfHeight, 16, HIWORD(GetDialogBaseUnits()));
// Round up
if (lf.lfHeight < 0)
lf.lfHeight--;
else
lf.lfHeight++;
}
You may not be concerned about keeping your dialog the same size in larger
dpi, if so ignore the above.
-- David