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

📄 atlcontrols.h

📁 outlook 插件 在outlook 中添加弹出试菜单
💻 H
📖 第 1 页 / 共 5 页
字号:
    return nRes;
  }

  BOOL SetItem(int nItem, int nSubItem, UINT nMask, LPCTSTR lpszItem,
    int nImage, UINT nState, UINT nStateMask, LPARAM lParam)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    LV_ITEM lvi;
    lvi.mask = nMask;
    lvi.iItem = nItem;
    lvi.iSubItem = nSubItem;
    lvi.stateMask = nStateMask;
    lvi.state = nState;
    lvi.pszText = (LPTSTR) lpszItem;
    lvi.iImage = nImage;
    lvi.lParam = lParam;
    return (BOOL)::SendMessage(m_hWnd, LVM_SETITEM, 0, (LPARAM)&lvi);
  }

#ifndef _ATL_NO_COM
  BOOL GetItemText(int nItem, int nSubItem, BSTR& bstrText) const
  {
    USES_CONVERSION;
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(bstrText == NULL);
    LV_ITEM lvi;
    memset(&lvi, 0, sizeof(LV_ITEM));
    lvi.iSubItem = nSubItem;

    LPTSTR lpstrText = NULL;
    int nLen = 128;
    int nRes;
    do
    {
      nLen *= 2;
      lvi.cchTextMax = nLen;
      if(lpstrText != NULL)
      {
        delete [] lpstrText;
        lpstrText = NULL;
      }
      ATLTRY(lpstrText = new TCHAR[nLen]);
      if(lpstrText == NULL)
        break;
      lpstrText[0] = NULL;
      lvi.pszText = lpstrText;
      nRes  = (int)::SendMessage(m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem,
        (LPARAM)&lvi);
    } while (nRes == nLen-1);

    bstrText = ::SysAllocString(T2OLE(lpstrText));
    delete [] lpstrText;

    return (bstrText != NULL) ? TRUE : FALSE;
  }
#endif //!_ATL_NO_COM

  int GetItemText(int nItem, int nSubItem, LPTSTR lpszText, int nLen) const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    LV_ITEM lvi;
    memset(&lvi, 0, sizeof(LV_ITEM));
    lvi.iSubItem = nSubItem;
    lvi.cchTextMax = nLen;
    lvi.pszText = lpszText;
    return (int)::SendMessage(m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem, (LPARAM)&lvi);
  }

  DWORD GetItemData(int nItem) const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    LV_ITEM lvi;
    memset(&lvi, 0, sizeof(LV_ITEM));
    lvi.iItem = nItem;
    lvi.mask = LVIF_PARAM;
    ::SendMessage(m_hWnd, LVM_GETITEM, 0, (LPARAM)&lvi);
    return (DWORD)lvi.lParam;
  }

  void RemoveImageList(int nImageList)
  {
    HIMAGELIST h = (HIMAGELIST)::SendMessage(m_hWnd, LVM_GETIMAGELIST, (WPARAM)nImageList, 0L);
    if (h != NULL)
      ::SendMessage(m_hWnd, LVM_SETIMAGELIST, (WPARAM)nImageList, 0L);
  }

  HIMAGELIST CreateDragImage(int nItem, LPPOINT lpPoint)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HIMAGELIST)::SendMessage(m_hWnd, LVM_CREATEDRAGIMAGE, nItem, (LPARAM)lpPoint);
  }

  BOOL AddColumn(LPCTSTR strItem,int nItem,int nSubItem = -1,
      int nMask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM,
      int nFmt = LVCFMT_LEFT)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    LV_COLUMN lvc;
    lvc.mask = nMask;
    lvc.fmt = nFmt;
    lvc.pszText = (LPTSTR)strItem;
    lvc.cx = GetStringWidth(lvc.pszText) + 15;
    if(nMask & LVCF_SUBITEM)
    {
      if(nSubItem != -1)
        lvc.iSubItem = nSubItem;
      else
        lvc.iSubItem = nItem;
    }
    return InsertColumn(nItem, &lvc);
  }

  BOOL AddItem(int nItem,int nSubItem,LPCTSTR strItem,int nImageIndex = -1)
  {
    LV_ITEM lvItem;
    lvItem.mask = LVIF_TEXT;
    lvItem.iItem = nItem;
    lvItem.iSubItem = nSubItem;
    lvItem.pszText = (LPTSTR) strItem;
    if(nImageIndex != -1){
      lvItem.mask |= LVIF_IMAGE;
      lvItem.iImage = nImageIndex;
    }
    if(nSubItem == 0)
      return InsertItem(&lvItem);
    return SetItem(&lvItem);
  }

  // single-selection only
  int GetSelectedIndex() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(GetStyle() & LVS_SINGLESEL);

    return (int)::SendMessage(m_hWnd, LVM_GETNEXTITEM, -1, MAKELPARAM(LVNI_ALL | LVNI_SELECTED, 0));
  }

  BOOL GetSelectedItem(LV_ITEM* pItem) const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(GetStyle() & LVS_SINGLESEL);
    ATLASSERT(pItem != NULL);

    pItem->iItem = (int)::SendMessage(m_hWnd, LVM_GETNEXTITEM, -1, MAKELPARAM(LVNI_ALL | LVNI_SELECTED, 0));
    if(pItem->iItem == -1)
      return FALSE;

    return (BOOL)::SendMessage(m_hWnd, LVM_GETITEM, 0, (LPARAM)pItem);
  }

  // new common control support
