You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取PropertySheet当前页PROPSHEETPAGE及标题以自定义标题区绘制?

自定义PropertySheet标题区绘制:获取相关结构体与内容的方法

核心实现步骤

要在WM_PAINT中自定义绘制PropertySheet标题区,关键是从属性表窗口及当前页面提取所需的结构体与内容,具体操作如下:

1. 获取属性表的PROPSHEETHEADER

可以通过窗口私有数据或系统宏直接获取:

// 方式1:从窗口私有数据提取
PROPSHEETHEADER* pPSH = reinterpret_cast<PROPSHEETHEADER*>(GetWindowLongPtr(hwndPropSheet, DWLP_USER));

// 方式2:使用系统宏(需包含prsht.h)
PROPSHEETHEADER* pPSH = PropSheet_GetHeader(hwndPropSheet);

2. 获取当前激活页面的PROPSHEETPAGE

先拿到当前页面的窗口句柄,再从其私有数据中提取结构体:

HWND hwndCurrentPage = PropSheet_GetCurrentPageHwnd(hwndPropSheet);
PROPSHEETPAGE* pPSP = reinterpret_cast<PROPSHEETPAGE*>(GetWindowLongPtr(hwndCurrentPage, DWLP_USER));

3. 提取标题、副标题与位图资源

  • 标题/副标题:属性表主标题取pPSH->pszCaption,当前页面标题取pPSP->pszTitle;副标题若为自定义内容,可提前存入pPSP->lParam中供后续读取。
  • 位图:检查pPSP->hbmHeader(页面标题区位图)或pPSH->hbmWatermark(属性表水印位图),拿到句柄后即可用BitBlt或StretchBlt完成绘制。

4. WM_PAINT中的绘制逻辑

在属性表窗口的WM_PAINT处理中:

  • 用BeginPaint获取DC,先填充自定义背景色覆盖标题区。
  • 调用DrawText绘制标题/副标题,通过SetTextColor设置自定义文字颜色。
  • 若存在位图,计算好位置后绘制到位图区域;如果需要保留图标,用GetSystemMetrics(SM_CXICON)/SM_CYICON获取图标尺寸来定位绘制边界。

注意事项

  • 务必在属性表初始化时,将PROPSHEETHEADER和PROPSHEETPAGE的指针存入对应窗口的私有数据,避免后续获取失败。
  • 不同Windows版本的PropertySheet内部结构可能有差异,建议在目标系统上做兼容性测试。
  • 标题区的边界需准确计算,可结合GetClientRect和系统指标确定绘制范围。

内容的提问来源于stack exchange,提问作者user3161924

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 01:05:02