zswking 发表于 2005-8-15 16:40:00

请高手出招!CAcUiDockControlBar问题!

用CAcUiDockControlBar向CAD中加入自己的ControlBar出现问题,请各位高手急救!<BR>
<P>我创建了一个基于CAcUiDockControlBar的类,在类中创建自己的控件。加载到CAD后,让其自己停靠,但是停靠后的工具条高度无法所到。另外加载后CAD出现不停闪烁现象,请高手出招!</P>
<P>&nbsp;class CLayerDockControlBar : public CAcUiDockControlBar&nbsp; <BR>{<BR>&nbsp;DECLARE_DYNAMIC(CLayerDockControlBar)<BR>public:<BR>&nbsp;CLayerDockControlBar();<BR>&nbsp;<BR>public:<BR>&nbsp;virtual BOOL Create(CWnd* pParent, LPCSTR lpszTitle);<BR>&nbsp;<BR>protected:<BR>&nbsp;afx_msg int OnCreate (LPCREATESTRUCT lpCreateStruct);<BR>&nbsp;afx_msg void OnSize(UINT nType, int cx, int cy);<BR>&nbsp;DECLARE_MESSAGE_MAP()<BR>&nbsp;&nbsp;<BR>&nbsp;virtual void SizeChanged(CRect *lpRect, BOOL bFloating, int flags);<BR>public:<BR>&nbsp;CLayerManageBar *m_pWndLayerBar;<BR>};</P>
<P>IMPLEMENT_DYNAMIC(CLayerDockControlBar, CAcUiDockControlBar)</P>
<P>BEGIN_MESSAGE_MAP(CLayerDockControlBar, CAcUiDockControlBar)<BR>//{{AFX_MSG_MAP(CLayerDockControlBar)<BR>ON_WM_CREATE()<BR>ON_WM_SIZE()<BR>//}}AFX_MSG_MAP<BR>END_MESSAGE_MAP()</P>
<P>static CLSID clsCLayerDockControlBar ={&nbsp; 0x45d8e5de, 0xaa69, 0x4611, { 0x8f, 0xeb, 0xb2, 0xa6, 0xbe, 0xe8, 0xfb, 0x47 } } ;</P>
<P>CLayerDockControlBar::CLayerDockControlBar() <BR>: CAcUiDockControlBar() <BR>{<BR>&nbsp;m_pWndLayerBar = NULL;<BR>}</P>
<P>BOOL CLayerDockControlBar::Create(CWnd* pParent, LPCSTR lpszTitle) <BR>{<BR>&nbsp;CString strWndClass;<BR>&nbsp;strWndClass = AfxRegisterWndClass (CS_DBLCLKS, LoadCursor (NULL,&nbsp; IDC_ARROW));<BR>&nbsp;CRect rect (0, 0, 158, 300);<BR>&nbsp;if ( !CAcUiDockControlBar::Create(<BR>&nbsp;&nbsp;strWndClass,<BR>&nbsp;&nbsp;lpszTitle,<BR>&nbsp;&nbsp;WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,<BR>&nbsp;&nbsp;rect,<BR>&nbsp;&nbsp;pParent, IDC_TOOLBAR_LAYERMANAGER<BR>&nbsp;&nbsp;))<BR>&nbsp;&nbsp;return (FALSE);<BR>&nbsp;SetToolID (&amp;clsCLayerDockControlBar) ;<BR>&nbsp;return (TRUE);&nbsp;&nbsp;<BR>}</P>
<P>int CLayerDockControlBar::OnCreate (LPCREATESTRUCT lpCreateStruct) <BR>{<BR>&nbsp;if ( CAcUiDockControlBar::OnCreate (lpCreateStruct) == -1 )<BR>&nbsp;&nbsp;return (-1);<BR>&nbsp;<BR>&nbsp;CAcModuleResourceOverride resourceOverride;<BR>&nbsp;m_pWndLayerBar = new CLayerManageBar;<BR>&nbsp;if (!m_pWndLayerBar-&gt;Create(_T("Layer Manager"), this, CSize(200,300),TRUE,123))<BR>&nbsp;{<BR>&nbsp;&nbsp;return -1;<BR>&nbsp;}<BR>&nbsp;m_pWndLayerBar-&gt;SetBarStyle(m_pWndLayerBar-&gt;GetBarStyle() |<BR>&nbsp;&nbsp;CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);<BR>&nbsp;<BR>&nbsp;m_pWndLayerBar-&gt;AddView(RUNTIME_CLASS(CWndSliderView));</P>
<P>&nbsp;((CWndSliderView *)m_pWndLayerBar-&gt;GetActiveView())-&gt;CreateView("0 LayView", RUNTIME_CLASS(CLayerManagerView), NULL);<BR>&nbsp;((CWndSliderView *)m_pWndLayerBar-&gt;GetActiveView())-&gt;CreateView("1 LayView", RUNTIME_CLASS(CLayerManagerView), NULL);</P>
<P>&nbsp;return (0);<BR>}</P>
<P>void CLayerDockControlBar::OnSize(UINT nType, int cx, int cy)<BR>{<BR>&nbsp;CAcUiDockControlBar::OnSize(nType, cx, cy);<BR>&nbsp;if(m_pWndLayerBar)<BR>&nbsp;{<BR>&nbsp;&nbsp;if(!IsFloating())<BR>&nbsp;&nbsp;&nbsp;m_pWndLayerBar-&gt;MoveWindow(0, 20, cx, cy-20);<BR>&nbsp;}<BR>}</P>
<P>void CLayerDockControlBar::SizeChanged(CRect *lpRect, BOOL bFloating, int flags)<BR>{<BR>&nbsp;CAcModuleResourceOverride resourceOverride;<BR>&nbsp;if (m_pWndLayerBar != NULL)<BR>&nbsp;{<BR>&nbsp;&nbsp;m_pWndLayerBar-&gt;MoveWindow(0,20,lpRect-&gt;right, lpRect-&gt;bottom-20);<BR>&nbsp;}<BR>}</P>
<P>以下为调用部份。</P>
<P>static CLayerDockControlBar *dockBar = NULL;</P>
<P>void LayerManager()<BR>{<BR>&nbsp;CAcModuleResourceOverride res;<BR>&nbsp;<BR>&nbsp;if (dockBar == NULL)<BR>&nbsp;{<BR>&nbsp;&nbsp;dockBar = new CLayerDockControlBar;<BR>&nbsp;&nbsp;dockBar-&gt;Create(acedGetAcadFrame(), "MyDockBar");<BR>&nbsp;&nbsp;dockBar-&gt;SetWindowText( _T("HELLO"));<BR>&nbsp;}<BR>&nbsp;dockBar-&gt;EnableDocking(CBRS_ALIGN_ANY);<BR>&nbsp;acedGetAcadFrame()-&gt;EnableDocking(CBRS_ALIGN_ANY);<BR>&nbsp;acedGetAcadFrame()-&gt;DockControlBar(dockBar, AFX_IDW_DOCKBAR_LEFT);<BR>&nbsp;acedGetAcadFrame()-&gt;ShowControlBar(dockBar, TRUE, TRUE);<BR>&nbsp;SetActiveWindow(acedGetAcadFrame()-&gt;m_hWnd);<BR>}</P>
页: [1]
查看完整版本: 请高手出招!CAcUiDockControlBar问题!