⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atloutbarctrl.h

📁 这是一本学习 window编程的很好的参考教材
💻 H
📖 第 1 页 / 共 5 页
字号:
								  {
									  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 + -