![]() |
请高手出招!cacuidockcontrolbar问题!
请高手出招!cacuidockcontrolbar问题!
请高手出招!cacuidockcontrolbar问题! 用cacuidockcontrolbar向cad中加入自己的controlbar出现问题,请各位高手急救! 我创建了一个基于cacuidockcontrolbar的类,在类中创建自己的控件。加载到cad后,让其自己停靠,但是停靠后的工具条高度无法所到。另外加载后cad出现不停闪烁现象,请高手出招! class clayerdockcontrolbar : public cacuidockcontrolbar { declare_dynamic(clayerdockcontrolbar) public: clayerdockcontrolbar(); public: virtual bool create(cwnd* pparent, lpcstr lpsztitle); protected: afx_msg int oncreate (lpcreatestruct lpcreatestruct); afx_msg void onsize(uint ntype, int cx, int cy); declare_message_map() virtual void sizechanged(crect *lprect, bool bfloating, int flags); public: clayermanagebar *m_pwndlayerbar; }; implement_dynamic(clayerdockcontrolbar, cacuidockcontrolbar) begin_message_map(clayerdockcontrolbar, cacuidockcontrolbar) //{{afx_msg_map(clayerdockcontrolbar) on_wm_create() on_wm_size() //}}afx_msg_map end_message_map() static clsid clsclayerdockcontrolbar ={ 0x45d8e5de, 0xaa69, 0x4611, { 0x8f, 0xeb, 0xb2, 0xa6, 0xbe, 0xe8, 0xfb, 0x47 } } ; clayerdockcontrolbar::clayerdockcontrolbar() : cacuidockcontrolbar() { m_pwndlayerbar = null; } bool clayerdockcontrolbar::create(cwnd* pparent, lpcstr lpsztitle) { cstring strwndclass; strwndclass = afxregisterwndclass (cs_dblclks, loadcursor (null, idc_arrow)); crect rect (0, 0, 158, 300); if ( !cacuidockcontrolbar::create( strwndclass, lpsztitle, ws_visible | ws_child | ws_clipchildren, rect, pparent, idc_toolbar_layermanager )) return (false); settoolid (&clsclayerdockcontrolbar) ; return (true); } int clayerdockcontrolbar::oncreate (lpcreatestruct lpcreatestruct) { if ( cacuidockcontrolbar::oncreate (lpcreatestruct) == -1 ) return (-1); cacmoduleresourceoverride resourceoverride; m_pwndlayerbar = new clayermanagebar; if (!m_pwndlayerbar->create(_t("layer manager"), this, csize(,300),true,123)) { return -1; } m_pwndlayerbar->setbarstyle(m_pwndlayerbar->getbarstyle() | cbrs_tooltips | cbrs_flyby | cbrs_size_dynamic); m_pwndlayerbar->addview(runtime_class(cwndsliderview)); ((cwndsliderview *)m_pwndlayerbar->getactiveview())->createview("0 layview", runtime_class(clayermanagerview), null); ((cwndsliderview *)m_pwndlayerbar->getactiveview())->createview("1 layview", runtime_class(clayermanagerview), null); return (0); } void clayerdockcontrolbar::onsize(uint ntype, int cx, int cy) { cacuidockcontrolbar::onsize(ntype, cx, cy); if(m_pwndlayerbar) { if(!isfloating()) m_pwndlayerbar->movewindow(0, 20, cx, cy-20); } } void clayerdockcontrolbar::sizechanged(crect *lprect, bool bfloating, int flags) { cacmoduleresourceoverride resourceoverride; if (m_pwndlayerbar != null) { m_pwndlayerbar->movewindow(0,20,lprect->right, lprect->bottom-20); } } 以下为调用部份。 static clayerdockcontrolbar *dockbar = null; void layermanager() { cacmoduleresourceoverride res; if (dockbar == null) { dockbar = new clayerdockcontrolbar; dockbar->create(acedgetacadframe(), "mydockbar"); dockbar->setwindowtext( _t("hello")); } dockbar->enabledocking(cbrs_align_any); acedgetacadframe()->enabledocking(cbrs_align_any); acedgetacadframe()->dockcontrolbar(dockbar, afx_idw_dockbar_left); acedgetacadframe()->showcontrolbar(dockbar, true, true); setactivewindow(acedgetacadframe()->m_hwnd); } |
所有的时间均为北京时间。 现在的时间是 12:13 PM. |