-
December 4th, 2012, 02:43 PM
#1
Problem splitting child window in MFC MDI program
After months of searching, I finally found a post that outlines how to split a child window in an MFC MDI program.
Splitting Child Window in MFC MDI Program
http://stackoverflow.com/questions/5...fc-mdi-program
For my purposes, this achievement is practically useless because I cannot find a way to pass text from one CRichEditView window to another.
Given two CRichEditView windows, CInputViewView and COutputView as child windows in an MFC MDI app, my goal is to capture text in the former and print that text in the later using a button click.
Using what appeared to me to be a logical way to proceed, I tried variations of the following code:
Code:
void CMainFrame::DoSomething()
{
//MessageBox(_T("Like What ?"), _T("Do Something"));
//CInputViewView * pin = (CInputViewView*) GetActiveView();
CInputViewView * pin = (CInputViewView*)m_wndSplitter.GetPane(0,0);
pin->GetWindowTextW(m_csDisplay);
MessageBox(m_csDisplay);
//CInputViewView* pInVV = (CInputViewView*) CChildFrame
//long countChildren;
//CChildFrame * pChildFrm = (CChildFrame*) get_accChildCount(&countChildren); //this->GetAccessibleChild(VARIANT varChild, IDispatch **ppdispChild);
//pChildFrm->m_wndSplitter.GetPane(0, 1);
//pChildFrm->
//CString cs;
//cs.Format(_T("countChildren = %d"), countChildren);
//MessageBox(cs);
}
None of this works and even the attempt to access the pane results in an app crash in winsplit.cpp.
Code:
#ifdef _DEBUG
void CSplitterWnd::AssertValid() const
{
CWnd::AssertValid();
> ASSERT(m_nMaxRows >= 1);
//..
Please see attached demo.
Appreciate any help in accessing the panes from CMainFrame. Thanks
mpliam
-
December 4th, 2012, 03:03 PM
#2
Re: Problem splitting child window in MFC MDI program
Mike!
In a "standard" MDI splitter window belongs to a child frame. Why is your m_wndSplitter a member of a CMainFrame?
Last edited by VictorN; December 5th, 2012 at 03:29 AM.
Victor Nijegorodov
-
December 4th, 2012, 04:22 PM
#3
Re: Problem splitting child window in MFC MDI program
Victor,
Why is your m_wndSplitter a member of a CMainFrame?
I don't know. I was grasping for any possible solution at that point. Perhaps the question should be: How to access the child frame m_wndSplitter member from CMainFrame. The demo code shows a number of commented out unsuccessful attempts to do this. One of these involves some COM input that I could not figure out. The others simply don't work and/or crash the app.
mpliam
-
December 5th, 2012, 03:45 AM
#4
Re: Problem splitting child window in MFC MDI program
Did you look at the Microsoft samples like SCRIBBLE, VIEWEX, SwSplit?
How did you create your application? Did you use AppWizard or you did it by hand?
Victor Nijegorodov
-
December 5th, 2012, 07:15 PM
#5
Re: Problem splitting child window in MFC MDI program
Thanks Victor. I'd forgotten about viewex. Viewex turned out to have at least one way of doing what I wanted. Namely, it uses the GetDocument() pointer in the output view to capture the desired string and display it as text using OnUpdate. The doc string is a public CString which can be readily accessed from both the CMainFrame and COutView classes.
The critical code is:
Code:
// in MainFrm.cpp
void CMainFrame::DoSomething()
{
//..
CInputViewDoc* pDoc = (CInputViewDoc*) MDIGetActive()->GetActiveView()->GetDocument();
pDoc->m_csScript = m_csScript; // should already be there ??
pDoc->UpdateAllViews(NULL);
}
// in OutView.cpp
void COutputView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/)
{
CInputViewDoc* pDoc = GetDocument();
m_csData = pDoc->m_csScript;
TRACE0("COutputView::OnUpdate : m_csScript =:\n"); OutputDebugString(m_csData); TRACE0("\n");
SetWindowText(m_csData);
}
One must provide the CInputViewDoc* GetDocument() const; and it's ancillary methods for this method to work.
There must be many ways to accomplish the same ends, but this works for my purposes.
Once again, Victor to the rescue. Thanks again.
Last edited by Mike Pliam; December 20th, 2012 at 01:35 AM.
Reason: Add demo
mpliam
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|