非模态对话框传值(自定义消息)

非模态对话框的使用

分类: c&c++ 2010-09-04 14:0594人阅读评论(0) 收藏 举报

例子,在单文档程序窗口中绘制圆,通过调出非模态对话框设置半径值。(画圆部分省略)

1、新建单文档应用程序,添加一个对话框资源,并创建对话框类CRadiusDlg

2.在视图类头文件中加入刚创建的对话框类的头文件,#include"RadiusDlg.h",并添加一个对话框类的指针变量,CRdiusDlg *pModalessDlg;

3.在菜单栏中添加一个用于显示对话框的菜单项,并为其添加命令函数,添加代码:
if(pModallessDlg==NULL)
{
   pModallessDlg=new CRadiusDlg;
//pModallessDlg->m_nRadius=100;                    //
设置编辑框控件变量的初始值
   pModallessDlg->Create(IDD_RADIUS_DLG,NULL);//
创建非模态对话框
   pModallessDlg->ShowWindow(SW_SHOW);   //
显示非模态对话框
}
else
   pModallessDlg->SetActiveWindow();//
若对话框已创建,只需要激活即可

运行,点击即可显示非模态对话框。下面添加对具体的应用。

4、在刚才创建的对话框中再添加一个按钮应用IDIDAPPLY。现在对话框上共三个按钮,确定取消应用,我们要添加一个消息WM_DIALOG,为下面点击时按钮服务。

a、在对话框类的头文件中加入#define WM_DIALOG WM_USER+1

b、在视图类的头文件中声明消息WM_DIALOGafx_msg LRESULT OnDialog(WPARAM wParam,LPARAM lParam);

CPP文件中添加消息响应,ON_MESSAGE(WM_DIALOG,OnDialog)

5、在对话框中分别为三个按钮添加消息处理函数。i当点击任一个按钮时都发送WM_DIALOG消息,响应OnDialog函数进行相应处理。

void CInputDlg::OnOK()
{
// TODO: Add extra validation here
UpdateData(true);
   CFrameWnd* pFrame=GetParentFrame();//
获得父窗口框架
   CView* pView=pFrame->GetActiveView();//
获得当前视图
   pView->PostMessage(WM_DIALOG,IDOK);//
向神图发送消息,参数为IDOK

   CDialog::OnOK();
}

void CInputDlg::OnCancel()
{
// TODO: Add extra cleanup here                   //Cancel
则不更新数据,直接投递消息
   CFrameWnd* pFrame=GetParentFrame();
   CView* pView=pFrame->GetActiveView();
   pView->PostMessage(WM_DIALOG,IDCANCEL);
CDialog::OnCancel();
}

void CInputDlg::OnApply()
{
// TODO: Add your control notification handler code here
UpdateData(true);
   CFrameWnd* pFrame=GetParentFrame();
   CView* pView=pFrame->GetActiveView();
   pView->PostMessage(WM_DIALOG,IDAPPLY);
}

6、编辑消息处理函数WM_DIALOG的响应函数:

LRESULT CModallessView::OnDialog(WPARAM wParam,LPARAM lParam)
{
switch(wParam)
{
case IDOK:
   m_nCViewRadius=pModallessDlg->m_nRadius;//
获得对话框编辑控件成员变量的值
   pModallessDlg->DestroyWindow();                     //
销毁对话框窗口
   delete pModallessDlg;                                        //
删除当前的非模态对话框对象
   pModallessDlg=NULL;                                        //
设置非模态对话框不存在标志
   break;
case IDCANCEL:
   pModallessDlg->DestroyWindow();
   delete pModallessDlg;
   pModallessDlg=NULL;
   break;
case IDAPPLY:                                                     //
保留非模态对话框
   m_nCViewRadius=pModallessDlg->m_nRadius;
   break;
}
Invalidate();            //
刷新视图
return 0;
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值