Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

250 lines
5.6 KiB
C++

// PropTreeItem.h
//
// Copyright (C) 1998-2001 Scott Ramsay
// sramsay@gonavi.com
// http://www.gonavi.com
//
// This material is provided "as is", with absolutely no warranty expressed
// or implied. Any use is at your own risk.
//
// Permission to use or copy this software for any purpose is hereby granted
// without fee, provided the above notices are retained on all copies.
// Permission to modify the code and to distribute modified code is granted,
// provided the above notices are retained, and a notice that the code was
// modified is included with the above copyright notice.
//
// If you use this code, drop me an email. I'd like to know if you find the code
// useful.
#ifndef __CPropITEM_H__
#define __CPropITEM_H__
#ifdef GRID_EXPORT
#define THVAC_UIAPI __declspec( dllexport )
#else
#define THVAC_UIAPI __declspec( dllimport )
#endif
// 定义消息,在所在对话框中这样接受:
// .h afx_msg void ButtonClick(WPARAM iParam1, LPARAM iParam2);
// .cpp ON_MESSAGE(WM_EBTNCLICK, ButtonClick)
#define WM_EBTNCLICK 1980
#define WM_EBKILLFOCUS 1983
#define IDC_BUTTON 1981
#define BUTTON_WIDTH 16 // 按钮宽度
#define IDC_SPINCTRL 2008
#define SPINCTRL_WIDTH 15 // Sipn
class CPropCtrl;
enum eItemType{
ITEMTYPE_NULL = 0,
ITEMTYPE_EDIT = 1,
ITEMTYPE_COMBOBOX = 2,
ITEMTYPE_STATIC = 3,
ITEMTYPE_COLOR = 4
};
class THVAC_UIAPI CPropItem
{
public:
CPropItem();
virtual ~CPropItem();
public:
// TreeItem states
BOOL IsExpanded();
BOOL IsSelected();
BOOL IsChecked();
BOOL IsReadOnly();
BOOL IsActivated();
BOOL IsHide();
void HasSpinCtrl(BOOL bHas = TRUE);
void CreateSpinCtrl(CWnd* pWnd);
void HasButton(BOOL bHas = TRUE);
void CreateButton(CWnd* pWnd);
void ShowButton(BOOL bShow = TRUE);
void ShowSpinCtrl(BOOL bShow = TRUE);
void CreateEdit( CWnd* pWnd );
void Select(BOOL bSelect = TRUE);
void Expand(BOOL bExpand = TRUE);
void Check(BOOL bCheck = TRUE);
void ReadOnly(BOOL bReadOnly = TRUE);
void Hide(BOOL bHide = TRUE);
// Returns true if the item has a checkbox
BOOL IsCheckBox();
// Pass in true, for the item to have a checkbox
void HasCheckBox(BOOL bCheckbox = TRUE);
// Returns TRUE if the point is on the expand button
BOOL HitExpand(const POINT& pt);
// Returns TRUE if the point is on the check box
BOOL HitCheckBox(const POINT& pt);
// Returns TRUE if the point is on the Button
BOOL HitButton(const POINT& pt);
// Returns TRUE if the item is on the root level. Root level items don't have attribute areas
BOOL IsRootLevel();
// Returns the total height of the item and all its children
LONG GetTotalHeight();
// Set the items label text
void SetLabelText(LPCTSTR sLabel);
// Return the items label text
LPCTSTR GetLabelText();
// Set the items info (description) text
void SetInfoText(LPCTSTR sInfo);
// Get the items info (description) text
LPCTSTR GetInfoText();
// Set the item's ID
void SetCtrlID(UINT nCtrlID);
// Return the item's ID
UINT GetCtrlID();
// draw the item's non attribute area
LONG DrawItem(CDC* pDC, const RECT& rc, LONG x, LONG y);
// call to mark attribute changes
void CommitChanges();
// call to activate item attribute
void Activate();
//
// Overrideables
//
// The attribute area needs drawing
virtual void DrawAttribute(CDC* pDC, const RECT& rc);
// Return the height of the item
virtual LONG GetHeight();
// Retrieve the item's attribute value
virtual LPARAM GetItemValue();
// Set the item's attribute value
virtual void SetItemValue(LPARAM lParam);
// Called when attribute area has changed size
virtual void OnMove();
// Called when the item needs to refresh its data
virtual void OnRefresh();
// Called when the item needs to commit its changes
virtual void OnCommit();
// Called to activate the item
virtual void OnActivate();
//
// Usually only CPropCtrl should calls these
//
void SetPropOwner(CPropCtrl* pProp);
CPropCtrl* GetPropOwner();
// Return the location of the PropItem
const POINT& GetLocation();
// TreeItem link pointer access
CPropItem* GetParent();
CPropItem* GetSibling();
CPropItem* GetChild();
CPropItem* GetNextVisible();
void SetParent(CPropItem* pParent);
void SetSibling(CPropItem* pSibling);
void SetChild(CPropItem* pChild);
void SetNextVisible(CPropItem* pVis);
public:
// TreeItem attribute size
CRect m_rc;
int m_nItemType;
protected:
// CPropCtrl class that this class belongs
CPropCtrl* m_pProp;
// TreeItem label name
CString m_sLabel;
// Descriptive info text
CString m_sInfo;
// TreeItem location
CPoint m_loc;
// user defined LPARAM value
LPARAM m_lParam;
// ID of control item (should be unique)
UINT m_nCtrlID;
// hide the item
BOOL m_bHide;
// has a button
BOOL m_bHasBt;
// has a SpinCtrl
BOOL m_bHasSpinCtrl;
private:
enum TreeItemStates
{
TreeItemSelected = 0x00000001,
TreeItemExpanded = 0x00000002,
TreeItemCheckbox = 0x00000004,
TreeItemChecked = 0x00000008,
TreeItemActivated = 0x00000010,
TreeItemReadOnly = 0x00000020,
};
// TreeItem state
DWORD m_dwState;
// TRUE if item is activated
BOOL m_bActivated;
// TRUE if item has been commited once (activation)
BOOL m_bCommitOnce;
// Rectangle position of the expand button (if contains one)
CRect m_rcExpand;
// Rectangle position of the check box (if contains one)
CRect m_rcCheckbox;
// Rectangle position of the Button box (if Has)
CRect m_rcButton;
// Rectangle position of the SpinCtrl box (if Has)
CRect m_rcSpinCtrl;
// link pointers
CPropItem* m_pParent;
CPropItem* m_pSibling;
CPropItem* m_pChild;
CPropItem* m_pVis;
};
#endif // __CPropITEM_H__