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

📄 atlcontrols.h

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

// ATLControls.h : Helper classes for common controls
//
//  These classes are only intended as a sample and
//  are NOT supported by Microsoft
//
// This is a part of the Active Template Library.
// Copyright (C) 1996-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Active Template Library Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Active Template Library product.

#ifndef __ATLCONTROLS_H__
#define __ATLCONTROLS_H__

#ifndef __cplusplus
  #error ATL requires C++ compilation (use a .cpp suffix)
#endif

#ifndef __ATLWIN_H__
  #error atlcontrols.h requires atlwin.h to be included first
#endif

#include <commctrl.h>

namespace ATLControls
{

/////////////////////////////////////////////////////////////////////////////
// Forward declarations

template <class Base> class CStaticT;
template <class Base> class CButtonT;
template <class Base> class CListBoxT;
template <class Base> class CComboBoxT;
template <class Base> class CEditT;
template <class Base> class CScrollBarT;
class CImageList;
template <class Base> class CListViewCtrlT;
template <class Base> class CTreeViewCtrlT;
class CTreeItem;
template <class Base> class CTreeViewCtrlExT;
template <class Base> class CHeaderCtrlT;
template <class Base> class CToolBarCtrlT;
template <class Base> class CStatusBarCtrlT;
template <class Base> class CTabCtrlT;
class CToolInfo;
template <class Base> class CToolTipCtrlT;
template <class Base> class CTrackBarCtrlT;
template <class Base> class CUpDownCtrlT;
template <class Base> class CProgressBarCtrlT;
template <class Base> class CHotKeyCtrlT;
template <class Base> class CAnimateCtrlT;
template <class Base> class CRichEditCtrlT;
template <class Base> class CDragListBoxT;
template <class T> class CDragListNotifyImpl;
template <class Base> class CReBarCtrlT;
template <class Base> class CComboBoxExT;
template <class Base> class CDateTimePickerCtrlT;
template <class Base> class CMonthCalendarCtrlT;
#if (_WIN32_IE >= 0x0400)
template <class Base> class CFlatScrollBarT;
template <class Base> class CIPAddressCtrlT;
template <class Base> class CPagerCtrlT;
#endif //(_WIN32_IE >= 0x0400)
template <class T> class CCustomDraw;

// --- Standard Windows controls ---

/////////////////////////////////////////////////////////////////////////////
// CStatic - client side for a Windows STATIC control

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

  CStaticT< 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);
  }

// Attributes
  static LPCTSTR GetWndClassName()
  {
    return _T("STATIC");
  }

  HICON SetIcon(HICON hIcon)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HICON)::SendMessage(m_hWnd, STM_SETICON, (WPARAM)hIcon, 0L);
  }
  HICON GetIcon() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HICON)::SendMessage(m_hWnd, STM_GETICON, 0, 0L);
  }

  HENHMETAFILE SetEnhMetaFile(HENHMETAFILE hMetaFile)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HENHMETAFILE)::SendMessage(m_hWnd, STM_SETIMAGE, IMAGE_ENHMETAFILE, (LPARAM)hMetaFile);
  }
  HENHMETAFILE GetEnhMetaFile() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HENHMETAFILE)::SendMessage(m_hWnd, STM_GETIMAGE, IMAGE_ENHMETAFILE, 0L);
  }
  HBITMAP SetBitmap(HBITMAP hBitmap)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HBITMAP)::SendMessage(m_hWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap);
  }
  HBITMAP GetBitmap() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HBITMAP)::SendMessage(m_hWnd, STM_GETIMAGE, IMAGE_BITMAP, 0L);
  }
  HCURSOR SetCursor(HCURSOR hCursor)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HCURSOR)::SendMessage(m_hWnd, STM_SETIMAGE, IMAGE_CURSOR, (LPARAM)hCursor);
  }
  HCURSOR GetCursor()
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HCURSOR)::SendMessage(m_hWnd, STM_GETIMAGE, IMAGE_CURSOR, 0L);
  }
};

typedef CStaticT<CWindow>   CStatic;

/////////////////////////////////////////////////////////////////////////////
// CButton - client side for a Windows BUTTON control

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

  CButtonT< 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);
  }

// Attributes
  static LPCTSTR GetWndClassName()
  {
    return _T("BUTTON");
  }

  UINT GetState() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (UINT)::SendMessage(m_hWnd, BM_GETSTATE, 0, 0L);
  }
  void SetState(BOOL bHighlight)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ::SendMessage(m_hWnd, BM_SETSTATE, bHighlight, 0L);
  }
  int GetCheck() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (int)::SendMessage(m_hWnd, BM_GETCHECK, 0, 0L);
  }
  void SetCheck(int nCheck)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ::SendMessage(m_hWnd, BM_SETCHECK, nCheck, 0L);
  }
  UINT GetButtonStyle() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (UINT)::GetWindowLong(m_hWnd, GWL_STYLE) & 0xff;
  }
  void SetButtonStyle(UINT nStyle, BOOL bRedraw = TRUE)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ::SendMessage(m_hWnd, BM_SETSTYLE, nStyle, (LPARAM)bRedraw);
  }

  HICON SetIcon(HICON hIcon)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HICON)::SendMessage(m_hWnd, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon);
  }
  HICON GetIcon() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HICON)::SendMessage(m_hWnd, BM_GETIMAGE, IMAGE_ICON, 0L);
  }
  HBITMAP SetBitmap(HBITMAP hBitmap)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HBITMAP)::SendMessage(m_hWnd, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap);
  }
  HBITMAP GetBitmap() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HBITMAP)::SendMessage(m_hWnd, BM_GETIMAGE, IMAGE_BITMAP, 0L);
  }
  HCURSOR SetCursor(HCURSOR hCursor)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HCURSOR)::SendMessage(m_hWnd, BM_SETIMAGE, IMAGE_CURSOR, (LPARAM)hCursor);
  }
  HCURSOR GetCursor()
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (HCURSOR)::SendMessage(m_hWnd, BM_GETIMAGE, IMAGE_CURSOR, 0L);
  }
};

