2017-01-31 3 views
-1

Мне нужна нить FrameRect наверх ListView. Если я рисую это в основном цикле:Решите: Как нарисовать FrameRect сверху ListView

loop GetMessage(...) do 
... 
FrameRect(); 
... 
TranslateMessage(...); 
DispatchMessage(...); 

Это не работает, потому что рамка рисуется только при некотором действии. В противном случае он будет удален.

Далее, я пытаюсь нарисовать FrameRect в NM_CUSTOMDRAW (в случае, если: CDDS_SUBITEM || CDDS_ITEMPREPAINT):

... 

// 
FrameRect(...); 
// 
return CDRF_NEWFONT; 
... 

И это не работает в полной мере ...

Как правильно нарисовать FrameRect наверх ListView?

FrameRect

Эта анимация использует первый метод. Если мышь не перемещается, и цикл не принимает других событий, ничего не будет нарисовано.

+0

Пожалуйста, предоставьте скриншот того, что вы ищете. – andlabs

+0

@andlabs Я добавляю изображение gif. –

+0

Это для выбора предметов? – andlabs

ответ

-1

Это может быть решен следующим образом:

Добавить в WndProc код для WM_NOTIFY с NM_CUSTOMDRAW.

case CDDS_SUBITEM || CDDS_ITEMPREPAINT 
... 
return CDRF_NOTIFYPOSTPAINT 

... 
case CDDS_SUBITEM || CDDS_ITEMPOSTPAINT 
// 
if (!ListViewMouseRelease) 
{ 
// 
hbr.lbColor=0; 
// 
hbr.lbStyle=BS_SOLID; 
// 
hbr.lbHatch=0; 

// 
SelectObject(LPNMLVCD.nmcd.hdc, ExtCreatePen(PS_GEOMETRIC || PS_DOT, 1, hbr, 0, 0)); 

// 
MoveToEx(LPNMLVCD.nmcd.hdc, ListViewMouseOldAreaSel.Left+1, ListViewMouseOldAreaSel.Top-1, 0); 

// 
LineTo(LPNMLVCD.nmcd.hdc, ListViewMouseOldAreaSel.Right-1, ListViewMouseOldAreaSel.Top-1); 

// 
LineTo(LPNMLVCD.nmcd.hdc, ListViewMouseOldAreaSel.Right-1, ListViewMouseOldAreaSel.Bottom); 

// 
MoveToEx(LPNMLVCD.nmcd.hdc, ListViewMouseOldAreaSel.Right-2, ListViewMouseOldAreaSel.Bottom, 0); 

// 
LineTo(LPNMLVCD.nmcd.hdc, ListViewMouseOldAreaSel.Left, ListViewMouseOldAreaSel.Bottom); 

// 
LineTo(LPNMLVCD.nmcd.hdc, ListViewMouseOldAreaSel.Left, ListViewMouseOldAreaSel.Top); 
} 

return CDRF_DODEFAULT; 

После, Вам необходимо заполнить TRectListViewMouseOldAreaSel в WM_LBUTTONDOWN и WM_MOUSEMOVE. И звоните InvalidateRect для ListView в WM_LBUTTONUP.

Примечание: Я перевел код в C синтаксис, но это может быть не совсем правильно. Пожалуйста, проверьте перед использованием ...

Смежные вопросы