解决方案 »
- MFC 怎样实现折线图功能
- 测试网络速度一般都怎样做?网络这块没弄过,恳请指点。
- 怎样将一个已经做好的exe直接(不用再去开源代码)转换成OCX控件,供IE调用?
- vc调用webservice返回soap:server
- 有没有什么办法可以实现全局的动态数组?
- ctrl键加上n键的组合键的ascii码是多少?
- VC++2010 下面找不到FlexGrid与日历控件
- 每天定时运行程序又没有较好的办法?
- 怎么用visual c++从磁盘读取一幅bmp图像
- 问题很简单,关于EditView,分很多,高手请进。
- 添加组件时出现“Dialog bar 不支持此接口”
- VC 对话框上使用 ALT加速键 的神奇问题
void CMainFrame::OnTest()
{
CSplitterWindowTutorialView* pVieL = ( CSplitterWindowTutorialView* )m_mainSplitter.GetPane( 0, 0 );
CSplitterWindowTutorialView* pVieR = ( CSplitterWindowTutorialView* )m_mainSplitter.GetPane( 0, 1 );
pVieL->GetDC( )->Rectangle( 0,0,200,200 );
}
我的代码是在:http://www.codeproject.com/Articles/3509/Splitter-Window-Tutorial例子上加的。
如果你要下载这个例子,请注意里面缺少RES文件夹,你只需要拷贝另外一个单文档的RES文件夹后,将里面的文件改名就可以了。
为了能够随时找到窗口,你可以建立MainFrame下的两个成员变量,在MainFrame的适当地方,例如OnShow中添加上面类似的取得窗口句柄的方法,以后,在其他地方可以同个AfxGetMainWnd()找到。
C/C++ code
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
VERIFY(m_wndSplitter.CreateStatic(this,1, 2));
VERIFY(m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLView), CSize(1080, 900), pContext));
VERIFY(m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CRView), CSize(100, 370), pContext));
return true;
}
网上听了很多办法都无法奏效,程序可以运行,但是运行过程中还是会出错。因为我的左边窗口的是厂家的摄像机ocx控件和其他另外一个厂家的OCX控件,右边是对应的常规操作控件。所以运行程序的时候,就会报错。
估计是和串口什么的搞上了,归根到底是两个窗口没有很好的互相通信。
Debug Assertion Failed !
Program: C:\Test\Debug\Test.exe
File: strcore.cpp
Line: 519
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
在CMainFrame的头文件中定义CLView和CRView的指针:
CLView *m_pLView ;
CRView *m_pRView ;
在CMainFrame的.cpp文件中:
...VERIFY(m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLView), CSize(1080, 900), pContext));m_pLView = (CLView *)m_wndSplitter.GetPane(0, 0);VERIFY(m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CRView), CSize(100, 370), pContext));m_pRView = (CRView *)m_wndSplitter.GetPane(0, 1);
...这样你在其他地方要使用这两个句柄的话,
CMainFrame *pFrm = (CMainFrame *)AfxGetMainWnd();
pFrm->m_pLView;
pFrm->m_pRView ;
就可以了
CMyDoc *pDoc = GetDocument();
CLView *pLView = NULL;
POSITION posi = pDoc->GetFirstViewPosition();
while(posi!=NULL)
{
CView *pView = pDoc->GetNextView(posi);
if(pView->IsKindOf(RUNTIME_CLASS(CLView)) )
{
pLView = (CLView*)pView;//在右侧视类中获取左侧视类CLView指针
break;
}
}
CMainFrame *pMain=(CMainFrame *)AfxGetMainWnd();
CLView *pLView=(CTestView *)pMain->m_wndSplitter.GetPane(0,0);这样就可以调用:pLView->m_QQ2010另外需要添加头文件#include "MainFrm.h"
#include "LView.h"
错误信息
Debug Assertion Failed !
Program: C:\Test\Debug\Test.exe
File: winsplit.cpp
Line: 2329 For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts. (Press Retry to debug the application)4#的朋友的调用方案
在其他地方要使用这两个句柄的话,
CMainFrame *pFrm = (CMainFrame *)AfxGetMainWnd();
pFrm->m_pLView;
pFrm->m_pRView ;
就可以了6#的朋友的调用方案在CRView类中需要调用m_QQ2010的地方添加:
CMainFrame *pMain=(CMainFrame *)AfxGetMainWnd();
CLView *pLView=(CTestView *)pMain->m_wndSplitter.GetPane(0,0);这样就可以调用:pLView->m_QQ2010怎么办啊?
VS2010,MFC程序中添加了这段代码就报 Debug Assertion Failed! .........winsplit.cpp Line:367 ......
求大神帮忙解决:
CSplitterWnd m_wndSplitter;
CSplitterWnd wndSplitter1;
//1,创建2行1列的窗口
if ( m_wndSplitter.CreateStatic(this, 2, 1 ) == NULL)
return FALSE;
//2,将CAboutWidow放在1行0列处
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CAboutWidow),CSize(700, 100)/*size3*/,pContext); //创建一个1行2列长度窗口
if(wndSplitter1.CreateStatic(&m_wndSplitter,1,2,WS_CHILD|WS_VISIBLE | WS_BORDER,m_wndSplitter.IdFromRowCol(0, 0))==NULL)
return FALSE;
wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CTcfConfigView),CSize(200, 300)/*size1*/,pContext);
wndSplitter1.CreateView(0,1,RUNTIME_CLASS(CEntryView),CSize(500, 300)/*size2*/,pContext);