Export (0) Print
Expand All

SHGetUIMetrics

Windows Mobile 6.5
4/8/2010

The SHGetUIMetrics function retrieves the system font size.


HRESULT SHGetUIMetrics (
  SHUIMETRIC shuim,
  PVOID pvBuffer,
  DWORD cbBufferSize,
  DWORD * pcbRequired
);

shuim

[in] Indicates how you want the system font size expressed. shuim must be one of the SHUIMETRIC values.

pvBuffer

[out] Reference to the retrieved system font size value. Can be NULL. (See Remarks for details.)

cbBufferSize

[in] The estimated size of pvBuffer.

pcbRequired

[out] Reference to the actual size required for pvBuffer. Can be NULL. (See Remarks for details.)

SHGetUIMetrics returns an HRESULT value of either S_OK or an appropriate error code.

To ensure that your application displays properly, you should call SHGetUIMetrics to determine current system font size when your application starts. Also, after the window receives the SH_UIMETRIC_CHANGE notification that is broadcast whenever the user changes the system font size, you can call SHGetUIMetrics to determine the new font metrics and then determine whether the new font size requires a new layout of your window.

If you call SHGetUIMetrics to retrieve the system font size, shuim must be one of the three SHUIMETRIC values: SHUIM_FONTSIZE_POINT, or SHUIM_FONTSIZE_PIXEL, or SHUIM_FONTSIZE_PERCENTAGE. In this case, pvBuffer is a pointer to DWORD, and cbBufferSize is the size of a DWORD.

Bb416462.note(en-us,MSDN.10).gifNote:
In Smartphone for Windows Mobile 2003 and earlier, users cannot change the system font size.

The following code example demonstrates how to use SHGetUIMetrics.

Bb416462.note(en-us,MSDN.10).gifNote:
To make the following code example easier to read, security checking and error handling are not included. This code example should not be used in a release configuration unless it has been modified to include them.
#include <Aygshell.h>
LRESULT CALLBACK SHUIMetricWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    // This message will only fire on Windows Mobile Professional and Windows Mobile Classic
    static UINT uMetricChangeMsg = RegisterWindowMessage(SH_UIMETRIC_CHANGE);
    if (message == uMetricChangeMsg)
    {
        HRESULT hr;
        LOGFONT lf;
        HDC hDC = GetDC(hwnd);
        int iFontSizePoint;
        int iFontSizePixel;
        int iFontSizePercentage;
        // Get the height of the current system font size in points. This can be used with the LOGFONT
        // structure to get the correct font height.
        hr = SHGetUIMetrics(SHUIM_FONTSIZE_POINT, &iFontSizePoint, sizeof(iFontSizePoint), NULL);
        lf.lfHeight = -MulDiv(iFontSizePoint, GetDeviceCaps(hDC, LOGPIXELSY), 72);
        // Get the height of the current system font size in pixels. This can be used with the LOGFONT
        // structure to get the correct font height.
        hr = SHGetUIMetrics(SHUIM_FONTSIZE_PIXEL, &iFontSizePixel, sizeof(iFontSizePixel), NULL);
        lf.lfHeight = -iFontSizePixel;
        // Get the height of the current system font size in percentage of the default system font size. This is
        // useful when using richedit controls, since richedit supports the EM_SETZOOM message.
        hr = SHGetUIMetrics(SHUIM_FONTSIZE_PERCENTAGE, &iFontSizePercentage, sizeof(iFontSizePercentage), NULL);
        ReleaseDC(hwnd, hDC);
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}

Headeraygshell.h
LibraryAygshell.dll
Windows Embedded CEWindows CE .NET 4.2 and later
Windows MobilePocket PC for Windows Mobile 2003 Second Edition and later, Smartphone for Windows Mobile 2003 Second Edition and later

Community Additions

ADD
Show:
© 2014 Microsoft