wxWidgets 3.1.0
Создал я wxHtmlWindow, создал startpgtpl.htm и в ней картинки <IMG> с SRC без указания пути, только имя. Работает, все грузится и отображается.
Загружал через LoadFile с указанием полного пути до основного html.
Далее мне нужно все это зашить в exe. О механизмах рассказывать не буду, имхо это не важно.
Создал обработчик протокола clires - все ссылки вида clires://bla-bla.bla идут через него, проверено. На всякий случай приведу код:
Code: Select all
bool pfsWxCliResVFS::CanOpen(const wxString& location)
{
return (GetProtocol(location) == wxT("clires"));
}
wxFSFile* pfsWxCliResVFS::OpenFile(wxFileSystem& WXUNUSED(fs), const wxString& location)
{
#if defined(CLIRES_VFS_DEBUG)
{
std::wstring loc = location;
std::wstring lLoc = GetLeftLocation(location);
std::wstring rLoc = GetRightLocation(location);
::cli::format::cli_log::message( L"--- VFS" );
::cli::format::cli_log::message( L"VFS: location: [%1], left: [%2], right: [%3]", ::cli::format::arg( loc ) % lLoc % rLoc);
}
#endif
std::wstring rcName = GetRightLocation(location);
while(!rcName.empty() && rcName[0]==L'/')
rcName.erase(0,1);
#if defined(CLIRES_VFS_DEBUG)
::cli::format::cli_log::message( L"VFS: resource file name: %1", ::cli::format::arg( rcName ) );
#endif
::std::string rcStr = readResourceFileHelper( rcName
, 0 // ENUM_CLI_ERCMANFINDFLAGS flags
);
if (rcStr.empty())
{
#if defined(CLIRES_VFS_DEBUG)
::cli::format::cli_log::message( L"VFS: resource file not found" );
#endif
return 0;
}
else
{
#if defined(CLIRES_VFS_DEBUG)
::cli::format::cli_log::message( L"VFS: data size: %1", ::cli::format::arg( rcStr.size() ) );
#endif
}
std::string mimeType = GetMimeTypeFromExt( location );
std::string anchor = GetAnchor(location);
#if defined(CLIRES_VFS_DEBUG)
::cli::format::cli_log::message( L"VFS: mime-type: %1, anchor: [%2]", ::cli::format::arg( mimeType.c_str() ) % anchor.c_str() );
#endif
wxString dataStr = wxString(rcStr.data(), (size_t)rcStr.size());
return new wxFSFile(
//new wxMemoryInputStream( (const void *)rcStr.data(), (size_t)rcStr.size())
new wxStringInputStream ( dataStr )
, location
, mimeType
, anchor
#if wxUSE_DATETIME
, wxDefaultDateTime
#endif // wxUSE_DATETIME
);
}
Загружаю startpgtpl.htm как LoadPage(L"clires://startpgtpl.htm") - страница грузится, но отображается диалог: "Unknown image file format". В раскрывющихся Details - "Unknown image file format" повторяется столько раз, сколько у меня картинок в html'ке. При этом сама html'ка отображается, но нет и следа картинок.
Загружаю startpgtpl.htm как LoadPage(L"file:startpgtpl.htm") - страница грузится без ошибок (без диалогов), но на месте картинок квадратики с красным крестом - типа не удалось загрузить.
По моим логам - видно, что из моего VFS хэндлера наверх все отдается корректно. Но решил потестить на всякий случай. Есть в ресурсах файл configuration.xml. Добавил на него ссылки из главной html'ки как "clires://configuration.xml" и как "configuration.xml". Обе ссылки обрабатываются нормально, вне зависимости от того, гружу я основной файл из своих ресурсов или с диска (в этом случае configuration.xml должна лежать рядом со страничкой). При переходе оба варианта отображают этот xml как простой текст.
Попробовал побегать в отладчике по wxWidgets - выяснил, что были незарегистрированны обработчики I/O для форматов картинок. Хотя PNG при чтении базового HTML из файла (LoadFile) и так работало. Добавил регистрацию обработчиков - wxInitAllImageHandlers(); Ничего не изменилось.
А потом я там заблудился. Не пойму, что где и как не то и не так. Я ресурсы отдаю:
Code: Select all
[Sat Mar 25 09:29:17 2017] --- VFS
[Sat Mar 25 09:29:17 2017] VFS: location: [clires://startpgtpl.htm], left: [], right: [//startpgtpl.htm]
[Sat Mar 25 09:29:17 2017] VFS: resource file name: startpgtpl.htm
[Sat Mar 25 09:29:17 2017] VFS: data size: 2232
[Sat Mar 25 09:29:17 2017] VFS: mime-type: text/html, anchor: []
[Sat Mar 25 09:29:17 2017] --- VFS
[Sat Mar 25 09:29:17 2017] VFS: location: [clires:sp_arrow.jpg], left: [], right: [sp_arrow.jpg]
[Sat Mar 25 09:29:17 2017] VFS: resource file name: sp_arrow.jpg
[Sat Mar 25 09:29:17 2017] VFS: data size: 1197
[Sat Mar 25 09:29:17 2017] VFS: mime-type: image/jpeg, anchor: []
[Sat Mar 25 09:29:17 2017] --- VFS
[Sat Mar 25 09:29:17 2017] VFS: location: [clires:sp_arrow_small.jpg], left: [], right: [sp_arrow_small.jpg]
[Sat Mar 25 09:29:17 2017] VFS: resource file name: sp_arrow_small.jpg
[Sat Mar 25 09:29:17 2017] VFS: data size: 840
[Sat Mar 25 09:29:17 2017] VFS: mime-type: image/jpeg, anchor: []
[Sat Mar 25 09:29:17 2017] --- VFS
[Sat Mar 25 09:29:17 2017] VFS: location: [clires:sp_arrow_small.png], left: [], right: [sp_arrow_small.png]
[Sat Mar 25 09:29:17 2017] VFS: resource file name: sp_arrow_small.png
[Sat Mar 25 09:29:17 2017] VFS: data size: 211
[Sat Mar 25 09:29:17 2017] VFS: mime-type: image/png, anchor: []
[Sat Mar 25 09:29:17 2017] --- VFS
[Sat Mar 25 09:29:17 2017] VFS: location: [clires:sp_arrow_small.png], left: [], right: [sp_arrow_small.png]
[Sat Mar 25 09:29:17 2017] VFS: resource file name: sp_arrow_small.png
[Sat Mar 25 09:29:18 2017] VFS: data size: 211
[Sat Mar 25 09:29:18 2017] VFS: mime-type: image/png, anchor: []
[Sat Mar 25 09:29:18 2017] --- VFS
[Sat Mar 25 09:29:18 2017] VFS: location: [clires:], left: [], right: []
[Sat Mar 25 09:29:18 2017] VFS: resource file name:
[Sat Mar 25 09:29:18 2017] File '' not found in resource paths at all.
[Sat Mar 25 09:29:18 2017] File '' not found in builtin resources at all.
[Sat Mar 25 09:29:18 2017] VFS: resource file not found
[Sat Mar 25 09:29:18 2017] --- VFS
[Sat Mar 25 09:29:18 2017] VFS: location: [clires:popcorn1.gif], left: [], right: [popcorn1.gif]
[Sat Mar 25 09:29:18 2017] VFS: resource file name: popcorn1.gif
[Sat Mar 25 09:29:18 2017] VFS: data size: 14749
[Sat Mar 25 09:29:18 2017] VFS: mime-type: image/gif, anchor: []
[Sat Mar 25 09:29:18 2017] --- VFS
[Sat Mar 25 09:29:18 2017] VFS: location: [clires:popcorn2.gif], left: [], right: [popcorn2.gif]
[Sat Mar 25 09:29:18 2017] VFS: resource file name: popcorn2.gif
[Sat Mar 25 09:29:18 2017] VFS: data size: 8743
[Sat Mar 25 09:29:18 2017] VFS: mime-type: image/gif, anchor: []