Здравствуйте, эксперты ! У меня в диалоге два List View. Хочу реализовать возможность drag and drop из одного в другой. Начало перетаскивания (LVN_BEGINDRAG) я отлавливаю нормально. А вот как отловить конец переноса ? (HDN_ENDDRAG только для header-ов) Использую VC++ c MFC.
Добрый день, IceWINteR! Чтобы не писать все ручками и заюзать Ole Drag&Drop надо: 1. Проинциализировать Ole вызовом AfxOleInit где-нибудь в InitInstance. 2. Создать класс наподобие class CMyDropTarget: public COleDropTarget { public: virtual DROPEFFECT OnDragOver( CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point ); virtual BOOL OnDrop( CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point ); }; DROPEFFECT CMyDropTarget::OnDragOver( CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point ) { return DROPEFFECT_MOVE; } BOOL CMyDropTarget::OnDrop( CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point ) { if( dropEffect == DROPEFFECT_MOVE ) { AfxMessageBox( "Caught!!!" ); return TRUE; } return COleDropTarget::OnDrop(pWnd,
pDataObject, dropEffect, point); } и его объект m_dt в диалог (или в список). 3. Зарегистрировать объект CMyDropTarget'а в OnInitDialog'e (или в OnCreate списка): m_dt.Register( &m_list2 ); 4. В обработке LVN_BEGINDRAG запустить собственно Drag&Drop void CMyListCtrl1::OnBeginDrag( NMHDR * pNotifyStruct, LRESULT* result ) { COleDataSource src; if( src.DoDragDrop() == DROPEFFECT_MOVE) { LPNMLISTVIEW pnmv = (LPNMLISTVIEW)pNotifyStruct; char buf[40]; sprintf(buf, "Item %d moved", pnmv->iItem ); AfxMessageBox( buf ); } } А кто сказал, что будет легко? :) С уважением, Avl2k. Ответ отправлен: 16.05.2003, 18:59 Отправитель: Avl2k
Вопрос № 776
Привет всем экспертам! Например, в С #include можно расшифровать по-русски, как подключается библиотека (include) стандартного ввода вывода (standard input output), возможно у кого-нибудь есть расшифровка всех функций, библиотек для С/С++, не обязательно на русском. Если есть вышлите плиз, так легче понимать, что я пишу заодно и английский можно подучить. Вроде указал мыло……. Best regards alexneta.
Доброе время суток, alexneta! В include и можно понять, как оно работает.
Ответ отправлен: 17.05.2003, 15:36 Отправитель: Shurik Отвечает BOLT
Здравствуйте, alexneta! #include - это вообще-то деректива(макрос) прекомпилятора.Прекомпелятор соеденяет все файлы указанные <> или "" в один включая, конечно исходный. О них можешь почитать в любой справочной системе о C/C++.Также есть описание в учебнике(справочнике) по C++ - Бьярн Страустрап и Денис Ричи.Дорога на http://lib.ru. Счастливо! Ответ отправлен: 17.05.2003, 14:12 Отправитель: BOLT Отвечает Knignick
Здравствуйте, alexneta! Нет, дословного перевода нет. Реккомендую поставить Lingvo. Выделяешь в тексте незнакомое слово, жмешь Shift+Ins+Ins - и утебя перевод.
Ответ отправлен: 17.05.2003, 13:27 Отправитель: Knignick
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.