wxTextCtrl (drag&drop) Topic is solved
wxTextCtrl (drag&drop)
есть ли у кого нибудь простой пример реализации перетаскивания файлов(из проводника) в wxTextCtrl?
сделал так:
но в Linux это отказывается компилироваться... ругается на 9 строку: 'expected class-name before ‘{’ token', и ещё метод SetDropTarget тоже 'не видит', пишет, что такого нет у wxTextCtrl. В чём может быть проблема?
Code: Select all
#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;
}
-
- Experienced Solver
- Posts: 70
- Joined: Fri Nov 07, 2008 4:25 pm
- Location: Saint-Petersburg, Russia
Можно этим, но вообще все зависит от того, что нужно.
win xp pro sp3/VS Express 2008/MinGW;
win Vista Ultimate/VS 2005;
Debian Lenny/gcc/cegcc-mingw32ce;
wxWidgets-2.8.9 w/wxWinCE;
win Vista Ultimate/VS 2005;
Debian Lenny/gcc/cegcc-mingw32ce;
wxWidgets-2.8.9 w/wxWinCE;
Мне нужно при перетаскивании проверить имеет ли файл текстовый формат, т.е, если он не текстовый, то загрузка файла не должна состояться. Как собственно это можно проверить? wxMimeTypesManager думаю не совсем то, мне кажется, что мне нужно наследоваться от wxDataObject и переопределить его виртуальные методы, но что, и как конкретно, не могу разобраться...
А какой критерий текстовости файл?:)
Помоему вашего if(file.GetExt() == "txt") должно вполне хватать.
думаю что wxDataObject тут вообще не причем...
Помоему вашего if(file.GetExt() == "txt") должно вполне хватать.
думаю что wxDataObject тут вообще не причем...
Best regards, Nikolay
wxWidgets in russian
Small Notes Manager and Clipboard Manager with History written with wxWidgets
wxWidgets in russian
Small Notes Manager and Clipboard Manager with History written with wxWidgets
если wxDataObject непричём, то зачем в нём определен такой метод, как например
и зачем нужен класс wxDataFormat? И метод void SetDataObject(wxDataObject* data) у класса wxFileDropTarget?
А насчёт проверки по расширению, то может под Windows это и будет работать, но не факт, что это будет работать под Linux. Да и под Windows... кто сказал, что file.txt это не переименованный file.bmp?
Code: Select all
virtual void GetAllFormats( wxDataFormat *formats, Direction dir = Get) const
А насчёт проверки по расширению, то может под Windows это и будет работать, но не факт, что это будет работать под Linux. Да и под Windows... кто сказал, что file.txt это не переименованный file.bmp?
-
- Experienced Solver
- Posts: 70
- Joined: Fri Nov 07, 2008 4:25 pm
- Location: Saint-Petersburg, Russia
Гы. Ну так вообще-то любой файл - бинарный. Это для нас есть разница текст - не текст, а не для машины.
По-моему не в том месте копаете. Единственный способ достоверно проверить файл на "текстовость" - это просмотреть его целиком на предмет наличия "нечитаемых" символов. Но и то не всегда поможет - взять любой файл, закодированный в base64 - все "читаемые" символы, только вот "текстовостью" и не пахнет
По-моему не в том месте копаете. Единственный способ достоверно проверить файл на "текстовость" - это просмотреть его целиком на предмет наличия "нечитаемых" символов. Но и то не всегда поможет - взять любой файл, закодированный в base64 - все "читаемые" символы, только вот "текстовостью" и не пахнет
win xp pro sp3/VS Express 2008/MinGW;
win Vista Ultimate/VS 2005;
Debian Lenny/gcc/cegcc-mingw32ce;
wxWidgets-2.8.9 w/wxWinCE;
win Vista Ultimate/VS 2005;
Debian Lenny/gcc/cegcc-mingw32ce;
wxWidgets-2.8.9 w/wxWinCE;
Best regards, Nikolay
wxWidgets in russian
Small Notes Manager and Clipboard Manager with History written with wxWidgets
wxWidgets in russian
Small Notes Manager and Clipboard Manager with History written with wxWidgets