C++MFC编辑框处理双击

C++ MFC EditBox Handling Double Click

本文关键字:双击 处理 编辑 C++MFC      更新时间:2023-10-16

我遇到的场景如下:

  1. 我有一个包含两个 EditBox 控件的 CDialog 类,假设它是IDC_EB1和IDC_EB2。
  2. 我希望能够在IDC_EB1和IDC_EB2上收听双击事件,以打开FileDialog并在IDC_EB1和IDC_EB1上显示选定的文件位置。
  3. IDC_EB1和IDC_EB2通过DDX控制机制执行并存储到各自的成员变量中。
  4. 成员变量类型为 CMyEdit(派生自 CEdit(,以便处理双击事件。

对话框运行,当我双击IDC_EB1或IDC_EB2进行浏览时,我能够打开文件对话框。问题出在CMyEdit中,我不再知道哪个EditBox触发了双击事件以显示从FileDialog中选择的文件路径。

解决此问题的好方法是什么?我正在运行Visual Studio 2010 SP1。

PS:有 MfcEditBrowse 控件可以很好地解决上面的问题,但它不符合我的需求,因为计划是在我的程序的各个阶段重用这个 CDialog 窗口,显然你不能在具有 MfcEditBrowse 控件的对话框中多次调用 DoModal。 MfcEditBrowse 控件 i n该对话框将抛出断言失败(已知问题显然是根据我在Microsoft文档中发现的(。

我不再知道哪个 EditBox 触发了双击事件以显示从 FileDialog 中选择的文件路径。

您可以使用 CWnd::ChildWindowFromPoint(point(,它将返回 OnLButtonDblClk(( 主体中单击的子控件。

  1. 您知道双击处理程序中的 ID。只需从消息处理程序调用 GetDlgCtrlID。
  2. 您可以轻松地将一些数据添加到CMyEdit,以便轻松识别双击操作的控件
  3. 双击 CMyEdit 时,您可以将WM_COMMAND消息发送到父级,父级处理其余部分。父级通过控件的 ID 知道控件,并且应该知道该怎么做。