#if (_WIN32_IE >= 0x0400)
  BOOL GetBkImage(LPLVBKIMAGE plvbki)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (BOOL)::SendMessage(m_hWnd, LVM_GETBKIMAGE, 0, (LPARAM)plvbki);
  }
  BOOL SetBkImage(LPLVBKIMAGE plvbki)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (BOOL)::SendMessage(m_hWnd, LVM_SETBKIMAGE, 0, (LPARAM)plvbki);
  }
  DWORD GetExtendedListViewStyle()
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return ::SendMessage(m_hWnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0L);
  }
  // dwExMask = 0 means all styles
  DWORD SetExtendedListViewStyle(DWORD dwExStyle, DWORD dwExMask = 0)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return ::SendMessage(m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, dwExMask, dwExStyle);
  }
  HCURSOR GetHotCursor()
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HCURSOR)::SendMessage(m_hWnd, LVM_GETHOTCURSOR, 0, 0L);
  }
  HCURSOR SetHotCursor(HCURSOR hHotCursor)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HCURSOR)::SendMessage(m_hWnd, LVM_SETHOTCURSOR, 0, (LPARAM)hHotCursor);
  }
  int GetHotItem()
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return ::SendMessage(m_hWnd, LVM_GETHOTITEM, 0, 0L);
  }
  int SetHotItem(int nIndex)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return ::SendMessage(m_hWnd, LVM_SETHOTITEM, nIndex, 0L);
  }
  int GetSelectionMark()
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return ::SendMessage(m_hWnd, LVM_GETSELECTIONMARK, 0, 0L);
  }
  int SetSelectionMark(int nIndex)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return ::SendMessage(m_hWnd, LVM_SETSELECTIONMARK, 0, nIndex);
  }
  BOOL GetWorkAreas(int nWorkAreas, LPRECT lpRect)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (BOOL)::SendMessage(m_hWnd, LVM_GETWORKAREAS, nWorkAreas, (LPARAM)lpRect);
  }
  BOOL SetWorkAreas(int nWorkAreas, LPRECT lpRect)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (BOOL)::SendMessage(m_hWnd, LVM_SETWORKAREAS, nWorkAreas, (LPARAM)lpRect);
  }
  BOOL GetColumnOrderArray(int nCount, int* lpnArray)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (BOOL)::SendMessage(m_hWnd, LVM_GETCOLUMNORDERARRAY, nCount, (LPARAM)lpnArray);
  }
  BOOL SetColumnOrderArray(int nCount, int* lpnArray)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (BOOL)::SendMessage(m_hWnd, LVM_SETCOLUMNORDERARRAY, nCount, (LPARAM)lpnArray);
  }
  DWORD GetHoverTime()
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(GetExtendedListViewStyle() & (LVS_EX_TRACKSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_TWOCLICKACTIVATE));
    return ::SendMessage(m_hWnd, LVM_GETHOVERTIME, 0, 0L);
  }
  DWORD SetHoverTime(DWORD dwHoverTime)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(GetExtendedListViewStyle() & (LVS_EX_TRACKSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_TWOCLICKACTIVATE));
    return ::SendMessage(m_hWnd, LVM_SETHOVERTIME, 0, dwHoverTime);
  }
  HWND GetHeader()
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HWND)::SendMessage(m_hWnd, LVM_GETHEADER, 0, 0L);
  }
  BOOL GetSubItemRect(int nItem, int nSubItem, int nFlag, LPRECT lpRect)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(GetStyle() & LVS_REPORT);
    ATLASSERT(lpRect != NULL);
    lpRect->top = nSubItem;
    lpRect->left = nFlag;
    return (BOOL)::SendMessage(m_hWnd, LVM_GETSUBITEMRECT, nItem, (LPARAM)lpRect);
  }
  BOOL GetCheckState(int nIndex)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(GetExtendedListViewStyle() & LVS_EX_CHECKBOXES);
    UINT uRet = GetItemState(nIndex, LVIS_STATEIMAGEMASK);
