Implemented LVS_EX_CHECKBOXES.
This commit is contained in:
parent
f0e20a6c16
commit
83e9fd8513
|
@ -78,7 +78,6 @@
|
|||
*
|
||||
* Extended Styles
|
||||
* -- LVS_EX_BORDERSELECT
|
||||
* -- LVS_EX_CHECKBOXES
|
||||
* -- LVS_EX_FLATSB
|
||||
* -- LVS_EX_GRIDLINES
|
||||
* -- LVS_EX_HEADERDRAGDROP
|
||||
|
@ -397,6 +396,7 @@ static LRESULT LISTVIEW_HScroll(LISTVIEW_INFO *, INT, INT, HWND);
|
|||
static INT LISTVIEW_GetTopIndex(LISTVIEW_INFO *);
|
||||
static BOOL LISTVIEW_EnsureVisible(LISTVIEW_INFO *, INT, BOOL);
|
||||
static HWND CreateEditLabelT(LISTVIEW_INFO *, LPCWSTR, DWORD, INT, INT, INT, INT, BOOL);
|
||||
static HIMAGELIST LISTVIEW_SetImageList(LISTVIEW_INFO *, INT, HIMAGELIST);
|
||||
|
||||
/******** Text handling functions *************************************/
|
||||
|
||||
|
@ -5971,7 +5971,11 @@ static INT LISTVIEW_HitTest(LISTVIEW_INFO *infoPtr, LPLVHITTESTINFO lpht, BOOL s
|
|||
|
||||
if (select && !(uView == LVS_REPORT && (infoPtr->dwLvExStyle & LVS_EX_FULLROWSELECT)))
|
||||
{
|
||||
if (uView == LVS_REPORT) UnionRect(&rcBounds, &rcIcon, &rcLabel);
|
||||
if (uView == LVS_REPORT)
|
||||
{
|
||||
UnionRect(&rcBounds, &rcIcon, &rcLabel);
|
||||
UnionRect(&rcBounds, &rcBounds, &rcState);
|
||||
}
|
||||
if (!PtInRect(&rcBounds, opt)) iItem = -1;
|
||||
}
|
||||
return lpht->iItem = iItem;
|
||||
|
@ -6583,6 +6587,53 @@ static BOOL LISTVIEW_SetColumnWidth(LISTVIEW_INFO *infoPtr, INT nColumn, INT cx)
|
|||
return Header_SetItemW(infoPtr->hwndHeader, nColumn, (LPARAM)&hdi);
|
||||
}
|
||||
|
||||
/***
|
||||
* Creates the checkbox imagelist. Helper for LISTVIEW_SetExtendedListViewStyle
|
||||
*
|
||||
*/
|
||||
static HIMAGELIST LISTVIEW_CreateCheckBoxIL(LISTVIEW_INFO *infoPtr)
|
||||
{
|
||||
HDC hdc_wnd, hdc;
|
||||
HBITMAP hbm_im, hbm_mask, hbm_orig;
|
||||
RECT rc;
|
||||
HBRUSH hbr_white = GetStockObject(WHITE_BRUSH);
|
||||
HBRUSH hbr_black = GetStockObject(BLACK_BRUSH);
|
||||
HIMAGELIST himl;
|
||||
|
||||
himl = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON),
|
||||
ILC_COLOR | ILC_MASK, 2, 2);
|
||||
hdc_wnd = GetDC(infoPtr->hwndSelf);
|
||||
hdc = CreateCompatibleDC(hdc_wnd);
|
||||
hbm_im = CreateCompatibleBitmap(hdc_wnd, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON));
|
||||
hbm_mask = CreateBitmap(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 1, 1, NULL);
|
||||
ReleaseDC(infoPtr->hwndSelf, hdc_wnd);
|
||||
|
||||
rc.left = rc.top = 0;
|
||||
rc.right = GetSystemMetrics(SM_CXSMICON);
|
||||
rc.bottom = GetSystemMetrics(SM_CYSMICON);
|
||||
|
||||
hbm_orig = SelectObject(hdc, hbm_mask);
|
||||
FillRect(hdc, &rc, hbr_white);
|
||||
InflateRect(&rc, -3, -3);
|
||||
FillRect(hdc, &rc, hbr_black);
|
||||
|
||||
SelectObject(hdc, hbm_im);
|
||||
DrawFrameControl(hdc, &rc, DFC_BUTTON, DFCS_BUTTONCHECK | DFCS_MONO);
|
||||
SelectObject(hdc, hbm_orig);
|
||||
ImageList_Add(himl, hbm_im, hbm_mask);
|
||||
|
||||
SelectObject(hdc, hbm_im);
|
||||
DrawFrameControl(hdc, &rc, DFC_BUTTON, DFCS_BUTTONCHECK | DFCS_MONO | DFCS_CHECKED);
|
||||
SelectObject(hdc, hbm_orig);
|
||||
ImageList_Add(himl, hbm_im, hbm_mask);
|
||||
|
||||
DeleteObject(hbm_mask);
|
||||
DeleteObject(hbm_im);
|
||||
DeleteDC(hdc);
|
||||
|
||||
return himl;
|
||||
}
|
||||
|
||||
/***
|
||||
* DESCRIPTION:
|
||||
* Sets the extended listview style.
|
||||
|
@ -6606,6 +6657,14 @@ static DWORD LISTVIEW_SetExtendedListViewStyle(LISTVIEW_INFO *infoPtr, DWORD dwM
|
|||
else
|
||||
infoPtr->dwLvExStyle = dwStyle;
|
||||
|
||||
if((infoPtr->dwLvExStyle ^ dwOldStyle) & LVS_EX_CHECKBOXES)
|
||||
{
|
||||
HIMAGELIST himl = 0;
|
||||
if(infoPtr->dwLvExStyle & LVS_EX_CHECKBOXES)
|
||||
himl = LISTVIEW_CreateCheckBoxIL(infoPtr);
|
||||
LISTVIEW_SetImageList(infoPtr, LVSIL_STATE, himl);
|
||||
}
|
||||
|
||||
return dwOldStyle;
|
||||
}
|
||||
|
||||
|
@ -7890,6 +7949,19 @@ static LRESULT LISTVIEW_LButtonDown(LISTVIEW_INFO *infoPtr, WORD wKey, POINTS pt
|
|||
infoPtr->nEditLabelItem = -1;
|
||||
if ((nItem >= 0) && (nItem < infoPtr->nItemCount))
|
||||
{
|
||||
if ((infoPtr->dwLvExStyle & LVS_EX_CHECKBOXES) && (lvHitTestInfo.flags & LVHT_ONITEMSTATEICON))
|
||||
{
|
||||
DWORD state = LISTVIEW_GetItemState(infoPtr, nItem, LVIS_STATEIMAGEMASK) >> 12;
|
||||
if(state == 1 || state == 2)
|
||||
{
|
||||
LVITEMW lvitem;
|
||||
state ^= 3;
|
||||
lvitem.state = state << 12;
|
||||
lvitem.stateMask = LVIS_STATEIMAGEMASK;
|
||||
LISTVIEW_SetItemState(infoPtr, nItem, &lvitem);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
if (LISTVIEW_TrackMouse(infoPtr, lvHitTestInfo.pt))
|
||||
{
|
||||
NMLISTVIEW nmlv;
|
||||
|
|
Loading…
Reference in New Issue