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

原创 2012年03月25日 14:32:00
前面一大部分都是参考某位同学的,具体哪位记不清了,在此声明一下。
 
点击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();//获得父窗口句柄,在此即为调用对话框的edit控件所在的对话框
 if (GetDlgItemText(IDC_EDIT_NEW,aa))//读取被调用对话框里edit控件的值,存在aa里,返回的值为aa的长度,没有值的时候返回为0
 {
  cwnd->SetDlgItemText(IDC_EDIT1,aa);//把aa的值放在edit控件里
 }
 UpdateData(false);
3.销毁被调用的对话框:因为非模态显示的对话框在关闭后没有销毁,只是最小化,看不到了,所以要手动销毁。模态显示的对话框在ok关闭的时候就销毁了,无须收到销毁。
  在wizard里,添加一个消息:PostNcDestory,在函数PostNcDestory()里添加代码:
 delete this;
ok 了!!
在调试程序的时候,我删除了无用的控件,因此出现问题“试图执行系统不支持的操作”,搜了一下原因,引例如下:
试图执行系统不支持的操作:
开发平台:VS.NET 2003。
出现错误:试图执行系统不支持的操作。
错误原因:a)删除了对话框控件,但是没有删除相应控件代码;
          b)修改了资源ID,资源ID对不上号;
          c)将MFC程序做成打包软件,安装在没有VC的机器上,出现错误,在有VC环境的机器上运行则没有这个错误。
       解决办法:对于前面两种情况,删除相应控件或资源代码即可;第三种情况在无VC环境的机器上,注册程序中使用的控件即可。

以上是通过按钮调用摧毁对话框的函数,,当焦点不在对话框上直接关闭对话框的时候,加载以下函数:
在CWnd::OnActivate消息中处理:
if(nState   ==   WA_INACTIVE)
{
      PostNcDestory()  //失去焦点了,摧毁对话框
}
这样当窗口不是当前窗口时,关闭该窗口。。。。

如何在VC++中两个对话框相互传递信息

在VC++中,打开对话框一般是用DoModal()函数调用模态对话框,但是模态对话框只能在对弹出的当前子窗口进行操作,而不能对父窗口进行操作,也无法传递数据到父窗口中,根据笔者的研究发现,采用非模态对...
  • jearmy
  • jearmy
  • 2014年09月28日 21:52
  • 1283

MFC->同时弹出多个对话框

问题引出 设置2个对话框,发现只能弹出一个。 修改思路 查看代码,在xxx.cpp中 INT_PTR nResponse = dlg.DoModal();         DoModal()函数:让对...
  • xAston
  • xAston
  • 2016年03月16日 10:18
  • 1108

android 对话框获取焦点问题

在android开发中有时会出现弹出的对话框没有立刻获取到焦点的问题: 1.如果你是使用Dialog   dd=new Dialog(context);该方式直接建立的对话框,可以设置dd.setC...
  • u010035154
  • u010035154
  • 2014年03月10日 11:06
  • 1129

创建添加对话框的Activex

1.ActiveX的基本概念          ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括WEB网页,应用程序窗体...
  • wangzhiyang925
  • wangzhiyang925
  • 2014年08月20日 23:10
  • 2265

android 带EditView(编辑框)的AlertDialog(对话框)及获取输入内容

final EditText et = new EditText(this); new AlertDialog.Builder(this).setTitle("搜索") .setIco...
  • yuanbohx
  • yuanbohx
  • 2014年03月27日 17:23
  • 34686

设置、获得对话框中 编辑框控件 EDIT 的内容

对于EDIT控件 1.未绑定变量时: Invalidate(FALSE); CString str; str.Empty(); GetDlgItem(IDC_EDIT)->GetWindowT...
  • sakawa_x
  • sakawa_x
  • 2014年12月21日 19:29
  • 835

mfc获取控件在对话框上的位置

 CRect rect; GetDlgItem(控件ID)->GetWindowRect(&rect);//获取控件的屏幕坐标 ScreenToClient(&rect);//转换为对话框上...
  • huixingshao
  • huixingshao
  • 2017年01月19日 10:31
  • 801

mfc非模态对话框Child窗口CEdit控件获取不到焦点问题

遇到的问题就是创建一个非模态的子窗口。发现子窗口上的edit控件总是不能被激活,开始担心自己工程出问题了,于是新建了一个sdi,如图问题依然存在,既然如此那就在新工程中找问题,先设置对话框style,...
  • evil_119
  • evil_119
  • 2017年07月25日 16:25
  • 351

文件对话框

一:文件对话框 文件对话框分为打开文件对话框和保存文件对话框,都需要一个文件对话框的类CFileDialog,具体函数参看msdn; 二:实例: 1:创建一个基于对话框的MFC应用程序; 2:...
  • zhang_alongzd
  • zhang_alongzd
  • 2016年05月22日 11:51
  • 558

对话框

对话框,大家应该很熟悉了,在我们常用的软件中大多都有对话框界面,例如,360安全卫士的主界面其实就是个对话框,只是它做了很多美工方面的工作,将其大大美化了。        创建对话框主要分两大步,第...
  • I_amKing
  • I_amKing
  • 2014年12月08日 05:05
  • 1391
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:点击edit控件弹出对话框,焦点不在该对话框上时,对话框摧毁
举报原因:
原因补充:

(最多只允许输入30个字)