今天,我到处寻找在 win32 C++ 中为轨迹栏(滑块)上的拇指着色的具体解释或示例。我发现的所有东西都得到了部分解释,在尝试每一种可能的变化时,我都一头雾水。
我一直关注的控件在我的 rc 文件中定义为 CONTROL "",IDC_PLAYSLIDER,"msctls_trackbar32",TBS_NOTICKS | WS_TABSTOP,5,22,187,15
本质上,我对 NM_CUSTOMDRAW 的消息处理归结为以下内容。我对我的颜色/hdc 处理没有信心,但缺少消息是我的主要问题。
INT_PTR CALLBACK dialogproc(HWND h, UINT m, WPARAM w, LPARAM l)
{
switch (m) {
case WM_NOTIFY:
{
switch (((LPNMHDR)l)->code) {
case NM_CUSTOMDRAW:
{
LPNMCUSTOMDRAW lpNMCD = (LPNMCUSTOMDRAW)l;
UINT idc = lpNMCD->hdr.idFrom;
switch (lpNMCD->dwDrawStage) {
case CDDS_PREPAINT:
return CDRF_NOTIFYSUBITEMDRAW;
break;
case CDDS_SUBITEM | CDDS_ITEMPREPAINT:
{
switch (lpNMCD->dwItemSpec)
{
case TBCD_THUMB:
HGDIOBJ old_pen = SelectObject(lpNMCD->hdc, penSlider);
HGDIOBJ old_brush = SelectObject(lpNMCD->hdc, brushSlider);
return CDRF_NEWFONT;
}
}
break;
}
我在运行时得到的是正确控件上的 CDDS_PREPAINT,但无论我尝试了什么,我都没有进一步的 CDDS_drawStage 消息。
如果有人在轨迹栏上完成了此操作(大多数示例是列表控件)并且愿意分享他们的消息处理程序代码,或者可以以其他方式阐明我的困惑,那将不胜感激。