|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
31.12.2017, 16:16 | #1 |
Пользователь
Регистрация: 18.05.2014
Сообщений: 35
|
Как правильно обработать сообщение WM_DROPFILES
Написал на С++ программу, которая шифрует/дешифрует файлы. Начальные диалоги, которые задают параметры шифрования/дешифровки файлов вызываются либо через меню главного окна, либо путём перетвскивания в главное окно программы.При закрытии любого диалогового окна которые вызываются через меню и вызовы которых входят в блок операторов case WM_COMMAND, срабатывает оператор case WM_DROPFILES и функцией DialogBox(hInst,MAKEINTRESOURCE(IDD _ENCR_DECR_WIZARD),hWnd,WizardDlgPr oc) создаётся окно которое должно было создаваться только при перетаскивании файлов в главное окно программы. Отладчик Visual Studio в этом случае пишет, что hDrop=0x00009c44{unused=???}. Перетаскивание обрабатывается нормально и при этом hDrop=0x0017003c. Как проверить корректность дескриптора hDrop или как сделать так, чтобы при перехвате сообщения WM_DROPFILES не вызывальсь окно, в случае не корректного дескриптора hDrop. Код оконной процедуры приведен ниже.
Код:
|
31.12.2017, 17:09 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,343
|
|
31.12.2017, 17:44 | #3 |
Пользователь
Регистрация: 18.05.2014
Сообщений: 35
|
Дословно с MSDN:
PostMessage( (HWND) hWndControl, // handle to destination control (UINT) WM_DROPFILES, // message ID (WPARAM) wParam, // = (WPARAM) (HDROP) hDrop; (LPARAM) lParam // = 0; not used, must be zero ); PostMessage( (HWND) hWndControl, // handle to destination control (UINT) WM_DROPFILES, // message ID (WPARAM) wParam, // = (WPARAM) (HDROP) hDrop; (LPARAM) lParam // = 0; not used, must be zero ); Parameters hDrop A handle to an internal structure describing the dropped files. Pass this handle DragFinish, DragQueryFile, or DragQueryPoint to retrieve information about the dropped files. lParam Must be zero. Здесь hDrop - это указатель на внутреннюю структуру, описывающую перетащеные файлы. Программа ведёт себя так. Когда закрывается любое диалоговое окно, которое было вызвано через меню программы (блок операторов после case WM_COMMAND), вызывается окно, которое должно было быть вызвано после перетаскивания файлов в главное окно программы (блок операторов после case WM_DROPFILES). Такого быть не должно. Так как в этом случае перетаскивания файлов не происходило, то hDrop остаётся не инициализированым. Отладчик Visual Studio при трассировке в этом случае пишет, что hDrop=0x00009c44{unused=???}. |
31.12.2017, 19:20 | #4 |
Пользователь
Регистрация: 18.05.2014
Сообщений: 35
|
Проблема решена.
При закрытии диалогов, которые вызываются после перехвата сообщения WM_COMMAND, возникает сообщение WM_DROPFILES. Переменная wParam содержит идентификатор ресурса закрытого окна, из-за которого и было сгенерировано сообщение M_DROPFILES. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Получение имён, отправка ID. Как правильно обработать? | Jopses | JavaScript, Ajax | 0 | 02.02.2013 02:54 |
как правильно обработать событие в cxGrid, в ячейке с CheckBox ? | $T@LKER | Компоненты Delphi | 0 | 26.08.2010 23:46 |
Как правильно обработать onkeypress? | Stilet | JavaScript, Ajax | 6 | 13.08.2009 16:14 |
Как в DBGrid обработать сообщение на кнопки прокрутки | ArtInt | БД в Delphi | 4 | 12.03.2009 21:09 |