📄 checklist.c
字号:
}
else
{
ScrollInfo.nPos = 0;
}
break;
}
case SB_THUMBPOSITION:
case SB_THUMBTRACK:
{
ScrollInfo.nPos = HIWORD(wParam);
break;
}
case SB_TOP:
ScrollInfo.nPos = 0;
break;
}
if (OldPos != ScrollInfo.nPos)
{
ScrollInfo.fMask = SIF_POS;
ScrollInfo.nPos = SetScrollInfo(hwnd,
SB_VERT,
&ScrollInfo,
TRUE);
if (OldPos != ScrollInfo.nPos)
{
ScrollWindowEx(hwnd,
0,
(OldPos - ScrollInfo.nPos) * infoPtr->ItemHeight,
NULL,
NULL,
NULL,
NULL,
SW_INVALIDATE | SW_SCROLLCHILDREN);
RedrawWindow(hwnd,
NULL,
NULL,
RDW_ERASE | RDW_UPDATENOW | RDW_NOCHILDREN);
}
}
}
break;
}
case CLM_ADDITEM:
{
INT Index = -1;
PCHECKITEM Item = AddCheckItem(infoPtr,
(LPWSTR)lParam,
CIS_NONE,
(ACCESS_MASK)wParam,
&Index);
if (Item != NULL)
{
UpdateControl(infoPtr);
Ret = (LRESULT)Index;
}
else
{
Ret = (LRESULT)-1;
}
break;
}
case CLM_DELITEM:
{
PCHECKITEM Item = FindCheckItemByIndex(infoPtr,
wParam);
if (Item != NULL)
{
Ret = DeleteCheckItem(infoPtr,
Item);
if (Ret)
{
UpdateControl(infoPtr);
}
}
else
{
Ret = FALSE;
}
break;
}
case CLM_SETITEMSTATE:
{
PCHECKITEM Item = FindCheckItemByIndex(infoPtr,
wParam);
if (Item != NULL)
{
DWORD OldState = Item->State;
Item->State = (DWORD)lParam & CIS_MASK;
if (Item->State != OldState)
{
/* revert the focus if the currently focused item is about
to be disabled */
if (Item == infoPtr->FocusedCheckItem &&
(Item->State & CIS_DISABLED))
{
if (infoPtr->FocusedCheckItemBox == CLB_DENY)
{
if (Item->State & CIS_DENYDISABLED)
{
infoPtr->FocusedCheckItem = NULL;
}
}
else
{
if (Item->State & CIS_ALLOWDISABLED)
{
infoPtr->FocusedCheckItem = NULL;
}
}
}
UpdateControl(infoPtr);
}
Ret = TRUE;
}
break;
}
case CLM_GETITEMCOUNT:
{
Ret = infoPtr->CheckItemCount;
break;
}
case CLM_CLEAR:
{
ClearCheckItems(infoPtr);
UpdateControl(infoPtr);
break;
}
case CLM_SETCHECKBOXCOLUMN:
{
infoPtr->CheckBoxLeft[wParam != CLB_DENY] = (INT)lParam;
UpdateControl(infoPtr);
Ret = 1;
break;
}
case CLM_GETCHECKBOXCOLUMN:
{
Ret = (LRESULT)infoPtr->CheckBoxLeft[wParam != CLB_DENY];
break;
}
case CLM_CLEARCHECKBOXES:
{
Ret = (LRESULT)ClearCheckBoxes(infoPtr);
if (Ret)
{
UpdateControl(infoPtr);
}
break;
}
case CLM_ENABLEQUICKSEARCH:
{
if (wParam == 0)
{
EscapeQuickSearch(infoPtr);
}
infoPtr->QuickSearchEnabled = (wParam != 0);
break;
}
case CLM_SETQUICKSEARCH_TIMEOUT_RESET:
{
infoPtr->QuickSearchResetDelay = (UINT)wParam;
break;
}
case CLM_SETQUICKSEARCH_TIMEOUT_SETFOCUS:
{
infoPtr->QuickSearchSetFocusDelay = (UINT)wParam;
break;
}
case CLM_FINDITEMBYACCESSMASK:
{
Ret = (LRESULT)FindCheckItemIndexByAccessMask(infoPtr,
(ACCESS_MASK)wParam);
break;
}
case WM_SETFONT:
{
Ret = (LRESULT)RetChangeControlFont(infoPtr,
(HFONT)wParam,
(BOOL)LOWORD(lParam));
break;
}
case WM_GETFONT:
{
Ret = (LRESULT)infoPtr->hFont;
break;
}
case WM_STYLECHANGED:
{
if (wParam == (WPARAM)GWL_STYLE)
{
UpdateControl(infoPtr);
}
break;
}
case WM_ENABLE:
{
EscapeQuickSearch(infoPtr);
UpdateControl(infoPtr);
break;
}
case WM_MOUSEWHEEL:
{
SHORT ScrollDelta;
UINT ScrollLines = 3;
SystemParametersInfo(SPI_GETWHEELSCROLLLINES,
0,
&ScrollLines,
0);
ScrollDelta = 0 - (SHORT)HIWORD(wParam);
if (ScrollLines != 0 &&
abs(ScrollDelta) >= WHEEL_DELTA)
{
SCROLLINFO ScrollInfo;
ScrollInfo.cbSize = sizeof(ScrollInfo);
ScrollInfo.fMask = SIF_RANGE | SIF_POS;
if (GetScrollInfo(hwnd,
SB_VERT,
&ScrollInfo))
{
INT OldPos = ScrollInfo.nPos;
ScrollInfo.nPos += (ScrollDelta / WHEEL_DELTA) * ScrollLines;
if (ScrollInfo.nPos < 0)
ScrollInfo.nPos = 0;
else if (ScrollInfo.nPos > ScrollInfo.nMax)
ScrollInfo.nPos = ScrollInfo.nMax;
if (OldPos != ScrollInfo.nPos)
{
ScrollInfo.fMask = SIF_POS;
ScrollInfo.nPos = SetScrollInfo(hwnd,
SB_VERT,
&ScrollInfo,
TRUE);
if (OldPos != ScrollInfo.nPos)
{
ScrollWindowEx(hwnd,
0,
(OldPos - ScrollInfo.nPos) * infoPtr->ItemHeight,
NULL,
NULL,
NULL,
NULL,
SW_INVALIDATE | SW_SCROLLCHILDREN);
RedrawWindow(hwnd,
NULL,
NULL,
RDW_ERASE | RDW_UPDATENOW | RDW_NOCHILDREN);
}
}
}
}
break;
}
case WM_SETFOCUS:
{
infoPtr->HasFocus = TRUE;
if (infoPtr->FocusedCheckItem == NULL)
{
BOOL Shift = GetKeyState(VK_SHIFT) & 0x8000;
infoPtr->FocusedCheckItem = FindEnabledCheckBox(infoPtr,
Shift,
&infoPtr->FocusedCheckItemBox);
}
if (infoPtr->FocusedCheckItem != NULL)
{
MakeCheckItemVisible(infoPtr,
infoPtr->FocusedCheckItem);
UpdateCheckItem(infoPtr,
infoPtr->FocusedCheckItem);
}
break;
}
case WM_KILLFOCUS:
{
EscapeQuickSearch(infoPtr);
infoPtr->HasFocus = FALSE;
if (infoPtr->FocusedCheckItem != NULL)
{
infoPtr->FocusedPushed = FALSE;
UpdateCheckItem(infoPtr,
infoPtr->FocusedCheckItem);
}
break;
}
case WM_LBUTTONDBLCLK:
case WM_LBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_RBUTTONDOWN:
{
if (IsWindowEnabled(hwnd))
{
PCHECKITEM NewFocus;
UINT NewFocusBox = 0;
BOOL InCheckBox;
POINT pt;
BOOL ChangeFocus, Capture = FALSE;
pt.x = (LONG)LOWORD(lParam);
pt.y = (LONG)HIWORD(lParam);
NewFocus = PtToCheckItemBox(infoPtr,
&pt,
&NewFocusBox,
&InCheckBox);
if (NewFocus != NULL)
{
if (NewFocus->State & ((NewFocusBox != CLB_DENY) ? CIS_ALLOWDISABLED : CIS_DENYDISABLED))
{
/* the user clicked on a disabled checkbox, try to set
the focus to the other one or not change it at all */
InCheckBox = FALSE;
ChangeFocus = ((NewFocus->State & CIS_DISABLED) != CIS_DISABLED);
if (ChangeFocus)
{
NewFocusBox = ((NewFocusBox != CLB_DENY) ? CLB_DENY : CLB_ALLOW);
}
}
else
{
ChangeFocus = TRUE;
}
if (InCheckBox && ChangeFocus && GetCapture() == NULL &&
(uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONDBLCLK))
{
infoPtr->FocusedPushed = TRUE;
Capture = TRUE;
}
}
else
{
ChangeFocus = TRUE;
}
if (ChangeFocus)
{
if (infoPtr->QuickSearchEnabled && infoPtr->QuickSearchHitItem != NULL &&
infoPtr->QuickSearchHitItem != NewFocus)
{
EscapeQuickSearch(infoPtr);
}
ChangeCheckItemFocus(infoPtr,
NewFocus,
NewFocusBox);
}
if (!infoPtr->HasFocus)
{
SetFocus(hwnd);
}
if (Capture)
{
SetCapture(hwnd);
}
}
break;
}
case WM_LBUTTONUP:
{
if (GetCapture() == hwnd)
{
if (infoPtr->FocusedCheckItem != NULL && infoPtr->FocusedPushed)
{
PCHECKITEM PtItem;
UINT PtItemBox;
BOOL InCheckBox;
POINT pt;
pt.x = (LO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -