如题
解决方案 »
- Windows Copy File 的实现
- 动态更改CPaintDC 大小,不能实现
- Error executing cl.exe,为什么?
- 我现在身居重庆,很想到你们那边去发展,我在一家ERP公司里用JSP做过医药管理系统和餐饮管理系统,和图书管理系统,工作有两年多了,也曾
- 有关软件学院问题
- 好消息,卖书.
- 如何把CButton的按钮,放到继承CView的视窗上来?
- 一个简单的问题:在VC中编写控件时,我只想象在VB中那样,只是往界面上加多个控件来组成一个大控件。
- 为什么这样建立注册表的子键会失败?
- 串口通信的同步通信,异步通信的含义,及差别?
- 》》》线程模型Single和Apartment有什么区别??
- 在线等待!100相送!
虽然例子中有TabbedView和XMLSetting,但是TabbedView中用的是CBCGPTabView可以使用View
利用文档试图结构创建的,不能够实现停靠的功能,而XMLSetting的哪个是从
CBCGPDockingControlBar继承下来,但是Tab里面放入的是控件,而不是View现在我自己做了修改。BCGDevStudioExample里面的COutputViewBar类中加入变量
CBCGPTabWnd m_wndTabs;
在COutputViewBar里的OnCreate()里加入这些.加入这些后是可以实现可停靠,而且View也可以接受MainFrame的菜单命令。但是如果加入两个Tab,而且在浮动的,在Tab间互相切换就会出现问题。我跟踪到是CView里面的一个ASSERT(IsChild(wnd,View));出现问题,这个ASSERT要验证当前点击的View是否是主窗口的子窗口。但是我不明白的是。虽然
浮动的时候,创建的是CMiniFrameWnd的是View的父窗口,但是这个CMiniFrameWnd的父窗口不也是MainFrame吗?那按道理被点击的View也是MainFrame的子窗口才对呀。
为什么这个地方就不对了呢?不然用spy++看看。
CView* pView = DYNAMIC_DOWNCAST (CView, RUNTIME_CLASS(CTestView).CreateObject ());
ASSERT_VALID (pView);
CDocument* pDoc = DYNAMIC_DOWNCAST (CDocument, RUNTIME_CLASS(CTestDoc).CreateObject ());
CCreatContext nContext;
nContex.m_pNewViewClass =RUNTIME_CLASS(CTestView);
nContex.m_pCurrentDoc =pDoc;
nContex.m_pCurrentFrame =(CFrameWnd*)AfxGetMainWnd();
if(!pView->Create (NULL, _T(""), WS_CHILD | WS_VISIBLE,
CRect (0, 0, 0, 0), &m_wndTabs, (UINT) -1, nContext))
if (pDoc != NULL)
{
ASSERT_VALID (pDoc);
BOOL bFound = FALSE;
for (POSITION pos = pDoc->GetFirstViewPosition (); !bFound && pos != NULL;)
{
if (pDoc->GetNextView (pos) == pView)
{
bFound = TRUE;
}
} if (!bFound)
{
pDoc->AddView (pView);
}
} m_wndTabs.InsertTab (pView, "Test", -1);
解决的办法,在CMiniFrameWnd,创建后,再设置成为他的descendant.具体的代码和原因,可以看一下MFC下的BARDOCK.CPP源文件。