请高手出招!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:

ncreate (lpcreatestruct lpcreatestruct)
{
if ( cacuidockcontrolbar:

ncreate (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:

nsize(uint ntype, int cx, int cy)
{
cacuidockcontrolbar:

nsize(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);
}