灰显时Win32 STATIC字体错误

时间:2013-09-22 15:59:23

标签: c++ winapi fonts static controls

我正在研究Win32程序,并希望启用和禁用我的控件。 我使用的是Windows XP主题和字体。 当我禁用STATIC控件时,使用的字体似乎是错误的。

启用控件:
Correct font
禁用控件:
Wrong font

在这张图片中,我的意思很明显:
font detail

此代码创建字体(我发现它使用Google):

HFONT CreateControlFont( void )
{
    // Get the system message box font
    NONCLIENTMETRICS ncm;
    ncm.cbSize = sizeof(ncm);

    // If we're compiling with the Vista SDK or later, the NONCLIENTMETRICS struct
    // will be the wrong size for previous versions, so we need to adjust it.
    // In versions of Windows prior to Vista, the iPaddedBorderWidth member
    // is not present, so we need to subtract its size from cbSize.
#if( WINVER < 0x0600 )
    ncm.cbSize -= sizeof(ncm.iPaddedBorderWidth);
#endif

    SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0);
    return CreateFontIndirect(&(ncm.lfMessageFont));
}

我使用SendMessage(MY_WINDOW_HANDLE, WM_SETFONT, (WPARAM)MY_FONT, MAKELPARAM(FALSE, 0));将其应用于我的控件。

我使用此代码应用XP风格(也来自互联网):

#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' \
                        version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' \
                        language='*'\"")

这就是我创建STATIC控件的方法:

HWND CreateLabel( const TCHAR * text, int x, int y, int w, int h, HMENU id, HWND parent )
{
    return CreateWindow(
        "static", text, WS_CHILD | WS_VISIBLE, x, y, w, h, parent, id, hInstance, NULL);
}

要停用控件,请使用EnableWindow(MY_WND_HANDLE, FALSE);

现在你可以看到,除了控件灰显的时候,它按预期工作。 我做错了什么?

0 个答案:

没有答案