点击edit控件弹出对话框,焦点不在该对话框上时,对话框摧毁

这篇博客介绍了在MFC应用程序中,如何在点击edit控件弹出非模态对话框,并在焦点不在对话框时自动销毁对话框。作者通过添加消息传递、重载PreTranslateMessage函数来捕获鼠标事件,然后在对话框的OK按钮事件中传递值回edit控件。此外,还提到在窗口激活状态改变时调用PostNcDestroy来销毁对话框,以解决焦点不在对话框时的问题。在调试过程中遇到‘试图执行系统不支持的操作’错误,通常是因为删除了控件但未删除相关代码或资源ID不匹配。
摘要由CSDN通过智能技术生成
前面一大部分都是参考某位同学的,具体哪位记不清了,在此声明一下。
 
点击edit控件出现对话框:
1,首先捕获鼠标信息:
    添加一个消息传递,重载函数PreTranslateMessage(MSG* pMsg),可以在wizard中添加PreTranslateMessage即可。
重载的代码:
if( pMsg->message == WM_LBUTTONUP )//消息为鼠标左键升起,不能为down,不知道原因。down的话按在任何地方都会调用对话框
{  
  if ( GetDlgItem(IDC_EDIT1)->GetSafeHwnd() == pMsg->hwnd )//判断句柄为edit
  {
 jisuan*m_pDlg;//非模态显示对话框。如果用模态的话,鼠标会变成光标的样子,什么都做不了
 m_pDlg = new jisuan;
        m_pDlg->Create(IDD_DIALOG1, this);
 m_pDlg->ShowWindow(SW_SHOW);
  }
}
这样就会调用对话框
2.传值:
  要把被调用对话框里的值传给edit控件。在被调用对话框里的ok控件被按下的函数里添加如下代码:
 CString aa;
 CWnd*cwnd=AfxGetMainWnd();//获得父窗口句柄,在此即为调用对话
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值