我正在为Pocket PC 2003设备编写应用程序。在其中有一个对话框,其中显示各种文本信息。信息是分开的,以便每个部分都位于其自己的标签内,在资源文件中定义为LTEXT。
现在我的问题是,目前所有文字标签都有相同的字体和样式(正常或简单,即不粗体或斜体);我想要一个粗体设置。我知道我可以在资源文件中将字体设置为粗体,但这会设置所有标签的样式。
如何实现这一目标?我已经看到它在Windows的“关于”屏幕中使用,所以我知道它是可能的。我使用Win32 API直接用C ++编写程序(除了我使用资源文件的某些对话框),所以如果答案是用同一种语言和方法给出的话,我将不胜感激。
感谢。
答案 0 :(得分:0)
在资源编辑器中,编辑静态文本项,并将其控件ID更改为唯一的ID:例如IDC_BOLD。
在托管控件的对话框的DialogProc中,添加WM_CTLCOLORSTATIC
处理程序:
case WM_CTLCOLORSTATIC:
HDC hdc;
HWND hwndCtl;
hwndCtl = (HWND) lParam;
hdc = (HDC) wParam;
if( GetWindowLong(hwndClt, GWL_ID ) == IDC_BOLD )
{
SetBkMode(hdc,TRANSPARENT);
SetTextColor(hdc,RGB(0xff,0,0)); // turn the text red for fun :)
SelectObject(hdc,hBoldFont); // but you want this...
return (INT_PTR)GetSysColorBrush(COLOR_BTNFACE);
//return 0L; // if visual themes are enabled (common controls 6) then 0 is better.
}
// default processing
return 0;
您正在为Pocket PC 2003开发,我不知道哪些按钮样式可用。 This Page当然是指桌面XP。但是,如果对话框中的按钮不是平坦的灰色95esq按钮,则返回0可能更合适,因为如果对话框背景不是纯灰色,则会正确绘制文本背景。
预视式样式返回0会导致系统重置DC,因此知道哪个返回是合适的非常重要。