//REVIEW
    return (uRet >> 12) - 1;
  }
  BOOL SetCheckState(int nItem, BOOL bCheck)
  {
    int nCheck = bCheck ? 2 : 1;    // one based index
    return SetItemState(nItem, INDEXTOSTATEIMAGEMASK(nCheck), LVIS_STATEIMAGEMASK);
  }
  DWORD ApproximateViewRect(int cx = -1, int cy = -1, int nCount = -1)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return ::SendMessage(m_hWnd, LVM_APPROXIMATEVIEWRECT, nCount, MAKELPARAM(cx, cy));
  }
  BOOL GetNumberOfWorkAreas(int* pnWorkAreas)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (BOOL)::SendMessage(m_hWnd, LVM_GETNUMBEROFWORKAREAS, 0, (LPARAM)pnWorkAreas);
  }
  DWORD SetIconSpacing(int cx, int cy)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(GetStyle() & LVS_ICON);
    return ::SendMessage(m_hWnd, LVM_SETICONSPACING, 0, MAKELPARAM(cx, cy));
  }
  void SetItemCountEx(int nItems, DWORD dwFlags)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT((GetStyle() & LVS_OWNERDATA) && (GetStyle() & (LVS_REPORT | LVS_LIST)));
    ::SendMessage(m_hWnd, LVM_SETITEMCOUNT, nItems, dwFlags);
  }
  int SubItemHitTest(LPLVHITTESTINFO lpInfo)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (int)::SendMessage(m_hWnd, LVM_SUBITEMHITTEST, 0, (LPARAM)lpInfo);
  }
#endif //(_WIN32_IE >= 0x0400)
};

typedef CListViewCtrlT<CWindow>     CListViewCtrl;

/////////////////////////////////////////////////////////////////////////////
// CTreeViewCtrl

template <class Base>
class CTreeViewCtrlT : public Base
{
public:
// Constructors
  CTreeViewCtrlT(HWND hWnd = NULL) : Base(hWnd) { }

  CTreeViewCtrlT< Base >& operator=(HWND hWnd)
  {
    m_hWnd = hWnd;
    return *this;
  }