typedef CButtonT<CWindow>   CButton;

/////////////////////////////////////////////////////////////////////////////
// CListBox - client side for a Windows LISTBOX control

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

  CListBoxT< 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);
  }

// Attributes
  static LPCTSTR GetWndClassName()
  {
    return _T("LISTBOX");
  }

  // for entire listbox
  int GetCount() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (int)::SendMessage(m_hWnd, LB_GETCOUNT, 0, 0L);
  }
  int GetHorizontalExtent() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (int)::SendMessage(m_hWnd, LB_GETHORIZONTALEXTENT, 0, 0L);
  }
  void SetHorizontalExtent(int cxExtent)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ::SendMessage(m_hWnd, LB_SETHORIZONTALEXTENT, cxExtent, 0L);
  }
  int GetTopIndex() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (int)::SendMessage(m_hWnd, LB_GETTOPINDEX, 0, 0L);
  }
  int SetTopIndex(int nIndex)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (int)::SendMessage(m_hWnd, LB_SETTOPINDEX, nIndex, 0L);
  }
  LCID GetLocale() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (LCID)::SendMessage(m_hWnd, LB_GETLOCALE, 0, 0L);
  }
  LCID SetLocale(LCID nNewLocale)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (LCID)::SendMessage(m_hWnd, LB_SETLOCALE, (WPARAM)nNewLocale, 0L);
  }
  int InitStorage(int nItems, UINT nBytes)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (int)::SendMessage(m_hWnd, LB_INITSTORAGE, (WPARAM)nItems, nBytes);
  }
  UINT ItemFromPoint(POINT pt, BOOL& bOutside) const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    DWORD dw = (DWORD)::SendMessage(m_hWnd, LB_ITEMFROMPOINT, 0, MAKELPARAM(pt.x, pt.y));
    bOutside = !!HIWORD(dw);
    return LOWORD(dw);
  }

  // for single-selection listboxes
  int GetCurSel() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(!(GetStyle() & LBS_MULTIPLESEL));
    return (int)::SendMessage(m_hWnd, LB_GETCURSEL, 0, 0L);
  }
  int SetCurSel(int nSelect)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(!(GetStyle() & LBS_MULTIPLESEL));
    return (int)::SendMessage(m_hWnd, LB_SETCURSEL, nSelect, 0L);
  }

  // for multiple-selection listboxes
  int GetSel(int nIndex) const           // also works for single-selection
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (int)::SendMessage(m_hWnd, LB_GETSEL, nIndex, 0L);
  }
  int SetSel(int nIndex, BOOL bSelect = TRUE)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(GetStyle() & LBS_MULTIPLESEL);
    return (int)::SendMessage(m_hWnd, LB_SETSEL, bSelect, nIndex);
  }
  int GetSelCount() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(GetStyle() & LBS_MULTIPLESEL);
    return (int)::SendMessage(m_hWnd, LB_GETSELCOUNT, 0, 0L);
  }
  int GetSelItems(int nMaxItems, LPINT rgIndex) const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(GetStyle() & LBS_MULTIPLESEL);
    return (int)::SendMessage(m_hWnd, LB_GETSELITEMS, nMaxItems, (LPARAM)rgIndex);
  }
  void SetAnchorIndex(int nIndex)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(GetStyle() & LBS_MULTIPLESEL);
    ::SendMessage(m_hWnd, LB_SETANCHORINDEX, nIndex, 0L);
  }
  int GetAnchorIndex() const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(GetStyle() & LBS_MULTIPLESEL);
    return (int)::SendMessage(m_hWnd, LB_GETANCHORINDEX, 0, 0L);
  }

  // for listbox items
  DWORD GetItemData(int nIndex) const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return ::SendMessage(m_hWnd, LB_GETITEMDATA, nIndex, 0L);
  }
  int SetItemData(int nIndex, DWORD dwItemData)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (int)::SendMessage(m_hWnd, LB_SETITEMDATA, nIndex, (LPARAM)dwItemData);
  }
  void* GetItemDataPtr(int nIndex) const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (LPVOID)::SendMessage(m_hWnd, LB_GETITEMDATA, nIndex, 0L);
  }
  int SetItemDataPtr(int nIndex, void* pData)
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return SetItemData(nIndex, (DWORD)(LPVOID)pData);
  }
  int GetItemRect(int nIndex, LPRECT lpRect) const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (int)::SendMessage(m_hWnd, LB_GETITEMRECT, nIndex, (LPARAM)lpRect);
  }
  int GetText(int nIndex, LPTSTR lpszBuffer) const
  {
    ATLASSERT(::IsWindow(m_hWnd));
    return (int)::SendMessage(m_hWnd, LB_GETTEXT, nIndex, (LPARAM)lpszBuffer);
  }
#ifndef _ATL_NO_COM
  BOOL GetTextBSTR(int nIndex, BSTR& bstrText) const
  {
    USES_CONVERSION;
    ATLASSERT(::IsWindow(m_hWnd));
    ATLASSERT(bstrText == NULL);

    int nLen = GetTextLen(nIndex);
    if(nLen == LB_ERR)
      return FALSE;

⌨️ 快捷键说明

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