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