C ++ MFC EditBox处理双击

时间:2018-10-05 05:01:14

标签: c++ mfc

我遇到的情况如下:

  1. 我有一个CDialog类,其中包含两个EditBox控件,可以说它是IDC_EB1和IDC_EB2。
  2. 我希望能够侦听IDC_EB1和IDC_EB2上的Double事件,以打开FileDialog并在IDC_EB1和IDC_EB1上显示选定的文件位置。
  3. IDC_EB1和IDC_EB2正在通过DDX控制机制进行操作,并存储到它们各自的成员变量中。
  4. 成员变量类型为CMyEdit(源自CEdit),以便处理双击事件。

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

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

PS:有一个MfcEditBrowse控件可以很好地解决上述问题,但它不符合我的需要,因为计划是在程序的各个阶段重用此CDialog窗口,显然您不能多次调用DoModal。具有MfcEditBrowse控件的对话框。 MfcEditBrowse控件将使Dialog引发断言失败(显然,根据我在Microsoft文档中发现的已知问题)。

2 个答案:

答案 0 :(得分:0)

  

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

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

答案 1 :(得分:0)

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