Я использую стоковый Трекбар .Я бы хотел нарисовать галочки.
Здесь я провел эксперимент, просто пытаясь нарисовать в правильном месте:
case WM_NOTIFY:
{
NMHDR* nMhdr = (NMHDR*) lParam;
NMCUSTOMDRAW* nMcd = (NMCUSTOMDRAW*) lParam;
if (nMhdr->code == NM_CUSTOMDRAW)
{
switch (nMcd->dwDrawStage)
{
case CDDS_PREPAINT:
{
return CDRF_NOTIFYITEMDRAW;
}
case CDDS_ITEMPREPAINT:
{
if (nMcd->dwItemSpec == TBCD_TICS)
{
FillRect(nMcd->hdc, &nMcd->rc, (HBRUSH) GetStockObject(BLACK_BRUSH));
return CDRF_SKIPDEFAULT;
}
else
{
return CDRF_DODEFAULT;
}
break;
}
default:
{
result = CDRF_DODEFAULT;
break;
}
}
}
break;
}
В моем CDDS_ITEMPREPAINT
, если dwItemSpec == TBCD_TICS
,тогда прямоугольник обновления (NMCUSTOMDRAW->rc
) всегда является пустым прямоугольником.Я проверил, и для других элементов (TBCD_CHANNEL
и TBCD_THUMB
) я получаю действительный прямоугольник и могу рисовать вместо канала и большого пальца.
Хорошо: так в чем смысл TBCD_TICS
если это не даст мне прямоугольник для рисования?
Так что, возможно, я смогу получить положения тиков по-другому.Ну, есть TBM_GETTICPOS , который, похоже, будет работать.Кроме документации упоминается это:
Позиции первой и последней меток не доступны напрямую через это сообщение.
Так, как я могу получить первый и последнийотметьте позиции?Они не соответствуют началу и концу канала, галочки немного вставлены.Возможно, мы можем рассчитать вставку по сторонам канала, но это кажется хрупким (особенно на дисплеях с разным масштабированием).