Wednesday, May 29, 2013

SendMessage from modaless dialog to the view in SDI without document/view structure support--another method

I create one SDI without document/view structure support, i name the project as ImagePro, then I can get the following files:

ChildView.cpp; (class CChildView : public CWnd, OnPaint() is here)
MainFrm.cpp; (class CMainFrame : public CFrameWnd)
ImagePro.cpp;(class CImageProApp : public CWinApp)

I also create CModalLessDlg using the dialog template, which is defined in ModalLessDlg.cpp and ModalLessDlg.h

In the  ModalLessDlg.cpp, I want to press the "Begin" button to send the "view" a message

you can realize it like this:

1. in ChildView.cpp
#include "ModalLessDlg.h"

void CChildView::OnModalLess() // show the modalless dialog
{

    CModalLessDlg* instance = new CModalLessDlg(this);
    instance->Create(CModalLessDlg::IDD,this);
    instance->PARENT = this;  
    instance->ShowWindow(1);

}


2. in ModalLessDlg.h

#include "ChildView.h"



public:

CChildView *PARENT;



3. in ChildView.h

public:

void     setDisplayText(CString src);

private:

CString   displayText;


4. in ChildView.cpp

CChildView::CChildView(): displayText(_T("zhiguang"))
{
}



void CChildView::setDisplayText(CString src)
{
    displayText=src;
    Invalidate(TRUE);
}



void CChildView::OnPaint() // show different results of image 
{


  CPaintDC dc(this); // device context for painting   
  CRect rect;
  GetClientRect (&rect);
  dc.DrawText (displayText, -1, &rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);

}



5. in ModalLessDlg.cpp

void CModalLessDlg::OnBegin() // 
{

  CString str_sent="OnBegin is running!";
  PARENT->setDisplayText(str_sent);
}




that is all.

it is using ChildView as one parameter to construct the modaless dialog, then you can easily use the ChildView and its members to change the client area.



No comments:

Post a Comment