📄 atloutbarctrl.h
字号:
{
DrawDragArrow(&dc, index, -1);
SetCursor(hNoDragCursor);
hCur = hNoDragCursor;
}
}
}
else
{
if (ht1 == htItem && idx == index)
{
if (!bHigh)
{
HighlightItem(index, TRUE);
bHigh = TRUE;
bPressedHighlight = TRUE;
}
}
else
{
if (ht1 == htItem)
{
if (bHigh)
{
HighlightItem(index, FALSE);
bHigh = FALSE;
bPressedHighlight = FALSE;
}
}
else
{
if (dwFlags&fDragItems)
{
HighlightItem(index, TRUE);
bHigh = TRUE;
bDragging = TRUE;
SetCursor(hDragCursor);
hCur = hDragCursor;
bPressedHighlight = TRUE;
}
}
}
}
}
break;
case WM_SETCURSOR:
SetCursor(hCur);
break;
case WM_LBUTTONUP:
{
if (bHigh)
{
HighlightItem(-1);
bHigh = FALSE;
}
CPoint pt(msg.lParam);
int idx, ht1 = HitTestEx(pt, idx);
if (!bDragging)
{
if (ht1 == htItem && idx == index)
{
if (iSelAnimTiming > 0 && index != iLastSel && iLastSel >= 0)
{
DrawAnimItem(0, 0, iLastSel);
}
if (dwFlags&fSelHighlight && iLastSel >= 0)
{
CRect rc;
GetIconRect(iSelFolder, iLastSel, rc);
rc.InflateRect(1,1);
InvalidateRect(rc);
}
iLastSel = index;
if (dwFlags&fSelHighlight && iLastSel >= 0)
{
CRect rc;
GetIconRect(iSelFolder, iLastSel, rc);
rc.InflateRect(1,1);
InvalidateRect(rc);
}
CWindow wnd(m_hOwnerWindow);
wnd.SendMessage(WM_OUTBAR_NOTIFY, NM_OB_ITEMCLICK, idx);
}
}
else
{
if (ht1 == htItem)
{
if (idx != index)
{
OUTBAR_INFO ob;
ob.iDragFrom = iSelFolder;
ob.iDragTo = index;
CWindow wnd(m_hOwnerWindow);
if (wnd.SendMessage(WM_OUTBAR_NOTIFY, NM_OB_DRAGITEM, (LPARAM) &ob))
{
CBarFolder* pbf = GetBarFolderListItem(iSelFolder);
CBarItem* piFrom = GetBarItemListItem(pbf, index);
CBarItemList::iterator ListIterator1;
int nIndex = 0;
for (ListIterator1 = pbf->arItems.begin(); ListIterator1 != pbf->arItems.end();++ListIterator1)
{
if (nIndex == index)
{
pbf->arItems.erase(ListIterator1);
break;
}
nIndex++;
}
if (idx > index) idx --;
nIndex = 0;
CBarItemList::iterator ListIterator;
for (ListIterator = pbf->arItems.begin(); ListIterator != pbf->arItems.end();++ListIterator)
{
if (nIndex == idx)
{
pbf->arItems.insert(ListIterator, piFrom);
break;
}
nIndex++;
}
}
}
}
else
{
CRect rcItem;
GetItemRect(iSelFolder, GetItemCount() - 1, rcItem);
if (pt.y > rcItem.bottom && pt.y < inRc.bottom)
{
OUTBAR_INFO ob;
ob.iDragFrom = iSelFolder;
ob.iDragTo = index;
CWindow wnd(m_hOwnerWindow);
if (wnd.SendMessage(WM_OUTBAR_NOTIFY, NM_OB_DRAGITEM, (LPARAM) &ob))
{
CBarFolder* pbf = GetBarFolderListItem(iSelFolder);
CBarItem* piFrom = GetBarItemListItem(pbf, index);
CBarItemList::iterator ListIterator1;
int nIndex = 0;
for (ListIterator1 = pbf->arItems.begin(); ListIterator1 != pbf->arItems.end();++ListIterator1)
{
if (nIndex == index)
{
pbf->arItems.erase(ListIterator1);
break;
}
nIndex++;
}
pbf->arItems.insert(pbf->arItems.end(), piFrom);
}
}
}
}
}
goto ExitLoop4;
default:
DispatchMessage(&msg);
break;
}
}
ExitLoop4:
ReleaseCapture();
//@@@@@AfxUnlockTempMaps(FALSE);
if (bDragging)
{
Invalidate();
}
}
bPressedHighlight = FALSE;
if (bHigh) InvalidateRect(rc, FALSE);
}
else iLastItemHighlighted = -1;
if (ht == htDownScroll)
{
bLooping = TRUE;
BOOL bHigh = TRUE;
if (::GetCapture() == NULL)
{
SetCapture();
ATLASSERT(m_hWnd == GetCapture());
CClientDC dc(m_hWnd);
dc.DrawFrameControl(rcDownArrow, DFC_SCROLL, DFCS_SCROLLDOWN|DFCS_PUSHED);
SetTimer(2,300);
//@@AfxLockTempMaps();
for (;;)
{
MSG msg;
::GetMessage(&msg, NULL, 0, 0);
if (GetCapture() != m_hWnd)
break;
switch (msg.message)
{
case WM_MOUSEMOVE:
{
CPoint pt(msg.lParam);
if (rcDownArrow.PtInRect(pt))
{
if (bHigh == FALSE)
{
dc.DrawFrameControl(rcDownArrow, DFC_SCROLL, DFCS_SCROLLDOWN|DFCS_PUSHED);
bHigh = TRUE;
bDownArrow = TRUE;
bDownPressed = TRUE;
}
}
else
{
if (bHigh == TRUE)
{
dc.DrawFrameControl(rcDownArrow, DFC_SCROLL, DFCS_SCROLLDOWN);
bHigh = FALSE;
bDownArrow = FALSE;
bDownPressed = FALSE;
}
}
}
break;
case WM_LBUTTONUP:
{
if (bHigh)
{
dc.DrawFrameControl(rcDownArrow, DFC_SCROLL, DFCS_SCROLLDOWN);
bHigh = FALSE;
}
bDownArrow = FALSE;
CPoint pt(msg.lParam);
if (rcDownArrow.PtInRect(pt))
{
CRect itrc;
GetItemRect(iSelFolder, GetItemCount() - 1, itrc);
CRect crc;
GetInsideRect(crc);
if (itrc.bottom > crc.bottom)
{
iFirstItem ++;
InvalidateRect(crc, TRUE);
}
}
}
goto ExitLoop3;
case WM_TIMER:
{
if (msg.wParam == 2)
{
if (bHigh)
{
CPoint pt(msg.pt);
ScreenToClient(&pt);
if (rcDownArrow.PtInRect(pt))
{
bDownPressed = TRUE;
CRect itrc;
GetItemRect(iSelFolder, GetItemCount() - 1, itrc);
CRect crc;
GetInsideRect(crc);
if (itrc.bottom > crc.bottom)
{
iFirstItem ++;
InvalidateRect(crc, TRUE);
}
else goto ExitLoop3;
}
else bDownPressed = FALSE;
}
}
break;
}
case WM_KEYDOWN:
if (msg.wParam != VK_ESCAPE)
break;
default:
DispatchMessage(&msg);
break;
}
}
ExitLoop3:
KillTimer(2);
ReleaseCapture();
//@@@@@@@@AfxUnlockTempMaps(FALSE);
bLooping = FALSE;
bDownPressed = FALSE;
bDownArrow = FALSE;
CRect crc;
GetInsideRect(crc);
InvalidateRect(crc, TRUE);
}
}
if (ht == htUpScroll)
{
bLooping = TRUE;
BOOL bHigh = TRUE;
if (::GetCapture() == NULL)
{
SetCapture();
ATLASSERT(m_hWnd == GetCapture());
CClientDC dc(m_hWnd);
dc.DrawFrameControl(rcUpArrow, DFC_SCROLL, DFCS_SCROLLUP|DFCS_PUSHED);
SetTimer(2,300);
//@@AfxLockTempMaps();
for (;;)
{
MSG msg;
::GetMessage(&msg, NULL, 0, 0);
if (GetCapture() != m_hWnd) break;
switch (msg.message)
{
case WM_MOUSEMOVE:
{
CPoint pt(msg.lParam);
if (rcUpArrow.PtInRect(pt))
{
if (bHigh == FALSE)
{
dc.DrawFrameControl(rcUpArrow, DFC_SCROLL, DFCS_SCROLLUP|DFCS_PUSHED);
bHigh = TRUE;
bUpArrow = TRUE;
bUpPressed = TRUE;
}
}
else
{
if (bHigh == TRUE)
{
dc.DrawFrameControl(rcUpArrow, DFC_SCROLL, DFCS_SCROLLUP);
bHigh = FALSE;
bUpArrow = FALSE;
bUpPressed = FALSE;
}
}
}
break;
case WM_LBUTTONUP:
{
if (bHigh)
{
dc.DrawFrameControl(rcUpArrow, DFC_SCROLL, DFCS_SCROLLUP);
bHigh = FALSE;
}
bUpArrow = FALSE;
CPoint pt(msg.lParam);
if (rcUpArrow.PtInRect(pt))
{
if (iFirstItem > 0 )
{
iFirstItem --;
CRect crc;
GetInsideRect(crc);
InvalidateRect(crc, TRUE);
}
}
}
goto ExitLoop;
case WM_TIMER:
{
if (msg.wParam == 2)
{
if (bHigh)
{
CPoint pt(msg.pt);
ScreenToClient(&pt);
if (rcUpArrow.PtInRect(pt))
{
bUpPressed = TRUE;
if (iFirstItem > 0)
{
iFirstItem --;
CRect crc;
GetInsideRect(crc);
InvalidateRect(crc, TRUE);
}
else goto ExitLoop;
}
else bUpPressed = FALSE;
}
}
break;
}
case WM_KEYDOWN:
if (msg.wParam != VK_ESCAPE) break;
default:
DispatchMessage(&msg);
break;
}
}
ExitLoop:
KillTimer(2);
ReleaseCapture();
//@@@@@@AfxUnlockTempMaps(FALSE);
bLooping = FALSE;
bUpPressed = FALSE;
bUpArrow = FALSE;
CRect crc;
GetInsideRect(crc);
InvalidateRect(crc, TRUE);
}
}
return 0;
}
LRESULT OnSetCursor(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
CPoint pt(GetMessagePos());
ScreenToClient(&pt);
int index, ht = HitTestEx(pt, index);
if (ht == htFolder)
{
SetCursor(hHandCursor);
return 0;
}
SetCursor(hNormalCursor);
return 0;
}
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
bUpArrow = bDownArrow = FALSE;
int t, max = GetFolderCount();
CRect rc;
GetInsideRect(rc);
for (t = 0; t < max; t++)
{
CBarFolder* pbf = GetBarFolderListItem(t);
CWindow* pc = GetFolderChild(t);
if (pc)
{
pc->SetWindowPos(0, rc.left, rc.top, rc.Width(), rc.Height(), SWP_NOZORDER);
}
}
CRect rc2;
GetClientRect(rc2);
InvalidateRect(rc2);
return 0;
}
LRESULT OnRButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
WORD x, y;
x = LOWORD(lParam);
y = HIWORD(lParam);
CPoint point(x, y);
iHitInternal1 = HitTestEx(point, iHitInternal2);
CMenu menu;
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING, ID_GFX_SMALLICON, _ID_GFX_SMALLICON);
menu.AppendMenu(MF_STRING, ID_GFX_LARGEICON, _ID_GFX_LARGEICON);
if (iHitInternal1 == htItem)
{
/* if (dwFlags&fRemoveItems || dwFlags&fEditItems)
{
menu.AppendMenu(MF_SEPARATOR);
if (dwFlags&fRemoveItems)
menu.AppendMenu(MF_STRING, ID_GFX_REMOVEITEM, _ID_GFX_REMOVEITEM);
if (dwFlags&fEditItems)
menu.AppendMenu(MF_STRING, ID_GFX_RENAMEITEM, _ID_GFX_RENAMEITEM);
}*/
}
else if (iHitInternal1 == htFolder)
{
if (dwFlags&fRemoveGroups || dwFlags&fEditGroups)
{
/* menu.AppendMenu(MF_SEPARATOR);
if (dwFlags&fRemoveGroups)
menu.AppendMenu(MF_STRING, ID_GFX_REMOVEITEM, _ID_GFX_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -