几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   ObjectARX(C++) (http://www.dimcax.com/hust/forumdisplay.php?f=34)
-   -   请高手出招!cacuidockcontrolbar问题! (http://www.dimcax.com/hust/showthread.php?t=8256)

yang686526 2009-04-18 10:10 PM

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