CView::OnDraw - related question
-
Hello Everybody, I am new to MFC. I used the application wizard to create a SDI application, I was able to replace the existing menu and toolbar. In this, I added a dialog with some controls. Now, what I need is, whatever the details I got from the dialog controls, I need to display the document view. On CView::OnDraw,I added the code like this.
CSDITestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; pDC->TextOut(20, 20, L"test sdi", 10);
This text is writing only once in the beginning. On closing the dialog, this function is not called, how can I do that? I tried with UpdateAllViews and OnUpdate also. Thanks in advance. A. Gopinath. -
Hello Everybody, I am new to MFC. I used the application wizard to create a SDI application, I was able to replace the existing menu and toolbar. In this, I added a dialog with some controls. Now, what I need is, whatever the details I got from the dialog controls, I need to display the document view. On CView::OnDraw,I added the code like this.
CSDITestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; pDC->TextOut(20, 20, L"test sdi", 10);
This text is writing only once in the beginning. On closing the dialog, this function is not called, how can I do that? I tried with UpdateAllViews and OnUpdate also. Thanks in advance. A. Gopinath.On CView::OnDraw,I added the code like this Really?
-
On CView::OnDraw,I added the code like this Really?
-
Hello Everybody, I am new to MFC. I used the application wizard to create a SDI application, I was able to replace the existing menu and toolbar. In this, I added a dialog with some controls. Now, what I need is, whatever the details I got from the dialog controls, I need to display the document view. On CView::OnDraw,I added the code like this.
CSDITestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; pDC->TextOut(20, 20, L"test sdi", 10);
This text is writing only once in the beginning. On closing the dialog, this function is not called, how can I do that? I tried with UpdateAllViews and OnUpdate also. Thanks in advance. A. Gopinath.You need to show some more of your code, as it is not obvious where these different events occur. Pleas also use <pre> tags around your codeblocks so they are readable, like this:
CSDITestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;pDC->TextOut(20, 20, L"test sdi", 10);
-
You need to show some more of your code, as it is not obvious where these different events occur. Pleas also use <pre> tags around your codeblocks so they are readable, like this:
CSDITestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;pDC->TextOut(20, 20, L"test sdi", 10);
Thanks for you reply. Actually, I created one MFC Application using the Template, and its SDI. So, it creates list of files, Doc, View, etc. For View, i select the base class as CView (in the wizard itself). I removed the default created menu and included my menu list. Now, i added a simple dialog, and for that, I created a class also derived from CDialog. Following are the .h and .cpp file contents .h file
class CSelectOptionsDlg : public CDialog
{
public:
CSelectOptionsDlg(CWnd* pParent = NULL);
virtual BOOL OnInitDialog();public:
enum {IDD = IDD_SELECTOPTIONSDLG};public:
void OnOkClicked();DECLARE\_MESSAGE\_MAP()
};
.cpp
CSelectOptionsDlg::CSelectOptionsDlg(CWnd* pParent)
: CDialog(CSelectOptionsDlg::IDD, pParent)
{}
BEGIN_MESSAGE_MAP(CSelectOptionsDlg, CDialog)
ON\_COMMAND(IDOK, OnOkClicked)
END_MESSAGE_MAP()
void CSelectOptionsDlg::OnOkClicked()
{
AfxMessageBox("Ok clicked");EndDialog(1);
}
BOOL CSelectOptionsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
return TRUE;
}As I mentioned earlier, if i add this line in OnDraw, its drawing on the first time only,
pDC->TextOut(20, 20, L"test sdi", 10);
Also, in MainFrm.cpp file,
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_COMMAND(ID_START, OnStartPlan )
ON_COMMAND(ID_STOP, OnStopPlan )
ON_COMMAND(ID_SELECTOPTIONS, OnSelectOption )
ON_COMMAND(ID_EXIT, OnExit )
END_MESSAGE_MAP()void CMainFrame::OnSelectOption()
{
CSelectOptionsDlg cSODlg;
cSODlg.DoModal();
}doing like this. OnDraw is not calling everytime. What I need is, whenever i click ok and close the dialog, OnDraw need to be called. How can i do that? Any help. Thanks.
-
Thanks for you reply. Actually, I created one MFC Application using the Template, and its SDI. So, it creates list of files, Doc, View, etc. For View, i select the base class as CView (in the wizard itself). I removed the default created menu and included my menu list. Now, i added a simple dialog, and for that, I created a class also derived from CDialog. Following are the .h and .cpp file contents .h file
class CSelectOptionsDlg : public CDialog
{
public:
CSelectOptionsDlg(CWnd* pParent = NULL);
virtual BOOL OnInitDialog();public:
enum {IDD = IDD_SELECTOPTIONSDLG};public:
void OnOkClicked();DECLARE\_MESSAGE\_MAP()
};
.cpp
CSelectOptionsDlg::CSelectOptionsDlg(CWnd* pParent)
: CDialog(CSelectOptionsDlg::IDD, pParent)
{}
BEGIN_MESSAGE_MAP(CSelectOptionsDlg, CDialog)
ON\_COMMAND(IDOK, OnOkClicked)
END_MESSAGE_MAP()
void CSelectOptionsDlg::OnOkClicked()
{
AfxMessageBox("Ok clicked");EndDialog(1);
}
BOOL CSelectOptionsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
return TRUE;
}As I mentioned earlier, if i add this line in OnDraw, its drawing on the first time only,
pDC->TextOut(20, 20, L"test sdi", 10);
Also, in MainFrm.cpp file,
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_COMMAND(ID_START, OnStartPlan )
ON_COMMAND(ID_STOP, OnStopPlan )
ON_COMMAND(ID_SELECTOPTIONS, OnSelectOption )
ON_COMMAND(ID_EXIT, OnExit )
END_MESSAGE_MAP()void CMainFrame::OnSelectOption()
{
CSelectOptionsDlg cSODlg;
cSODlg.DoModal();
}doing like this. OnDraw is not calling everytime. What I need is, whenever i click ok and close the dialog, OnDraw need to be called. How can i do that? Any help. Thanks.
As far as I recall from my MFC days, a Window's
OnDraw()
procedure will get called when the dialog closes, so this should happen automatically. Unfortunately that's the part of the code that you did not show us. You may like to add some breakpoints and use your debugger to see the flow of code when the dialog closes. -
As far as I recall from my MFC days, a Window's
OnDraw()
procedure will get called when the dialog closes, so this should happen automatically. Unfortunately that's the part of the code that you did not show us. You may like to add some breakpoints and use your debugger to see the flow of code when the dialog closes.Hello Richard, I debug the whole code by putting breakpoints in all the functions, after closing the dialog, its not going anywhere in the code, remains on the application itself. I am attaching the code herewith. Please download and check. http://www.4shared.com/zip/eDwcyehu/SDITest.html[^] Thanks.
-
Hello Richard, I debug the whole code by putting breakpoints in all the functions, after closing the dialog, its not going anywhere in the code, remains on the application itself. I am attaching the code herewith. Please download and check. http://www.4shared.com/zip/eDwcyehu/SDITest.html[^] Thanks.
-
Hello Everybody, I am new to MFC. I used the application wizard to create a SDI application, I was able to replace the existing menu and toolbar. In this, I added a dialog with some controls. Now, what I need is, whatever the details I got from the dialog controls, I need to display the document view. On CView::OnDraw,I added the code like this.
CSDITestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; pDC->TextOut(20, 20, L"test sdi", 10);
This text is writing only once in the beginning. On closing the dialog, this function is not called, how can I do that? I tried with UpdateAllViews and OnUpdate also. Thanks in advance. A. Gopinath.