Привет всем,
Пишу контрол на базе CCheckListViewCtrlImpl и CCustomDraw для ППК.
Контрол имеет две колонны "check box", вторую колонну деляю на базe
CButton::Create(m_hWnd, rcDefault, 0, WS_VISIBLE |WS_CHILD | BS_AUTOCHECKBOX | BS_LEFTTEXT)
для отрисовки
в OnSubItemPrePaint( int idCtrl, LPNMCUSTOMDRAW lpNMCustomDraw )
{
...
int nItem = lpNMCustomDraw->dwItemSpec;
int nSubItem = pLvCustomDraw->iSubItem;
...
pOperationButton = GetOperation(nItem); // "check box"
CRect rc;
GetSubItemRect(nItem ,
nSubItem , LVIR_BOUNDS, &rc);
rc.DeflateRect(2, 2, 2, 2);
pOperationButton->SetWindowPos(NULL, &rc, SWP_SHOWWINDOW | SWP_NOZORDER);
return CDRF_SKIPDEFAULT;
}
Проблема заклучается в том когда контрол нужно скролировать мои "собственные check box" не перимещаются по вертикале
по горизонтале работает нормално если не было перемещения по вертикале .
пробовал тупо в
MSG_WM_VSCROLL(OnVScroll)
что то типа
if(SB_ENDSCROLL == nSBCode )
{
RedrawItems(0, GetItemCount());
}
Может делать такое количество "check box" сколко видимых линий в моем листе ?
Куда мне копать
Нашел способ , перехватывать WM_VSCROLL м WM_HSCROLL
прятать видимые "check box" и в OnSubItemPrePaint как и было
Вроде работает не плохо м может есть все таки идеи по умнее ?
Здравствуйте, vassilux, Вы писали:
V>Привет всем,
V>Пишу контрол на базе CCheckListViewCtrlImpl и CCustomDraw для ППК.
V>Контрол имеет две колонны "check box", вторую колонну деляю на базe
V>V>CButton::Create(m_hWnd, rcDefault, 0, WS_VISIBLE |WS_CHILD | BS_AUTOCHECKBOX | BS_LEFTTEXT)
V>
V>для отрисовки V>в OnSubItemPrePaint( int idCtrl, LPNMCUSTOMDRAW lpNMCustomDraw )
V>{
V>...
V>int nItem = lpNMCustomDraw->dwItemSpec;
V>int nSubItem = pLvCustomDraw->iSubItem;
V>...
V>pOperationButton = GetOperation(nItem); // "check box"
V>CRect rc;
V>GetSubItemRect(nItem ,
V>nSubItem , LVIR_BOUNDS, &rc);
V>rc.DeflateRect(2, 2, 2, 2);
V>pOperationButton->SetWindowPos(NULL, &rc, SWP_SHOWWINDOW | SWP_NOZORDER);
V>return CDRF_SKIPDEFAULT;
V>}
V>
V>Проблема заклучается в том когда контрол нужно скролировать мои "собственные check box" не перимещаются по вертикале
V>по горизонтале работает нормално если не было перемещения по вертикале .
V>пробовал тупо в
V>V>MSG_WM_VSCROLL(OnVScroll)
V>
V>что то типа
V>V>if(SB_ENDSCROLL == nSBCode )
V>{
V>RedrawItems(0, GetItemCount());
V>}
V>
V>Может делать такое количество "check box" сколко видимых линий в моем листе ?
V>Куда мне копать