Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перетаскивание ссылок из обозревателя в окно... ... моей программы 
:(
    Опции темы
586
Дата 2.2.2007, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Как сделать перетаскивание ссылок из обозревателя в окно моей программы (как в Winamp'е)?
PM   Вверх
_hunter
Дата 5.2.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



например так:
http://subscribe.ru/archive/comp.soft.win....3/01135552.html
и (возможно) так:
http://forum.vingrad.ru/topic-1595.html
(ну и еще найти можно)


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
586
Дата 6.2.2007, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(_hunter @  5.2.2007,  12:02 Найти цитируемый пост)
например так:
http://subscribe.ru/archive/comp.soft.win....3/01135552.html

там вопрос есть, а ответа на него нет  smile 
Цитата(_hunter @  5.2.2007,  12:02 Найти цитируемый пост)
http://forum.vingrad.ru/topic-1595.html

это для файлов, а мне надо для url.

Я думаю, это делается через IDropTarget (OLE Drag & Drop)
Код
#include <windows.h>
#include <stdio.h>

char ClassName[]="MainWndClass";

class CDropTarget : public IDropTarget
{
public:    
    CDropTarget();

    /* IUnknown methods */
    STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppvObj);
    STDMETHOD_(ULONG, AddRef)(void);
    STDMETHOD_(ULONG, Release)(void);

    /* IDropSource methods */
    STDMETHOD(DragEnter)(IDataObject* pDataObject, DWORD grfKeyState,POINTL pt,DWORD* pdwEffect);
    STDMETHOD(DragOver)(DWORD grfKeyState, POINTL pt,DWORD* pdwEffect);
    STDMETHOD(DragLeave)(void);
    STDMETHOD(Drop)(IDataObject* pDataObject,DWORD grfKeyState,POINTL pt,DWORD* pdwEffect);
private:
    ULONG m_refs;
};  

STDMETHODIMP CDropTarget::QueryInterface(REFIID iid, void FAR* FAR* ppv) 
{
    if(iid == IID_IUnknown || iid == IID_IDropTarget)
    {
      *ppv = this;
      ++m_refs;
      return NOERROR;
    }
    *ppv = NULL;

    return E_NOINTERFACE;
}


STDMETHODIMP_(ULONG) CDropTarget::AddRef(void)
{
    OutputDebugString("CDropSource::AddRef\r\n");

    return ++m_refs;
}


STDMETHODIMP_(ULONG) CDropTarget::Release(void)
{
    OutputDebugString("CDropSource::Release\r\n");

    if(--m_refs == 0)
    {
      delete this;
      return 0;
    }
    return m_refs;
}  

//---------------------------------------------------------------------
//                    CDropTarget Constructor
//---------------------------------------------------------------------        
 
CDropTarget::CDropTarget()
{
    m_refs = 1;  
}

//---------------------------------------------------------------------
//                    IDropTarget Methods
//---------------------------------------------------------------------  

STDMETHODIMP CDropTarget::DragEnter(IDataObject* pDataObject,
                                DWORD grfKeyState,
                                POINTL    pt,
                                DWORD* pdwEffect)
{  
    OutputDebugString("CDropTarget::DragEnter\r\n");
    return DROPEFFECT_MOVE;
}

STDMETHODIMP CDropTarget::DragOver(DWORD grfKeyState,
                            POINTL pt,
                            DWORD* pdwEffect)
{
    OutputDebugString("CDropTarget::DragOver\r\n");
    return DROPEFFECT_MOVE;
}

STDMETHODIMP CDropTarget::DragLeave(void)
{
    OutputDebugString("CDropTarget::DragLeave\r\n");
    return S_OK;
}

STDMETHODIMP CDropTarget::Drop(IDataObject* pDataObject,
                            DWORD grfKeyState,
                            POINTL pt,
                            DWORD* pdwEffect)
{
    MessageBox(NULL,"Hello Drop",NULL,MB_OK);
    return S_OK;
}


long __stdcall MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, long lParam)
{
    switch(uMsg)
    {
    case WM_CLOSE: PostQuitMessage(0); break;
    }

    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

LPDROPTARGET CreateDropTarget(void)
{
   return ((LPDROPTARGET) new CDropTarget);
}

void ShowHex(HWND hWnd, DWORD err)
{
    char b[260];
    sprintf(b, "0x%.8X", err);
    MessageBoxA(hWnd, b, 0, 0);
}


int __stdcall WinMain(HINSTANCE hinst, HINSTANCE, LPSTR, int)
{
    WNDCLASSEX wc;
    MSG msg;
    HWND hMainWnd;
    LPDROPTARGET lpdt;
    HRESULT r;

    wc.cbClsExtra=0;
    wc.cbSize=sizeof(wc);
    wc.cbWndExtra=0;
    wc.hbrBackground=(HBRUSH)16;
    wc.hCursor=LoadCursor(0, IDC_ARROW);
    wc.hIcon=wc.hIconSm=0;
    wc.hInstance=hinst;
    wc.lpfnWndProc=MainWndProc;
    wc.lpszClassName=ClassName;
    wc.style=0;
    wc.lpszMenuName=0;
    RegisterClassEx(&wc);
    hMainWnd=CreateWindowEx(0, ClassName, ClassName, WS_OVERLAPPEDWINDOW | WS_VISIBLE, 200, 200, 250, 180, 0, 0, hinst, 0);
    
    DragAcceptFiles(hMainWnd, 1);

    CoInitialize(0);
    lpdt = (LPDROPTARGET)CreateDropTarget();

    r=RegisterDragDrop(hMainWnd, lpdt);
    ShowHex(hMainWnd, r);
    
    while(GetMessage(&msg, 0, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    lpdt->Release();
    CoUninitialize();
    return 0;
}

но код не работает, функция RegisterDragDrop возвращает код 0x8007000E (out of memory). Где может быть ошибка?

Это сообщение отредактировал(а) 586 - 6.2.2007, 09:19
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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