  HWND Create(HWND hWndParent, RECT& rcPos, LPCTSTR szWindowName = NULL,
      DWORD dwStyle = 0, DWORD dwExStyle = 0,
      UINT nID = 0, LPVOID lpCreateParam = NULL)
  {
    return CWindow::Create(GetWndClassName(), hWndParent, rcPos, szWindowName, dwStyle, dwExStyle, nID, lpCreateParam);
  }
  HWND Create(HWND hWndParent, LPRECT lpRect = NULL, LPCTSTR szWindowName = NULL,
      DWORD dwStyle = 0, DWORD dwExStyle = 0,
      HMENU hMenu = NULL, LPVOID lpCreateParam = NULL)
  {
    return CWindow::Create(GetWndClassName(), hWndParent, lpRect, szWindowName, dwStyle, dwExStyle, hMenu, lpCreateParam);
  }

// Operations
  static LPCTSTR GetWndClassName()
  {
    return WC_TREEVIEW;
  }

  HTREEITEM InsertItem(LPTV_INSERTSTRUCT lpInsertStruct)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HTREEITEM)::SendMessage(m_hWnd, TVM_INSERTITEM, 0, (LPARAM)lpInsertStruct);
  }
  HTREEITEM InsertItem(LPCTSTR lpszItem, int nImage,
    int nSelectedImage, HTREEITEM hParent, HTREEITEM hInsertAfter)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE, lpszItem, nImage, nSelectedImage, 0, 0, 0, hParent, hInsertAfter);
  }
  HTREEITEM InsertItem(LPCTSTR lpszItem, HTREEITEM hParent, HTREEITEM hInsertAfter)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return InsertItem(TVIF_TEXT, lpszItem, 0, 0, 0, 0, 0, hParent, hInsertAfter);
  }
  BOOL DeleteItem(HTREEITEM hItem)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (BOOL)::SendMessage(m_hWnd, TVM_DELETEITEM, 0, (LPARAM)hItem);
  }
  BOOL DeleteAllItems()
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (BOOL)::SendMessage(m_hWnd, TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT);
  }
  BOOL Expand(HTREEITEM hItem, UINT nCode)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (BOOL)::SendMessage(m_hWnd, TVM_EXPAND, nCode, (LPARAM)hItem);
  }
  UINT GetCount() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (UINT)::SendMessage(m_hWnd, TVM_GETCOUNT, 0, 0L);
  }
  UINT GetIndent() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (UINT)::SendMessage(m_hWnd, TVM_GETINDENT, 0, 0L);
  }
  void SetIndent(UINT nIndent)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ::SendMessage(m_hWnd, TVM_SETINDENT, nIndent, 0L);
  }
  HIMAGELIST GetImageList(UINT nImageList) const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HIMAGELIST)(::SendMessage(m_hWnd, TVM_GETIMAGELIST, (UINT)nImageList, 0L));
  }
  HIMAGELIST SetImageList(HIMAGELIST hImageList, int nImageListType)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HIMAGELIST)(::SendMessage(m_hWnd, TVM_SETIMAGELIST, (UINT)nImageListType, (LPARAM)hImageList));
  }
  HTREEITEM GetNextItem(HTREEITEM hItem, UINT nCode)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, nCode, (LPARAM)hItem);
  }
  HTREEITEM GetChildItem(HTREEITEM hItem)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_CHILD, (LPARAM)hItem);
  }
  HTREEITEM GetNextSiblingItem(HTREEITEM hItem)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM)hItem);
  }
  HTREEITEM GetPrevSiblingItem(HTREEITEM hItem)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_PREVIOUS, (LPARAM)hItem);
  }
  HTREEITEM GetParentItem(HTREEITEM hItem)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_PARENT, (LPARAM)hItem);
  }
  HTREEITEM GetFirstVisibleItem()
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_FIRSTVISIBLE, 0L);
  }
  HTREEITEM GetNextVisibleItem(HTREEITEM hItem)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_NEXTVISIBLE, (LPARAM)hItem);
  }
  HTREEITEM GetPrevVisibleItem(HTREEITEM hItem)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_PREVIOUSVISIBLE, (LPARAM)hItem);
  }
  HTREEITEM GetSelectedItem()
  {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -