gpt4 book ai didi

c++ - MFC 项目组合 : How to add a SDI application without document class to a MDI application? 我应该使用子窗口吗?[MFC]

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:50 25 4
gpt4 key购买 nike

我现在正在使用 MDI MFC 应用程序并想向该应用程序添加控制台/命令行功能。我想从 QuickWin(见下文)中获取的唯一功能是使用其文本区域和捕获输入的处理功能。如果我可以将它添加到弹出对话框或停靠栏,那就太好了!我得到了没有文档类的 SDI 应用程序的 src 代码(link:http://www.codeproject.com/.../QuickWin-...):

我的问题是:我可以将应用程序添加到我的 MDI 应用程序中吗,以及如何处理源文件或头文件,例如:MainFrm.cpp/MainFrm.h and class like: CQuickWinApp/CQuickView?(如果我能弹出一个子窗口来实现功能,更好:))

enter image description here

在QuickWin的主机中,与客户区有关,比较难处理:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
// create splitter without views
m_wndSplitter.CreateStatic(this, 2, 1);

CCreateContext Context;
Context.m_pNewViewClass = RUNTIME_CLASS(CQuickView);
Context.m_pCurrentDoc = NULL;
Context.m_pNewDocTemplate = NULL;
Context.m_pLastView = NULL;
Context.m_pCurrentFrame = this;

// Create the Stdio QuickView
m_pStdioView = (CQuickView*)CreateView(&Context, AFX_IDW_PANE_FIRST);
if (m_pStdioView == NULL)
{
TRACE("Failed to create QuickWin Stdio View\n");
return FALSE; // fail to create
}

// Create the Stderr QuickView
m_pStderrView = (CQuickView*)CreateView(&Context, AFX_IDW_PANE_FIRST);
if (m_pStderrView == NULL)
{
TRACE("Failed to create QuickWin Stderr View\n");
return FALSE; // fail to create
}
m_pStderrView->SetReadOnly(TRUE);

ShowSplitter(theApp.m_bShowSplitter);
return TRUE;
}

在我的 MDI 应用中:

MDI 应用程序有 3 个文档模板:

//BCGPVisualStudioGUIDemo.cpp

m_pDocTemplateCpp = new CMultiDocTemplate(
IDR_BCGDEVTYPE_CPP,
RUNTIME_CLASS(CBCGPVisualStudioGUIDemoDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CBCGPVisualStudioGUIDemoView));
AddDocTemplate (m_pDocTemplateCpp);

m_pDocTemplateWeb = new CMultiDocTemplate(
IDR_BCGDEVTYPE_WEB,
RUNTIME_CLASS(CBCGPVisualStudioGUIDemoDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CBCGPVisualStudioGUIDemoView));
AddDocTemplate (m_pDocTemplateWeb);

m_pStartDocTemplate = new CMultiDocTemplate(
IDR_BCGDEVTYPE0,
RUNTIME_CLASS(CNetworkMapEditorDemoDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CNetworkMapEditorDemoView));
AddDocTemplate(m_pStartDocTemplate);

该应用程序还有一些停靠栏:

//主程序.cpp

    //------------------
// Create config bar:
//------------------

if (!m_wndClassView.Create (_T("config"), this, CRect (0, 0, 200, 200),
TRUE,
ID_VIEW_CLASS,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create Class View bar\n");
return FALSE; // fail to create
}

//------------------
// Create output bar:
//------------------

if (!m_wndOutputView.Create (_T("output"), this, CRect (0, 0, 200, 100),
TRUE,
ID_VIEW_OUTPUT,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create output bar\n");
return FALSE; // fail to create
}

//------------------
// Create help bar:
//------------------

if (!m_wndDynamicHelpView.Create (_T("help"), this, CRect (0, 0, 200, 200),
TRUE,
ID_VIEW_DYNAMICHELP,
WS_CHILD | WS_VISIBLE | CBRS_RIGHT | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create Dynamic Help Bar\n");
return FALSE; // fail to create
}

//------------------
// Create watch bar:
//------------------

if (!m_wndWatchBar.Create (_T("watch"), this, CRect (0, 0, 300, 100),
TRUE,
ID_VIEW_WATCH,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create watch bar\n");
return FALSE; // fail to create
}

//------------------
// Create property bar:
//------------------

if (!m_wndPropertiesBar.Create (_T("property"), this, CRect (0, 0, 300, 200),
TRUE,
ID_VIEW_PROPERTIES,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create Properties Bar\n");
return FALSE; // fail to create
}

我能否将 QuickWin 应用程序的文本功能添加到我的应用程序的停靠栏或文档模板或只是一个弹出窗口中?

最佳答案

将 QuickWin 的功能集成到您的应用程序中所需的全部是 3 个文本框(一个用于 stdin、stdout 和 stderr)和 Quickwin 项目中的以下类:

  • C重定向
  • CRedir
  • CParamDlg(仅光学绒毛,不是必需的)

CRedirect 类管理新进程的创建以及 stdin/stdout/stderr 的重定向(结合 CRedir)。

您必须修改 CRedir::OnChildWrite 和 -Started 和 -Terminate 以满足您的需要。这些方法实际上将内容写入 View /文本框/任何内容。查看 CMainFrame::OnCopyDataCQuickView::Append 有助于了解如何完成此操作。

关于c++ - MFC 项目组合 : How to add a SDI application without document class to a MDI application? 我应该使用子窗口吗?[MFC],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13340011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com