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

📄 flatheaderctrl.h

📁 版本更新了一下
💻 H
字号:
////////////////////////////////////////////////////////////////////////////
//  File:       CFlatHeaderCtrl.h
//  Version:    1.1.0.0
//
//  Author:     Maarten Hoeben
//  E-mail:     hoeben@nwn.com
//
//  Specification of the CFlatHeaderCtrl and associated classes.
//
//  You are free to use, distribute or modify this code
//  as long as the header is not removed or modified.
//
////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_FLATHEADERCTRL_H__2162BEB4_A882_11D2_B18A_B294B34D6940__INCLUDED_)
#define AFX_FLATHEADERCTRL_H__2162BEB4_A882_11D2_B18A_B294B34D6940__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// FlatHeaderCtrl.h : header file
//
#ifdef DMARS
#define HDITEM HD_ITEM
#define HDHITTESTINFO  _HD_HITTESTINFO
#endif
#include <afxtempl.h>
#include <tchar.h>

#include "MemDC.h"

#define FLATHEADER_TEXT_MAX 80

/////////////////////////////////////////////////////////////////////////////
// CFlatHeaderCtrl window

class CFlatHeaderCtrl;
class CFHDragWnd;

#define FH_PROPERTY_SPACING         1
#define FH_PROPERTY_ARROW           2
#define FH_PROPERTY_STATICBORDER    3

typedef struct _HD_ITEMEX
{
    _HD_ITEMEX() :
        m_iMinWidth(0),
        m_iMaxWidth(-1)
    {}

    INT     m_iMinWidth;
    INT     m_iMaxWidth;

} HDITEMEX, FAR * LPHDITEMEX;

class CFlatHeaderCtrl : public CHeaderCtrl
{
    friend class CFHDragWnd;

    DECLARE_DYNCREATE(CFlatHeaderCtrl)

// Construction
public:
    CFlatHeaderCtrl();

// Attributes
public:
    BOOL    ModifyProperty(WPARAM wParam, LPARAM lParam);

    BOOL    GetItemEx(INT iPos, HDITEMEX* phditemex) const;
    BOOL    SetItemEx(INT iPos, HDITEMEX* phditemex);

    void    SetSortColumn(INT iPos, BOOL bSortAscending);
    INT     GetSortColumn(BOOL* pbSortAscending = NULL);

// Overrides
public:
    virtual ~CFlatHeaderCtrl();

    virtual void DrawItem(LPDRAWITEMSTRUCT);
    virtual void DrawItem(CDC* pDC, CRect rect, HDITEM hditem, BOOL bSort, BOOL bSortAscending);

    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CFlatHeaderCtrl)
    //}}AFX_VIRTUAL

// Implementation
protected:
    //BOOL          m_bNoFlicker;
    INT             m_iSpacing;
    SIZE            m_sizeArrow;
    BOOL            m_bStaticBorder;

    INT             m_iHotIndex;
    INT             m_iHotOrder;
    BOOL            m_bHotItemResizable;
    HDHITTESTINFO   m_hdhtiHotItem;
    HDITEM          m_hditemHotItem;
    TCHAR           m_szHotItemText[FLATHEADER_TEXT_MAX];

    BOOL            m_bResizing;

    INT             m_iHotDivider;
    COLORREF        m_crHotDivider;

    BOOL            m_bDragging;
    CFHDragWnd      *m_pDragWnd;

    UINT            m_nClickFlags;
    CPoint          m_ptClickPoint;

    BOOL            m_bSortAscending;
    INT             m_iSortColumn;
    CArray<HDITEMEX, HDITEMEX> m_arrayHdrItemEx;

    COLORREF        m_cr3DHighLight;
    COLORREF        m_cr3DShadow;
    COLORREF        m_cr3DFace;
    COLORREF        m_crText;

    void            DrawCtrl(CDC* pDC);
    INT             DrawImage(CDC* pDC, CRect rect, HDITEM hditem, BOOL bRight);
    INT             DrawBitmap(CDC* pDC, CRect rect, HDITEM hditem, CBitmap* pBitmap,
                               BITMAP* pBitmapInfo, BOOL bRight);
    INT             DrawText (CDC* pDC, CRect rect, HDITEM hditem);
    INT             DrawArrow(CDC* pDC, CRect rect, BOOL bSortAscending, BOOL bRight);

// Generated message map functions
protected:
    //{{AFX_MSG(CFlatHeaderCtrl)
    afx_msg LRESULT OnInsertItem(WPARAM wparam, LPARAM lparam);
    afx_msg LRESULT OnDeleteItem(WPARAM wparam, LPARAM lparam);
    afx_msg LRESULT OnSetHotDivider(WPARAM wparam, LPARAM lparam);
    afx_msg LRESULT OnLayout(WPARAM wparam, LPARAM lparam);
    afx_msg UINT OnNcHitTest(CPoint point);
    afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
    afx_msg void OnPaint();
    afx_msg void OnSysColorChange();
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////
// CFHDragWnd window

#define FHDRAGWND_CLASSNAME _T("MFCFHDragWnd")

class CFHDragWnd : public CWnd
{
// Construction
public:
    CFHDragWnd();

// Attributes
public:

// Operations
public:

// Overrrides
protected:
    // Drawing
    virtual void OnDraw(CDC* pDC);

    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CFHDragWnd)
    protected:
    virtual void PostNcDestroy();
    //}}AFX_VIRTUAL

// Implementation
public:
    virtual ~CFHDragWnd();
    virtual BOOL Create(CRect rect, CFlatHeaderCtrl* pFlatHeaderCtrl, INT iItem);

protected:
    CFlatHeaderCtrl *m_pFlatHeaderCtrl;
    INT             m_iItem;

    // Generated message map functions
protected:
    //{{AFX_MSG(CFHDragWnd)
    afx_msg void OnPaint();
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_FLATHEADERCTRL_H__2162BEB4_A882_11D2_B18A_B294B34D6940__INCLUDED_)

⌨️ 快捷键说明

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