Open Dialog when using BOOL OnInitDialog() function ?

zippor's Avatar
Light Poster
BOOL OnInitDialog()
{
CListBox wndListBox;
wndListBox.Attach (GetDlgItem (IDC_LIST1)->m_hWnd);
wndListBox.AddString (_T ("One"));
wndListBox.AddString (_T ("Two"));
wndListBox.AddString (_T ("Three"));
wndListBox.Detach ();
return true;
}

When I use this code above in BOOL OnInitDialog() function of CDialog class, this code below can't execute. (IDC_LIST1 is a member of IDD_DLTEST1). Can you explain for me ? If I want to open IDD_DLTEST1 dialog, What do I have to do?

void CallDialog()
{
Dlg d1(IDD_DLTEST1);
d1.DoModal();
}
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
I could not get what you are asking.
zippor's Avatar
Light Poster
When i used this code in CDialog class:
Code:
BOOL OnInitDialog()
{
CListBox wndListBox;
wndListBox.Attach (GetDlgItem (IDC_LIST1)->m_hWnd);
wndListBox.AddString (_T ("One"));
wndListBox.AddString (_T ("Two"));
wndListBox.AddString (_T ("Three"));
wndListBox.Detach ();
return true;
}
Why didn't the code below do? (class Dlg::public CDialog)
Code:
void CallDialog()
{
Dlg d1(IDD_DLTEST1);
d1.DoModal();
}

Last edited by shabbir; 15Nov2006 at 11:14.. Reason: Code formating.
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
Because you are not calling that function.
zippor's Avatar
Light Poster
This is my code. Help me
Code:
#include<afxwin.h>
#include<afxext.h>
#include"resource.h"
//////////////////////////////////////////////////////////////////////////////////////////////
class  CD : public CDocument
{
	DECLARE_DYNCREATE( CD )

public:
	CD():CDocument()
	{ 
	}
};
IMPLEMENT_DYNCREATE( CD, CDocument )
//////////////////////////////////////////////////////////////////////////////////////////////
class  CV : public CView
{
	
	DECLARE_DYNCREATE( CV )

public:
	
	void OnDraw(CDC* pDC)
	{
	}
};
IMPLEMENT_DYNCREATE( CV, CView )
class Dlg : public CDialog
{
public:
	Dlg(UINT  id):CDialog(id){}
	BOOL OnInitDialog()
	{
		CListBox wndListBox;
		wndListBox.Attach (GetDlgItem (IDC_LIST1)->m_hWnd);
		wndListBox.AddString (_T ("One"));
		wndListBox.AddString (_T ("Two"));
		wndListBox.AddString (_T ("Three"));
		wndListBox.Detach ();
		return true;
		
	}
                void CallDialog()
               {
                               Dlg d1(IDD_DLTEST1);
                               d1.DoModal();
               }
	DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(Dlg,CDialog)
	ON_COMMAND(IDOK, CallDialog)
END_MESSAGE_MAP()
class  CS : public CFrameWnd
{
	DECLARE_DYNCREATE( CS )
	CToolBar   tb;
	CStatusBar   sb;
public:
void OnCreate(LPCREATESTRUCT   cs)
	{
		CFrameWnd::OnCreate(cs);
		sb.Create(this);
		tb.Create(this);
		tb.LoadToolBar(IDR_MNTB);
		tb.EnableDocking( CBRS_ALIGN_ANY );
		EnableDocking( CBRS_ALIGN_ANY );
		DockControlBar( &tb );
	}
               BOOL CS::PreCreateWindow(CREATESTRUCT& cs)
               {
               }
	DECLARE_MESSAGE_MAP()
};
IMPLEMENT_DYNCREATE( CS, CFrameWnd )
BEGIN_MESSAGE_MAP( CS, CFrameWnd )
	
	ON_WM_CREATE()

END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////////////////////////////////
class  CT : public CWinApp
{
public:
	BOOL  InitInstance()
	{
		CSingleDocTemplate  *pd = new CSingleDocTemplate(
			IDR_MNTB,
			RUNTIME_CLASS( CD ),
			RUNTIME_CLASS( CS ),
			RUNTIME_CLASS( CV ));
		AddDocTemplate(pd);
		
		CCommandLineInfo  cf;
		ParseCommandLine(cf);
		if (!ProcessShellCommand(cf)) return false;
		return true;
	}
	
	DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CT,CWinApp)
	ON_COMMAND( ID_EXIT, CWinApp::CloseAllDocuments)
END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////////////////////////////////
CT a;
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
We normally dont do this
ON_COMMAND(IDOK, CallDialog)
but we override the OnOK but that should not be the cause of the problem. You are treating IDOK as a normal button and call dialog should be called.

Is it that CallDialog is not getting called then follow this steps

Make a dialog based MFC exe application

Copy the following line in the message map
ON_COMMAND(IDOK, CallDialog)

Now add the CallDialog function in .h as follows
afx_msg void CallDialog();

I think this should do the job

Thanks
Shabbir
zippor's Avatar
Light Poster
I don't know much about .h, In the situation, Could you show content of .h file? thanks
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
Opening the file on your system will show you the content.