C ++ MFC EditBox Обработка двойного щелчка - PullRequest
0 голосов
/ 05 октября 2018

У меня есть следующий сценарий:

  1. У меня есть класс CDialog, который содержит два элемента управления EditBox, скажем, это IDC_EB1 и IDC_EB2.
  2. Я хочу иметь возможностьпрослушайте событие двойного щелчка на IDC_EB1 и IDC_EB2, чтобы открыть FileDialog и отобразить выбранное местоположение файла на IDC_EB1 и IDC_EB1.
  3. IDC_EB1 и IDC_EB2 выполняют через механизм управления DDX и сохраняют в своих соответствующих переменных-членах.
  4. Тип переменных-членов имеет CMyEdit (производный от CEdit) для обработки события двойного щелчка.

Диалог запускается, и я смог открыть FileDialog, когда я дваждынажмите на IDC_EB1 или IDC_EB2 для просмотра.Проблема в CMyEdit, я больше не знаю, какой EditBox вызвал событие двойного щелчка, чтобы отобразить путь к файлу, выбранный из FileDialog.

Что может быть хорошим способом решения этой проблемы?Я использую Visual Studio 2010 с пакетом обновления 1 (SP1).

PS: существует элемент управления MfcEditBrowse, который бы неплохо решил описанную выше проблему, но он мне не подходит, потому что планируется повторно использовать это окно CDialog на различных этапахмоя программа и, очевидно, вы не можете вызывать DoModal более одного раза в диалоге, который имеет элемент управления MfcEditBrowse.элемент управления MfcEditBrowse в этом диалоговом окне выдает ошибку подтверждения (известная проблема, очевидно, согласно тому, что я нашел в документации Microsoft).

Ответы [ 2 ]

0 голосов
/ 05 октября 2018
  1. Вы знаете идентификатор внутри обработчика двойного щелчка.Просто вызовите GetDlgCtrlID из обработчика сообщений.
  2. Вы можете легко добавить некоторые данные в CMyEdit, чтобы упростить идентификацию элемента управления для действия двойного щелчка
  3. . Выможет отправить сообщение WM_COMMAND по двойному щелчку от CMyEdit к родителю, а родительский обработчик остальное.Родитель знает элемент управления по его идентификатору и должен знать, что делать.
0 голосов
/ 05 октября 2018

Я больше не знаю, какой EditBox вызвал событие двойного щелчка, чтобы отобразить путь к файлу, выбранный из FileDialog.

Вы можете использовать CWnd :: ChildWindowFromPoint (точка), которая будетвернуть выбранный дочерний элемент управления в теле OnLButtonDblClk ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...