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

来源:互联网 发布:linux gdb调试视频 编辑:程序博客网 时间:2024/06/05 00:20

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

      如下例所示:


[cpp] view plaincopy
CMyDlg  dlg;  
dlg.i=0; // 初始化数据  
dlg.j=0;  
  
if(dlg.DoModal()==IDOK){  
    int i=dlg.i;   //将模态对话框中的变量传递出  
    int j=dlg,j;     
}  

 

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

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

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

 

1     stdafx.h中自定义消息


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


2

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


[cpp] view plaincopy
afx_msg LRESULT OnAngle(WPARAM wParam,LPARAM lParam);  


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


[cpp] view plaincopy
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中设置消息响应


[cpp] view plaincopy
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 在任意个地方都可以获得,故而,在任意个地方都可以发送此消息。


0 0