Привет всем.
У меня есть очень большая проблема по поводу Thimbnail. Наверное каждый видел возможность в Windows Explorer поставить вид как Thumbnail. Я искал в регистре и нашел кое какой интерфейс типа Shell.ThumbnailExtract.HTML.1 Но у меня нет листа методов. В данный момент я пытаюсь сделать что то типа файл броузера с просмотром графических файлов. Да я знаю что вы посоветуете использовать какой нибудь стандартный файл диалог, но мне нужно просмотривать так же PowerPoint презентации не имея инсталировонной копии Microsoft PowerPoint в системе. Я просматривал функции PowerPoint Viewer97, но к сожалению методов подобных файл диалог не нашел хотя при запуске его запуске появляется Файл диалог с просмотром презентации (preveiw 250x400). Пожалуйста если кто нибудь как нибудь может помочь, ответьте, я устал уже ломать сдесь голову.
Re: Thumbnail? PowerPoint? Незнаю уже что и делать.
Здравствуйте Max, Вы писали:
Max>Привет всем. Max>У меня есть очень большая проблема по поводу Thimbnail. Наверное каждый видел возможность в Windows Explorer поставить вид как Thumbnail. Я искал в регистре и нашел кое какой интерфейс типа Shell.ThumbnailExtract.HTML.1 Но у меня нет листа методов. В данный момент я пытаюсь сделать что то типа файл броузера с просмотром графических файлов. Да я знаю что вы посоветуете использовать какой нибудь стандартный файл диалог, но мне нужно просмотривать так же PowerPoint презентации не имея инсталировонной копии Microsoft PowerPoint в системе. Я просматривал функции PowerPoint Viewer97, но к сожалению методов подобных файл диалог не нашел хотя при запуске его запуске появляется Файл диалог с просмотром презентации (preveiw 250x400). Пожалуйста если кто нибудь как нибудь может помочь, ответьте, я устал уже ломать сдесь голову.
Привет.
У меня возникла проблема с использованием вашего примера. >>IShellFolder::GetUIObjectOf(hwnd, 1, &item, IID_IExtractImage, NULL, &pEI)
&item – константа, но конвертируя File Path в ITEMIDLIST не константа.
Для меня ваш пример показался достаточно сложным( Я только начинаю программировать на VC++), немогли бы вы описать шаг за шагом как использовать данный пример, хотя бы на очень простом примере как: запускается диалоговое окно и сразу же появляется Thumbnail Preview из файла с:\\test.jpeg.
Пожалуйста мне очень нужна ваша помощь чтобы начать.
(Если кто нибудь может помочь пожалуйста не проходите мимо.)
Спасибо.
Re[3]: Thumbnail? PowerPoint? Незнаю уже что и делать.
Извините что еще раз прерываю вас, у меня есть ... глупый вопрос.
Я надеюсь что вы не оставите начинающего без помощи.
Вопрос чесно говоря очень простой (и очень глупый)
У меня есть Диалог в диалоге предположим ActiveX Control (Microsoft Form 2.0 Image) Variable — m_image
Так же у в диалоге есть Кнопка Ok.
Нажав на кнопку Ок, появляется Thumbnail preview в m_image.
Я поставил ваш код в свой проект и в методе OnOk поставил Load("c:\\test.jpeg");
Но компилятор выдал 15 ошибок.
--------------------Configuration: test — Win32 Debug--------------------
Compiling...
testDlg.cpp
D:\ResearchLab\test\testDlg.cpp(174) : error C2065: 'CComPtr' : undeclared identifier
D:\ResearchLab\test\testDlg.cpp(174) : error C2275: 'IShellFolder' : illegal use of this type as an expression
d:\program files\microsoft sdk\include\shobjidl.h(1213) : see declaration of 'IShellFolder'
D:\ResearchLab\test\testDlg.cpp(174) : error C2065: 'pDesktop' : undeclared identifier
D:\ResearchLab\test\testDlg.cpp(175) : error C2275: 'IMalloc' : illegal use of this type as an expression
d:\program files\microsoft sdk\include\objidl.h(998) : see declaration of 'IMalloc'
D:\ResearchLab\test\testDlg.cpp(175) : error C2065: 'pMalloc' : undeclared identifier
D:\ResearchLab\test\testDlg.cpp(183) : error C2065: 'USES_CONVERSION' : undeclared identifier
D:\ResearchLab\test\testDlg.cpp(186) : error C2227: left of '->ParseDisplayName' must point to class/struct/union
D:\ResearchLab\test\testDlg.cpp(186) : error C2065: 'm_hWnd' : undeclared identifier
D:\ResearchLab\test\testDlg.cpp(186) : error C2065: 'T2OLE' : undeclared identifier
D:\ResearchLab\test\testDlg.cpp(189) : error C2275: 'IShellFolder' : illegal use of this type as an expression
d:\program files\microsoft sdk\include\shobjidl.h(1213) : see declaration of 'IShellFolder'
D:\ResearchLab\test\testDlg.cpp(189) : error C2065: 'pFolder' : undeclared identifier
D:\ResearchLab\test\testDlg.cpp(197) : error C2227: left of '->GetUIObjectOf' must point to class/struct/union
D:\ResearchLab\test\testDlg.cpp(197) : error C2065: 'm_pImage' : undeclared identifier
D:\ResearchLab\test\testDlg.cpp(203) : error C2227: left of '->GetLocation' must point to class/struct/union
D:\ResearchLab\test\testDlg.cpp(208) : error C2227: left of '->Free' must point to class/struct/union
image.cpp
picture.cpp
Generating Code...
Compiling...
test.cpp
Generating Code...
Error executing cl.exe.
test.exe — 15 error(s), 0 warning(s)
Пожалуйста не думайте что я пытаюсь сделать программу на халяву, или посоветовать мне почитать книгу.
Я это делаю я учусь но так получилось что нужно срочно сделать этот Thumbnail preview. Пожалуйста не
оставляйте меня вот так.
Еще раз спасибо вам.
Re[5]: Thumbnail? PowerPoint? Незнаю уже что и делать.
Так это ATL...... млин...извини я просто никогда с ALT Wizard не работал, но все получилось (компилятор не сказал нислова)
Только вот при нажатии На кнопку Ок ни чего не произошло, Snax... у меня последняя прозьба к вам, прошу прощения за нескромнось,
а где Preview? Я имею ввиду увидеть Preview от файла который я указал, точнее на чем мне его отразить, ваш код возвращает Long но как я могу это использовать... Извините за очень уж нелепый вопрос, ище раз огромное спасибо за поддержку.
Re[7]: Thumbnail? PowerPoint? Незнаю уже что и делать.
Max>а где Preview? Я имею ввиду увидеть Preview от файла который я указал, точнее на чем мне его отразить, ваш код возвращает Long но как я могу это использовать... Извините за очень уж нелепый вопрос, ище раз огромное спасибо за поддержку.
Кто возвращает Long? IExtractImage::Extract() ? Дык это не Long, а HRESULT. А указатель на HBITMAP это выходной параметр.
Пример:
HBITMAP hBmp = NULL;
HRESULT hr = pImage->Extract(&hBmp);
if (SUCCEEDED(hr) && hBmp)
{
CBitmap bmp = CBitmap::FromHandle(hBmp);
// TODO
}
Re[8]: Thumbnail? PowerPoint? Незнаю уже что и делать.
Спасибо большое за помощь, но боюсь что успеха мне сдесь не добится...
Тяжело для меня слишком.
Не получается ни чего, да и условие не проходит в:
................
hr = pDesktop->ParseDisplayName(m_hWnd, NULL, T2OLE(szFile), NULL, &pidl, NULL);
if (SUCCEEDED(hr))
{
................
Snax, если это возможно.... немогли бы вы, не знаю даже как это сказать, послать мне для примера простой рабочий проэкт, я знаю возможно у вас не будет для этого времени, но если... мой email:
max.lekarew@wave-group.com
Спасибо
P.S. Если вам потребуется помощь когда-нибудь с Java, MySQL, Oracle. Знайте я всегда буду рад вам помоч.
Еще раз огромное спасибо.
max.lekarew@wave-group.com
Re[8]: Thumbnail? PowerPoint? Незнаю уже что и делать.
А млин, я понял почему не прошло условие — не провильное имя файла.
Но всетаки я так и не пойму как использовать возвращенный — hr
Вы сказали что указатель на HBITMAP это выходной параметр, тоесть hr я так понимаю, но
при использовании Picture Control (m_myPicture) компилятор выдает ошибку типа:
D:\RESEARCHLAB\qwer\qwerDlg.cpp(236) : error C2664: 'SetBitmap' : cannot convert parameter 1 from 'long' to 'struct HBITMAP__ *'
Что-то я опять падаю в отчаяние...
Re[9]: Thumbnail? PowerPoint? Незнаю уже что и делать.
Здравствуйте Max, Вы писали:
Max>А млин, я понял почему не прошло условие — не провильное имя файла. Max>Но всетаки я так и не пойму как использовать возвращенный — hr
hr это типа HRESULT — код ошибки, проверяем его и если ошибок нет, двигаем дальше
Max>Вы сказали что указатель на HBITMAP это выходной параметр, тоесть hr я так понимаю, но Max>при использовании Picture Control (m_myPicture) компилятор выдает ошибку типа:
Max>D:\RESEARCHLAB\qwer\qwerDlg.cpp(236) : error C2664: 'SetBitmap' : cannot convert parameter 1 from 'long' to 'struct HBITMAP__ *'
есессенно
Re[10]: Thumbnail? PowerPoint? Незнаю уже что и делать.
Да но в таком случае из метода ::OnOk() сделать следующее я не могу:
HBITMAP hBmp = NULL;
HRESULT hr = pImage->Extract(&hBmp);
if (SUCCEEDED(hr) && hBmp)
{
CBitmap bmp = CBitmap::FromHandle(hBmp);
// TODO
}
Компилятор ругается за pImage (типа не задеклариванно), А в методе HRESULT Load(LPCTSTR szFile) { ...}
Я не могу использовать Picture Control, там компилятор ругается за m_myPicture (Picture Control) (типа не задекларированно)
Как же мне тогда поступить и как использовать bmp (CBitmap).
Млин никак спать пойти не могу с этим Thumbnail preview.... Пожалуйста пролите свет знания...
Cпасибо
Re[11]: Thumbnail? PowerPoint? Незнаю уже что и делать.
Здравствуйте Odi$$ey
Я надеюсь вы с Английским Ладите... Если нет я перепишу, талько скажите. Просто я уже не надеялся здесь получить последнего ответа и послал вопрос в другой форум, но все же я очень благодарен Snax за рабочий пример вот только как мне его заставить работать я так понять не могу, первая часть кода работает, все условия проходят вот только проблема как же всетаки показать Thumbnail визуально на Picture Control я так и не вьехал. Вторая часть кода отвечает за визуальный эффект, и поидее она должна находиться в функции Load(...){......}. Только вот если я вставляю переменую Picture Control (m_myPicture) компилятор говорит об незадекларированной переменной в Load(....){....} ...
И так:
... The code below is working good, this is code allow you show Thumbnail, like explorer does.
So if you take a look in documentation for IExtractImage, you'll understand what im doing.
//=============================================================================================
HRESULT Load(LPCTSTR szFile)
{
CComPtr<IShellFolder> pDesktop;
CComPtr<IMalloc> pMalloc;
// Get desktop folder
HRESULT hr = ::SHGetDesktopFolder(&pDesktop);
if (SUCCEEDED(hr))
hr = ::SHGetMalloc(&pMalloc);
if (SUCCEEDED(hr))
{
USES_CONVERSION;
LPITEMIDLIST pidl = NULL;
// Get the folder for our picture file
hr = pDesktop->ParseDisplayName(m_hWnd, NULL, T2OLE(szFile), NULL, &pidl, NULL);
if (SUCCEEDED(hr))
{
CComPtr<IShellFolder> pFolder;
LPCITEMIDLIST plocal = NULL;
return hr;
}
//==================================================================================================
So the problem is: im trying to call this function from ......myDialog::OnOk()....
My program in MFS Dialog Based Application.
I have button: Ok (m_myButton)
and Picture Control: (m_myPicture)
By pressing button ok you will see Thumbail preview on Picture control. To show the preview i we should use code below:
//=====================================================================================================
HBITMAP hBmp = NULL;
HRESULT hr1 = pImage->Extract(&hBmp);
if (SUCCEEDED(hr1) && hBmp)
{
CBitmap bmp = CBitmap::FromHandle(hBmp);
// TODO
}
//====================================================================================================
This is code should be on reminder point (//Keep in you mind this is point |) (I think), "bmp" variable should hold Thumbnail image, but how i can show image using variable "bmp", m_myPicture.SetBitmap(bmp) does't work:
First can't convert CBitmat to HBitmap, and secound: in function Load(file) m_myPicture — undeclared.
Спасибо вам.
Re[11]: Thumbnail? PowerPoint? Незнаю уже что и делать.
Max>Да но в таком случае из метода ::OnOk() сделать следующее я не могу: Max> Max> HBITMAP hBmp = NULL; Max> HRESULT hr = pImage->Extract(&hBmp); Max> if (SUCCEEDED(hr) && hBmp) Max> { Max> CBitmap bmp = CBitmap::FromHandle(hBmp); Max> // TODO Max> }
это надо делать не в OnOK а где-то здесь:
WCHAR wJunk; // cchMax can be 0 but pszPathBuffer must be a valid pointer.
hr = pImage->GetLocation(&wJunk, 0, &dwPriority, &size, 16, &dwFlags);
if (E_PENDING == hr)
{
hr = S_FALSE;
TRACE(" ! E_PENDING");
}
else
{
HBITMAP hBmp = NULL;
HRESULT hr = pImage->Extract(&hBmp);
if (SUCCEEDED(hr) && hBmp)
{
m_Bitmap.FromHandle(hBmp); //CBitmap m_Bitmap;
}
else
{
TRACE(" ! SUCCEEDED(hr) && hBmp");
}
}
проверить до конца я не смог, т.к. при выпонении меня обломило — здесь —
O$>получился этот самый E_PENDING — Данные, необходимые для завершения этой операции еще не доступны.
O$>с чем это едят я думаю Snax лучше расскажет :-)
Замени IEIFLAG_ASYNC на 0.
Re[13]: Thumbnail? PowerPoint? Незнаю уже что и делать.
Млииииннн. Snax, Odi$$ey, у меня последняя, самая самая последняя прозьба.
Объясните бестолковому, как же я смогу результат проявить на Picture Control, без раздници вообще-то какой это контрол пусть даже Kodak Thumbnail Conrol или Microsoft Form 2.0 Image все одно, все из них показывают графические объекты. Дело в том что если я использую Picture Control указывая его как m_myPicture предположим, то написать:
Я не могу по двум пречинам. Первая: Это не легально Вторая: m_myPicture не задекларированная переменная (Это для меня немного не понятно, хотя в Class Wizard я указал IDC_MYPIC m_myPicture). Использовать m_myPicture.SetBitmap(...... после вызова функции в OnOk я неимею не малейшего представления как это сделать, так как из Load(LPCTSTR szFile) {....} я могу ипользовать ни одной переменной (в принципе это ясно, так же как и в Java) лишь "hr"... Только как этим "hr" пользоваться я незнаю, в принципе это HRESULT это понятно....
Ладно короче, может быть я что то делаю не правильно с самого начала, что я делаю:
1) File -> New -> MFS Wisard exe -> Dialog Based App.
2) Добавляю с контрольной панели "Picture" (default ID is IDC_STATIC)
3) в Properties переименовываю "IDC_STATIC" на "IDC_MYPICTURE", меняю тип на "Bitmap"
4) ClassWizard -> Member Variables -> Add Variable для IDC_MYPICTURE -> Variable name is "m_myPicture"
5) Добавляю событие для кнопки Ok котороя уже нахдится в диалоге. OnOk -> Edit existing
6) в "void CMyDlg::OnOK() {}" Добавляем код "Load("c:\\test.jpeg");" Будет выглядеть вот так:
void CQwerDlg::OnOK()
{
// TODO: Add extra validation here
Load("c:\\back.jpg");
}
7) Перед "void CQwerDlg::OnOK()" добавляем код "HRESULT Load(LPCTSTR szFile){}" Будет выглядеть вот так:
HRESULT Load(LPCTSTR szFile){
.......................................
.......................................
.......................................
}
void CQwerDlg::OnOK()
{
// TODO: Add extra validation here
Load("c:\\back.jpg");
}
8) эээ.... Восмого мне пока не дано так как я так и не знаю как же мне высветить, просветить показать визуально этот млин Thumbnail так его.....никогда не забуду.......
Snax, Odi$$ey пожалуйста последний рывок, шанс ... уже финиш... включите же свет мне наконец PLEASE.
У меня уже слёзы на глаза наворачиваются.... Ну все я пошел спать, голова уже ничего не соображает
Re[12]: Thumbnail? PowerPoint? Незнаю уже что и делать.
Здравствуйте Max, Вы писали:
Max>Я не могу по двум пречинам. Первая: Это не легально Вторая: m_myPicture не задекларированная переменная (Это для меня немного не понятно, хотя в Class Wizard я указал IDC_MYPIC m_myPicture). Использовать m_myPicture.SetBitmap(...... после вызова функции в OnOk я неимею не малейшего представления как это сделать, так как из Load(LPCTSTR szFile) {....} я могу ипользовать ни одной переменной (в принципе это ясно, так же как и в Java) лишь "hr"... Только как этим "hr" пользоваться я незнаю, в принципе это HRESULT это понятно.... Max>Ладно короче, может быть я что то делаю не правильно с самого начала, что я делаю:
Ясно, ясно, Load у тебя глобальная функция, а я ее сразу сделал членом диалога, чтоб не морочить голову с передачей всяких m_myPicture туда и обратно
Re[14]: Thumbnail? PowerPoint? Незнаю уже что и делать.
Здравствуйте Max, Вы писали:
Max>4) ClassWizard -> Member Variables -> Add Variable для IDC_MYPICTURE -> Variable name is "m_myPicture"
Variable какого типа? Надеюсь не строка?
Max>Snax, Odi$$ey пожалуйста последний рывок, шанс ... уже финиш... включите же свет мне наконец PLEASE. Max>У меня уже слёзы на глаза наворачиваются.... Ну все я пошел спать, голова уже ничего не соображает
Могу утешить, хотя Load у меня сейчас проходит без ошибок битмап в статике тоже что-то не показывается :-)
Так что спи спокойно, дорогой товарищ Max :)
Re[15]: Thumbnail? PowerPoint? Незнаю уже что и делать.
Извините за беспокойство но я самостоятельно нашел свою проблему, я тут просто от счастья прыгаю щас.
По любому ОГРОМНОЕ СПАСИБО ВАМ ЗА ВАШУ ПОМОЩЬ !!!!!
НЕ КОГДА ОБ ЭТОМ НЕ ЗАБУДУ!!!!!!!!! ЕСЛИ У ВАС БУДУТ КАКИЕ НИБУДЬ ПРОБЛЕМЫ (JAVA. ORACLE, MYSQL, SQL или еще какие) ПИШИТЕ МНЕ Я ВЫЛЕЗУ ИЗ ШКУРЫ НО ПОМОГУ.