1

我正在为 Pocket PC 2003 设备编写应用程序。其中有一个对话框,其中显示了各种文本信息。信息是分开的,因此每个部分都位于其自己的标签内,在资源文件中定义为 LTEXT。

现在我的问题是,目前,所有文本标签都具有相同的字体和样式(正常或简单,即不是粗体或斜体);我想要一个设置为粗体。我知道我可以在资源文件中将字体设置为粗体,但这会设置所有标签的样式。

如何实现这一目标?我已经看到它在 Windows 的“关于”屏幕中使用,所以我知道这是可能的。我已经直接使用 Win32 API 用 C++ 编写了程序(除了我使用资源文件的某些对话框),所以如果答案以相同的语言和方法给出,我将不胜感激。

谢谢。

4

1 回答 1

0

在资源编辑器中,编辑静态文本项,并将其控件 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 开发,我不知道有哪些按钮样式可用。本页当然指的是桌面 XP。但是,如果对话框中的按钮不是纯灰色 95esq 按钮,则返回 0 可能更合适,因为如果对话框背景不是纯灰色,这将正确绘制文本背景。

视觉前样式返回 0 会导致系统重置 DC,因此了解哪个返回是合适的很重要。

于 2010-08-20T10:35:09.530 回答