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:
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.
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?
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 12:35 AM.
Reason: Add demo
Bookmarks