📄 atlcontrols.h
字号:
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 + -