如何从模态对话框实时传递数据

      模态对话框简单好用,用它传递数据时,直接使用DoModal(), 根据按钮情况 进行数据传递:

      如下例所示:

	CMyDlg  dlg;
	dlg.i=0; // 初始化数据
	dlg.j=0;

	if(dlg.DoModal()==IDOK){
		int i=dlg.i;   //将模态对话框中的变量传递出
		int j=dlg,j;   
	}

 

       但是,这种传递仅能传递模态对话框中最后设定好的数据,而不能传递实时数据,比如,模态对话框中有一个滚动条,主窗口需要实时获得滚动条的值,这时用这种方法便无法获取实时值。

       怎么才能将滚动条的实时值传递给主窗口呢?

       我采用的方法是自定义消息:每当滚动条发生改变时,往主窗口发送消息,将值传递给主窗口。

 

1     stdafx.h中自定义消息

   #define WM_ANGLE_VALUE (WM_USER+100)             //从模态对话框中 传送角度值


2

        1)  MainFrm.h中声明消息映射函数

   afx_msg LRESULT OnAngle(WPARAM wParam,LPARAM lParam);


       2)  MainFrm.cpp定义消息映射函数,并将消息中的参数传递给相应的窗口

LRESULT CMainFrame::OnAngle(WPARAM wParam,LPARAM lParam)
{
	CImportView* pImportView=(CImportView*)m_SplitterWnd.GetPane(0,3);
	pImportView->OnAngle((int)wParam,(int)lParam);

	
	return 0;
}


       3)   MainFrm.cpp中设置消息响应

 ON_MESSAGE(WM_ANGLE_VALUE,OnAngle)

 


3 在模态对话框中发送消息

 

	(theApp.m_pMainWnd)->PostMessage(WM_ANGLE_VALUE,(WPARAM)angle,-1);

 

       由theApp.m_pMainWnd-->PostMessage()可以看出,之所以在MainFrm中定义消息响应函数,是因为在MainFrm中定义消息,可以使得在程序任意地方都可以发送此消息。 因为,程序运行时,theApp 便是这个程序,theAPP.m_pMainWnd,便是此CMainFrame类对象,所以,程序运行时,theApp.m_pMainWnd 在任意个地方都可以获得,故而,在任意个地方都可以发送此消息。
 

你可能感兴趣的:(user)