对话框带分割条,且左右视图都从DLL中到出,不知有高手做过没有?
解决方案 »
- 单片机与PC机通过RS232通信,发送数据1接收到的却是EF,
- 橡皮筋应用问题!
- MFC窗体分割报错。。请教高人~!
- 希望当CTreeCtrl有Item被选择时触发相应的函数,请问如何实现?
- 请大侠们看看!! 下面是我的设置共享目录的代码,但是总返回123错误代码
- 如何给EDIT框加背景色?..........急用立即给分
- 分随大侠要!!!!只要用VC写一段代码用于读写PARADOX的数据库
- 帮我分析一下!谢谢!!!
- 我开发一dll,问如何秘密的添加版本信息(急!)
- MFC CListBox
- 求助:socket notification sink 错误
- 关于基于对话框的数据库问题,希望能解决一下
有人说使用多层继承的方式,但是我还没有找到好的方法
同时以无模式显示这两个对话框,让两个对话框在位置上粘起来(类似Winamp),这很容易实现。另外,还可以在两个对话框粘在一起的一条边上拖动时,增加一个对话框的宽度,同时缩小另一个的宽度,保持总宽度不变,就像在拖动一个分隔条一样,这都比较容易实现。供参考,hope help:)
我的设想是实现最大的公用,因为我所有的程序的界面都类似,分为左右两视图.
用无模式对话框的方法我觉得是不错,不过好象有点勉强了,你们说呢.~-~
而且通讯上不方便,我要用到很多通讯协议,两视图公用. 现在我想想还是用导出CFromView的方式,比较合理.
但是又碰到了问题.代码如下:
//DLL导出接口
extern "C" AFX_EXT_API UINT Init(CRuntimeClass** view) //返回视图1
{
new CDynLinkLibrary(InitialContactDLL);
*view = RUNTIME_CLASS(CCustomerContact); //CFromView子类
return(0);
}
extern "C" AFX_EXT_API UINT Init2(CRuntimeClass** view) //CFromView子类
{
new CDynLinkLibrary(InitialContactDLL);
*view = RUNTIME_CLASS(CCustomerContact2);
return(0);
}
//主程序采用SDI单文档
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
//获取CView from DLL
typedef UINT ( * LPDLLFUNC)(CRuntimeClass**); LPDLLFUNC lpfnDllFunc = NULL;
HINSTANCE hDLL = NULL;
hDLL = AfxLoadLibrary("InitialContact.dll");
if(hDLL)
{
//first
lpfnDllFunc = (LPDLLFUNC)::GetProcAddress(hDLL,"Init");
if (!lpfnDllFunc)
{
AfxMessageBox("Function not found in DLL");
FreeLibrary(hDLL);
return -1;
}
lpfnDllFunc(&pNewViewClass1);
ASSERT(pNewViewClass1); //Second
lpfnDllFunc = (LPDLLFUNC)::GetProcAddress(hDLL,"Init2");
if (!lpfnDllFunc)
{
AfxMessageBox("Function not found in DLL");
FreeLibrary(hDLL);
return -1;
} lpfnDllFunc(&pNewViewClass2);
ASSERT(pNewViewClass2);
//CSdiDllFramesDoc* pDoc = (CSdiDllFramesDoc*) GetActiveDocument();
//ASSERT(pDoc);
//pDoc->SwitchToView(pNewViewClass);
}
else
{
AfxMessageBox("Dll not found!");
} // create the new view
CCreateContext context;
context.m_pNewViewClass = pNewViewClass1;
context.m_pCurrentDoc = NULL;
CView* pNewView = STATIC_DOWNCAST(CView, CreateView(&context));
if (pNewView != NULL)
{
// the new view is there, but invisible and not active...
pNewView->ShowWindow(SW_SHOW);
pNewView->OnInitialUpdate();
SetActiveView(pNewView);
RecalcLayout();
//return TRUE; // 如果这里返回的话则只能显示1个视图,既默认视图被DLL视图覆盖
} //期待分割成功
m_Splitter.CreateStatic(this,1,2);
if (!m_Splitter.CreateView(0, 0, pNewViewClass1, CSize(320,0), pContext))
return false;
m_Splitter.CreateView(0, 1, pNewViewClass2, CSize(400,0), pContext);
return CFrameWnd::OnCreateClient(lpcs, pContext);
}//执行结果大失所望,完全乱掉了,分割条也看不见