我正在研究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);
。
现在你可以看到,除了控件灰显的时候,它按预期工作。 我做错了什么?