Поиск:

Ответ в темуСоздание новой темы Создание опроса
> drug and drop for Win32 MFC appl 
:(
    Опции темы
sol78
Дата 28.8.2008, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0



Подскажите как лучше организовать drag and drop для МФС.
Нужно просто перетаскивать файлы, а система сама знает как раскрывать их...??

Это сообщение отредактировал(а) sol78 - 28.8.2008, 17:22
PM MAIL   Вверх
Andrey44
Дата 29.8.2008, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



А точнее можно сформулировать вопрос?
Куда перетаскивать?
Какие файлы?
И какая система должна знать как раскрывать файлы?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
sol78
Дата 29.8.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0



Для аппликации уже написана функция "open file". так что вроде все что нужно уже естьб нет только перетаскивания файлов, проблема в том что я никогда не писала на мфс. можно описать порядок действий и необходимые функции, и маленький пример?
Спасибо!
PM MAIL   Вверх
Andrey44
Дата 29.8.2008, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Это в PreTranslateMessage
Код

if(pMsg->hwnd == GetSafeHwnd() && pMsg->message == WM_DROPFILES)
    {
        int ResultQueryFile = 0;
        TCHAR szBuf[MAX_PATH*4];
        ResultQueryFile = DragQueryFile((HDROP)pMsg->wParam, 0xFFFFFFFF, NULL, sizeof(szBuf));
        if(ResultQueryFile > 0)
        {
            for(int i = 0; i < ResultQueryFile; i++){
                DragQueryFile((HDROP)pMsg->wParam, i, szBuf, MAX_PATH*4);
                CString DropFileName(szBuf); // здесь имя файла
                AddFile(DropFileName);// ваша функция открытия файла
            }
        }
        return TRUE;
    }



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
sol78
Дата 29.8.2008, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0



а что тут не то?
drag_drop

Добавлено @ 16:05
Andrey44, можно немного пояснить ваш код, что это за условие, мне вот не понятно как мы распознаем это событие перетаскиванияб как узнаем что мы в нижней форме?


Это сообщение отредактировал(а) sol78 - 29.8.2008, 16:22
PM MAIL   Вверх
voov
Дата 29.8.2008, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Цитата(sol78 @  29.8.2008,  15:58 Найти цитируемый пост)
что это за условие, мне вот не понятно как мы распознаем это событие перетаскиванияб как узнаем что мы в нижней форме?

ты сама ответила на свой вопрос.
следующее условие это как раз и делает
Цитата(Andrey44 @  29.8.2008,  14:06 Найти цитируемый пост)
if(pMsg->hwnd == GetSafeHwnd() && pMsg->message == WM_DROPFILES)


Код

pMsg->hwnd == GetSafeHwnd() 
проверяем что сообщение пришло нашему окну

Код

pMsg->message == WM_DROPFILES
проверяем что это сообщение о бросании перетаскиваемых файлов
PM MAIL   Вверх
sol78
Дата 30.8.2008, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0



voov,  возникоает еще один вопрос - где вызывать это кусок кода, т.е. как подписаться на это событие (каков принцип)?
Поиск в гугле мне дал несколько стандартых функций для этой реализации, тот например
тут
чем способ который мне предложил Andrey44, лучше????? 
PM MAIL   Вверх
sol78
Дата 31.8.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0



Andrey44, твой пример конечно хорош, только не работае....
проблема то что я на своем окне не определены дроп еффекты, т.е. претаскивая файл я вижу значек DROPEFFECT_NONE (круглый перечеркнутый). Что с этим делыать?
PM MAIL   Вверх
sol78
Дата 31.8.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0



проблема решена частично!

Andrey44, ваш код довести до рабочего состояния не удалось.
пришлось пойти несколько другим путем делаем овервратинг для нескольких методов в том числе и onDrop() это решила проблему...но

drag and drop на shortcut не работает....
вернее так - перетакиваю файл на иконку и (краш)... прошлась дебагером и вижу как то не понятным мне способом вызывается стандартная функция onOpenDocument() (какой там опен апликация еще на поднялась...) изменить порядок дествий или вообще вмешаться в этом процесс мне не удалось... хотельсь получить доступ к этому процессу...как в первом случае, как это лечат? что такое  shortcut  с точки зрения MFC????
PM MAIL   Вверх
586
Дата 1.9.2008, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 6
Всего: 146



Цитата(sol78 @  31.8.2008,  13:32 Найти цитируемый пост)
Andrey44, твой пример конечно хорош, только не работае....
проблема то что я на своем окне не определены дроп еффекты, т.е. претаскивая файл я вижу значек DROPEFFECT_NONE (круглый перечеркнутый). Что с этим делыать? 

Нужно разрешить перетаскивание - вызвать функцию DragAcceptFiles для окна. При перетаскивании файла на окно, окну будет приходить сообщение WM_DROPFILES.
PM   Вверх
sol78
Дата 1.9.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0



586, спасибо, но хотелось получить совет по существующей проблеме, а не по той что уже решена.
PM MAIL   Вверх
sol78
Дата 1.9.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0



Неужеле ни кто не сталкивался стакоы проблемой??
Специалисты обратите внимание!!! 
PM MAIL   Вверх
sol78
Дата 3.9.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0



 smile  smile  smile  smile Help!!!
PM MAIL   Вверх
Earnest
Дата 5.9.2008, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(sol78 @  31.8.2008,  22:33 Найти цитируемый пост)
что такое  shortcut  с точки зрения MFC???? 

MFC на это чихать - просто при перетаскивании на shortcut система вызывает зарегистрированное приложение с определенными аругментами - обычно имя файла, которое приложение должно "открыть". Где-то в рaйоне InitInstance вызывается разбор строки параметров и решается, какие действия нужно предпринять. Вот туда и смотри. 


--------------------
...
PM   Вверх
sol78
Дата 10.9.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0



уважаемый Earnest, пошла по вашему совету:
Код

BOOL InitInstance()
{
......
// Parse command line for standard shell commands, DDE, file open
    CCommandLineInfo    cmdInfo;

    ParseCommandLine(cmdInfo); // как я могу тут вмешатся?

    if (cmdInfo.m_bRunEmbedded ||
        cmdInfo.m_bRunAutomated)
    {
        return TRUE;
    }

    _Module.UpdateRegistryFromResource(IDR_SCRIPTBUILDER, TRUE);
    _Module.RegisterServer(TRUE);

    // Dispatch commands specified on the command line
    if (!ProcessShellCommand(cmdInfo))
    {
        return FALSE;
    }

    // The one and only window has been initialized, so show and update it.
    m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
    m_pMainWnd->UpdateWindow();

    if (FAILED(ReadRegSettings()))    // Failed?
    {
        return FALSE;
    }
}
 

извините за кусок не понятного кода)), но одной мне не разобраться
Я думаю что вы это имели введу?
Тут вызов библиотечтых функций класса CWinApp, как я могу вмешться в этот процесс???

Это сообщение отредактировал(а) sol78 - 10.9.2008, 14:43
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.