crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> wxTextCtrl, перетаскивание файлов(drag&drop)
ranger
  опции профиля:
сообщение 7.1.2009, 18:43
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 65
Регистрация: 29.7.2008
Пользователь №: 245

Спасибо сказали: 9 раз(а)




Репутация:   4  


есть у кого нибудь простой пример реализации перетаскивания файлов(из проводника) в wxTextCtrl?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ranger
  опции профиля:
сообщение 9.1.2009, 14:38
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 65
Регистрация: 29.7.2008
Пользователь №: 245

Спасибо сказали: 9 раз(а)




Репутация:   4  


Вобщем, почти разобрался сам:
#include <wx/app.h>
#include <wx/frame.h>
#include <wx/textctrl.h>
#include <wx/dnd.h>
#include <wx/filename.h>

#define    MAIN_WINDOW_ID 1000

class DnDFile : public wxFileDropTarget{
    private:
        wxTextCtrl *TargetTextCtrl;
    public:
        DnDFile(wxTextCtrl *target) {TargetTextCtrl = target; }
        virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &filenames);
};
bool DnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString &filenames)
{
    wxFileName file(filenames[0]);
    if(file.GetExt() == "txt") TargetTextCtrl->LoadFile(filenames[0]);
    return true;
}
//-----------------------------------------

class MainWindow : public wxFrame{
    private:
        wxTextCtrl *text_ctrl;
    public:
        MainWindow(wxWindow *parent, wxWindowID id, const wxString &title,
                   const wxPoint &pos, const wxSize &size, long style, const wxString &name);
        virtual ~MainWindow();
};

  MainWindow::MainWindow(wxWindow *parent, wxWindowID id, const wxString &title,
                       const wxPoint &pos, const wxSize &size, long style, const wxString &name)
          : wxFrame(parent,id, title, pos, size, style, name)
{
    text_ctrl  = new wxTextCtrl(this, wxID_ANY, wxEmptyString,
                                wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE);
    text_ctrl->SetDropTarget(new DnDFile(text_ctrl));
}

//-----------------------------------------
MainWindow::~MainWindow()
{
//-----------------------------------------

class Application : public wxApp{
    public:
        bool OnInit();
};
IMPLEMENT_APP(Application)

bool Application::OnInit()
{
        MainWindow *main_window = new MainWindow(NULL, MAIN_WINDOW_ID, wxT("test"),
                                                  wxPoint(100,100), wxSize(640,480),
                                                   wxDEFAULT_FRAME_STYLE, "test");
    main_window->Show();
    return true;
}

правда компилируется только под windows, под линуксом ругается на 9 строку: "expected class-name before '{' token", или что-то в этом роде. Подозреваю, что это как-то связано с подключением инклюдов... вобщем буду разбираться дальше...

Сообщение отредактировал ranger - 9.1.2009, 14:48
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.1.2009, 14:42
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(ranger @ 9.1.2009, 17:38) *
вобщем буду разбираться дальше...
найди где объявлен класс wxFileDropTarget видимо его компиллер не видит.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ranger
  опции профиля:
сообщение 11.1.2009, 3:10
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 65
Регистрация: 29.7.2008
Пользователь №: 245

Спасибо сказали: 9 раз(а)




Репутация:   4  


Цитата
найди где объявлен класс wxFileDropTarget видимо его компиллер не видит.

да, так оно и есть... всё дело было в строке #if wxUSE_DRAG_AND_DROP в заголовке dnd.h. Исправил значение
wxUSE_DRAG_AND_DROP в setup.h на 1 и всё заработало.

Сообщение отредактировал ranger - 11.1.2009, 3:11
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 6.6.2020, 22:23