Имеется диалог, в который встроен ещё один (дочерний), напоминает SheetPage. На дочернем диалоге имеется контрол Edit (не TEdit) со стилем WS_EX_ACCEPTFILES, его я сабклассирую, чтобы перхвать очередь сообщений и перехватить сообщение WM_DROPFILES. Проблема в том, что именно это сообщение и не ловится. Если я ставлю ловушку на весь диалог, то сообщение в диалоге нормально ловится. Кто знает, в чём загвоздка?
Код:
// сабклассирование Edit-а
...
case Msg of
WM_DROPFILES :
try
if DragQueryFile(wParam, 0, FileName, MAX_PATH) > 0 then
begin
SendMessage(GetParent(Wnd), WM_COMMAND, ID_BTNFILE, 0);
DragFinish(wParam);
Exit;
end;
finally
DragFinish(wParam);
end;
end;
...
// дочерний диалог
WM_INITDIALOG :
begin
...
// не нужно, но так на всякий случай
// в ресурсном файле, этот флаг уде установлен
DragAcceptFiles(GetDlgItem(hWndDlg, ID_EDTFILE), True);
// subclass the drag-drop edit control
hEditPrev := Pointer(GetWindowLong(GetDlgItem(hWndDlg, ID_EDTFILE), GWL_WNDPROC));
SetWindowLong(GetDlgItem(hWndDlg, ID_EDTFILE), GWL_WNDPROC, Longint(@EditWndProc));
SetWindowLong(GetDlgItem(hWndDlg, ID_EDTFILE), GWL_EXSTYLE, GetWindowLong(GetDlgItem(hWndDlg, ID_EDTFILE), GWL_EXSTYLE) or WS_EX_ACCEPTFILES);
...
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.