我正在开发一个 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);
。
现在正如您所见,这可以按预期工作,但控件变灰时除外。我究竟做错了什么?