乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 12|回复: 0

用CAcUiDockControlBar向CAD中加入自己的ControlBar出现问题,请各位高手急救!

[复制链接]

2

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
13
发表于 2005-8-15 16:23:00 | 显示全部楼层 |阅读模式
我创建了一个基于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(200,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);
}
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 12:05 , Processed in 0.264014 second(s), 54 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表