模态对话框简单好用,用它传递数据时,直接使用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 在任意个地方都可以获得,故而,在任意个地方都可以发送此消息。