Всем привет. Первый раз работаю с mfc. Делаю приложение для объединения изображений и дальнейшей печати, т.к. устал пользоваться фотошопом Использую visual studio community 2017, приложение на MFC, элемент формы Picture control, по сути IDC_STATIC. Как сделать чтобы загрузка картинки происходила при бросании картинки на элемент формы?( пока сделал загрузку просто через EditBrowse ). Гуглил но ничего внятного так и не нашел, обработки WM_DROP нету, вобще задача начала казаться довольно сложной в рамках решения ее в MFC. Может кто что посоветует кроме MFC, где будет проще и интуитивней ? 2017 год, а возникают такие сложности с drag & drop картинки В идеале хочется сделать типа альбома, куда можно просто и быстро бросать картинки.
Сейчас два основных направления гуеделания - wpf (но он на вражеском .net) и qt . MFC - это страх и ужас. Был раньше борланд ещё весьма ничего, но он , похоже, всё.
Да ну нафик. Вот мне наоборот не нравится ни делфи ни борланд си - считаю их для девочек. Другое дело MFC и QT. Ещё есть WxWidgets. Но я его не пробовал. Вообще классно создавать нестандартные интерфейсы на MFC. Давно не работал ни с MFC и QT, нужно что-нибудь написать годное чтобы все пользовались.
rmn, спасибо разобрался. В свой класс диалога нужно добавить OnInitDialog и разрешить прием файлов. Код (Text): BOOL CPageImageAddDialog::OnInitDialog() { DragAcceptFiles(); CWnd *m_picture = (CStatic *)GetDlgItem( IDC_STATICIMAGELEFT ); if ( m_picture ) { m_picture->DragAcceptFiles( TRUE ); // это можно в свойствах разрешить у IDC_STATICIMAGELEFT } return 0; } так же добавить в MESSAGE_MAP диалога строку ON_WM_DROPFILES() и добавить уже сам обработчик afx_msg void CPageImageAddDialog::OnDropFiles( HDROP hDropInfo ). Все работает, так же читал что могут быть проблемы с сообщениями( WM_* ) из за UAC, если у приложения недостаточно прав.( я этого не проверял ) нарыл такой код для обхода Код (Text): ChangeWindowMessageFilter (WM_DROPFILES, MSGFLT_ADD); ChangeWindowMessageFilter (WM_COPYDATA, MSGFLT_ADD); ChangeWindowMessageFilter (0x0049, MSGFLT_ADD);
Хотя нет, продолжил разбираться и понял что наврал drag&drop работает, но если перетаскивать файл на окно(IDC_STATIC), где включена приемка файлов DragAcceptFiles( TRUE ), то OnDropFiles не вызывается, но за всей областью окна срабатывает
Вобщем решил проблему через установку в диалог своего обработчика PreTranslateMessage, в котором уже ловлю WM_DROPFILES, а по hWnd могу точно определять какому окну идет файл, без всяких DragDetect.