#pragma once #include "singleton.h" #include class CBimPalette : public CAdUiPalette { DECLARE_DYNAMIC(CBimPalette) public: typedef std::map IDMap; public: CBimPalette(); ~CBimPalette(); void SetObjectIds(const AcDbObjectIdArray &ids); private: virtual void GetFloatingMinSize(long *pnMinWidth, long *pnMinHeight); DECLARE_MESSAGE_MAP() afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos); afx_msg void OnPaint(); afx_msg void OnBtnClickAdd(); afx_msg void OnBtnClickMod(); afx_msg void OnBtnClickDel(); afx_msg void OnBtnClickImp(); afx_msg void OnBtnClickExp(); afx_msg void OnComboBoxSelChange(); afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); void CalcCtrlPosition(CRect &rc); void RefreshList(); void GetSelIDs(AcDbObjectIdArray &ids); bool GetSelBimData(CString &name, CString &value); private: CAcUiComboBox *m_pComboBox; CAcUiBitmapButton *m_pBtnAdd; CAcUiBitmapButton *m_pBtnMod; CAcUiBitmapButton *m_pBtnDel; CAcUiBitmapButton *m_pBtnImp; CAcUiBitmapButton *m_pBtnExp; CAcUiListCtrl *m_pListCtrl; CFont m_font; CFont m_fontCombo; AcDbObjectIdArray m_ids; IDMap m_mapIDs; }; class CBimPaletteSet: public CAdUiPaletteSet { DECLARE_DYNAMIC(CBimPaletteSet); public: CBimPaletteSet(); ~CBimPaletteSet(); bool CreatePaletteSet(LPCTSTR pszTitle); void SetObjectIds(const AcDbObjectIdArray &ids); DECLARE_MESSAGE_MAP() afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnDestroy(); protected: virtual bool OnClosing(); virtual void GetFloatingMinSize(long *plMinWidth, long *plMinHeight); virtual void SizeChanged(CRect *lpRect, BOOL bFloating, int flags); virtual void GetMinimumSize(CSize &size); virtual void GetMaximumSize(CSize &size); protected: virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz); // 子类化DockBar窗口 BOOL SubclassDockBar(HWND hWnd); // 反子类化DockBar窗口* void UnsubclassDockBar(); // 检测点击到边框的位置 UINT OnTrackHitTest(CPoint pt); // 获取点中边框的位置尺寸 UINT OnGetTrackRect(UINT nDockOrHit, CRect& rc); // 启动拖动操作 void OnStartTracking(UINT nHit); // 拖动更新过程 void OnTrackUpdate(CPoint pt); // 停止拖动操作 void OnStopTracking(); // 拖动更新显示 void OnTrackPaint(); // 拖动状态 BOOL m_bTracking; // 拖动边框位置尺寸 CRect m_rcTracking; // palette CBimPalette *m_pBimPalette; private: // 被子类化的DockBar窗口 HWND m_hDockBar; // 子类化DockBar的窗口过程 WNDPROC m_pfnOldProc; // 被子类化DockBar新窗口过程实现 LRESULT OnDockBarProc(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam); // 被子类化DockBar新窗口过程函数 static LRESULT CALLBACK DockBarProc(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam); static CBimPaletteSet *m_pMySelft; }; typedef Singleton g_bimPaletteSet;