0

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

启用控件:
正确的字体
禁用控件:
错误的字体

在这张图片中,我的意思很明显:
字体细节

此代码创建字体(我使用 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);

现在正如您所见,这可以按预期工作,但控件变灰时除外。我究竟做错了什么?

4

0 回答 0