#ifndef _FMTBAR_H
#define _FMTBAR_H

#define FBN_BODYHASFOCUS    8001
#define FBN_BODYSETFOCUS    8002
#define FBN_GETMENUFONT     8003

class CFmtBar
{
public:
   	CFmtBar(BOOL fSep);
	~CFmtBar();

    ULONG AddRef();
    ULONG Release();

    HRESULT Init(HWND hwndParent, int iddlg);
    HRESULT SetCommandTarget(LPOLECOMMANDTARGET pCmdTarget);
    HRESULT OnWMCommand(HWND hwnd, int id, WORD wCmd);
    HRESULT Update();

    HRESULT Show();
    HRESULT Hide();

    HRESULT TranslateAcclerator(LPMSG lpMsg);
    HRESULT GetWindow(HWND *pHwnd);

    static LRESULT CALLBACK ExtWndProc(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
    static LRESULT CALLBACK EditSubProc(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
    static LRESULT CALLBACK ComboBoxSubProc(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
    static LRESULT CALLBACK RebarSubProc(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
    static INT CALLBACK ExtEnumFontNamesProcEx(ENUMLOGFONTEX *plf, NEWTEXTMETRICEX *ptm, INT nFontType, LPARAM lParam);

private:
    IOleCommandTarget   *m_pCmdTarget;
    ULONG               m_cRef;
    HWND                m_hwnd,
                        m_hwndParent,
                        m_hwndToolbar,
                        m_hwndName,
                        m_hwndSize,
                        m_hwndRebar,
                        m_hwndTT;

    HMENU               m_hmenuColor,
                        m_hmenuTag;
    WNDPROC             m_wndprocEdit,
                        m_wndprocNameComboBox,
                        m_wndprocSizeComboBox,
                        m_wndprocRebar;
    HBITMAP             m_hbmName;
    BOOL                m_fDestroyTagMenu   :1,
                        m_fVisible          :1,
                        m_fSep              :1;
    int                 m_idd;
    HIMAGELIST          m_himlHot,
                        m_himl;

    HBITMAP LoadDIBBitmap(int id);
    VOID AddToolTip(HWND hwndToolTips, HWND hwnd, UINT idRsrc);
    DWORD FlipColor(DWORD rgb);
    HRESULT HrShowTagMenu(POINT pt);
    HRESULT HrInitTagMenu();
    INT XFontSizeCombo(HDC hdc);
    HRESULT CheckColor();

    INT EnumFontNamesProcEx(ENUMLOGFONTEX *plf, NEWTEXTMETRICEX *ptm, INT nFontType);

    // format bar
    void FillFontNames();
    void FillSizes();

    HRESULT ExecCommand(UINT uCmDId, DWORD dwOpt, VARIANTARG  *pvaIn);
    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

    // message handling
    void OnNCDestroy();
    HRESULT OnNCCreate(HWND hwnd);
    void WMNotify(WPARAM wParam, NMHDR* pnmhdr);

    // owner draw
    void OnDrawItem(LPDRAWITEMSTRUCT pdis);
    void OnMeasureItem(LPMEASUREITEMSTRUCT pmis);
    void ComboBox_WMDrawItem(LPDRAWITEMSTRUCT pdis);

    BOOL FBodyHasFocus();
    void SetBodyFocus();

    HMENU hmenuGetStyleTagMenu();

    HRESULT AttachWin();
    
    HIMAGELIST _CreateToolbarBitmap(int idb, int cx);
    HRESULT _SetToolbarBitmaps();    
    HRESULT _FreeImageLists();
    
};



typedef CFmtBar *LPFORMATBAR;

HRESULT HrCreateFormatBar(HWND hwndParent, int iddlg, BOOL fSep, LPFORMATBAR *ppFmtBar);

#endif  // _FMTBAR_H