Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > alexcon314

Рейтинг: 5.00. Голосов: 2.

Пишем свою оболочку для FP под Windows. Шаг 0.

Запись от alexcon314 размещена 16.05.2011 в 01:42
Обновил(-а) alexcon314 17.04.2013 в 11:38

Эпиграф:.
Цитата:
- А не замахнуться ли нам, понимаете ли, на Вильяма нашего Шекспира?
- А что! И замахнемся!
Этой статьей, я начинаю цикл статей о том, как написать собственную оболочку для флеш-плеера. Да пребудет с нами сила!
Вступление.
Так вышло, что приоритетной темой для меня на форуме стала «Flash приложения». Речь идет о приложениях для десктопа, написанных «почти» на флэше. Т.е. об оболочках. Несомненно, такие продукты, как MDM Zinc, f-in-box, SWFKit и им подобные знакомы тем, кто хоть раз писал такое приложение. Пользовался ими и я, точнее, главным образом цинком. Потому, о нем и буду по большей части упоминать.
С каждым годом я все чаще стал приходить к мысли, что эти монстры (ну, за исключением быть может f-in-box, кто знает – поймет) избыточны в 80-90% случаев их практического применения. Типичные вопросы с форума – как запустить пдф из флеша? как убрать рамку окна проектора? как сменить иконку? как обратиться к реестру? и т.п.
И что, для этих пустяков покупать и юзать цинк? Смехоподобно. Конечно, есть темы и посложнее. Тем не менее, махина цинка, порой тяжелая и неповоротливая зачастую просто не нужна в основном своем объеме. Тем более, даже для нее, порой, приходится писать расширения.
А что если самому сделать, что называется, «движок» оболочки?
Имея его в руках, надстроить его в нужный момент и в нужную сторону несложно. Зачем платить за фтп-клиента, встренного в цинк, если вы им пользоваться и не предполагаете? Надо будет – да сам напишу, как мне надо. И оставлю как библиотечку на будущее, а может еще и с добрыми людьми поделюсь.
Вот и выходит, что цинк – это просто быстрый путь, не более. Для начинающих и для тех, кому, вобщем-то, по-боку, работает и ладно. Это не для меня .
Неизбежные оговорки.
Я не буду кого-либо пытаться учить чему-либо. Я просто рассказываю, как можно добиться желаемого результата. Вы сами решите, следует ли взяться за напильник-кувалду. Я не в обиде.
Будут встречаться чисто мои изложения каких-то понятий – тут тоже не буду спорить, если кто-то сочтет их не на уровне.
Смысл всей этой затеи – показать, что самому написать оболочку совсем нетрудно, и показать пример.
Еще. Я расскажу о способах использования плеера, возможно, не укладывающихся в лиц. соглашения с Адобом. Это не означает, что я так делаю, и призываю так делать остальных. Тут сами решайте, использовать или нет. Люди взрослые.
Конечно, я не сам до всего допер. Хвала Интернету, блоггерам, и просто хорошим людям.
Особое внимание я уделил вопросу инструментов. Все они могут быть и должны быть официально бесплатными. Вот так вот.
И будут это VSС++2008Express и FlashDevelop.
Я не буду разжевывать пошагово каждый клик, типа «как создать новый проект в студии».
И выкладывать скрины на эти технические телодвижения тоже не буду.
Оболочка исключительно будет работать только на Windows. Не так плохо для начала.
Почему С++? Эта «планета» ближе всего стоит к центру галактики с названием “Win API”. Если вы поймете, как это сделать на C++ и Win API, вы поймете, как это сделать на любом другом языке.
Ну, и конечно, я готов ответить на интересующие вопросы. Welcome!
Готовим инструменты.
Сегодня мы подготовим и опробуем VSС++2008Express.
Поставить экспресс-студию можно двумя способами: фулл и экономно.
Фулл - это VS2008ExpressWithSP1RUSx1504736.iso (819.5Mb)
(http://www.microsoft.com/downloads/r...6-d100c872ec60). Тут вам и С++, и С#, и VB.NET, и еще какая-то шибко крутая штука под названием Web Development.
Экономно - это web-инсталлятор vcsetup.exe (2.6Mb)(http://www.microsoft.com/downloads/e...displaylang=en).
В экономе загрузится только C++, что составит от 80 до 180 Мб (зависит от состояния вашей ОС), но интерфейс будет английским.
Инсталляция - процесс, несомненно, простой. Что бы вы не выбрали, а выбирать там особо и нечего, вы получите желаемое - MSVS C++ Express Edition 2008 во всей красе как минимум. При запуске она, возможно, попросит вас зарегаться на сайте микрософта, потом вам на мыло вышлют ключ регистрации. Введете его в окошечко на соответствующей форме в студии и все.
Об установке FlashDevelop говорить не буду, ибо флешерский форум. Поначалу он и не понадобится.
Первый выход в свет.
Открыв студию, создадим проект Win32 (условно назовем его test0). Студия создаст несколько дефолтных файлов. Прежде чем двигать дальше, зайдите в свойства проекта: C/C++ - Предварительно скомпилированные заголовки-Создавать или использовать… Здесь выставьте «Не использовать предварительно скомпилированные заголовки». И еще Компоновщик - Общие - Включить инкрементную компоновку выставьте "Нет (/INCREMENTAL:NO)". Это специфика.
Скопипастим код отсюда в файл test0.cpp: (полностью замените то, что там у вас оказалось по дефолту):
Код AS3:
// (Оригинал на http://www.codeproject.com/KB/cpp/FlashGui.aspx)
// Для работы примера нужно, чтобы на вашем компьютере был установлен флеш-плеер.
 
#include <windows.h>
#import  "PROGID:ShockwaveFlash.ShockwaveFlash" named_guids no_namespace raw_interfaces_only no_auto_exclude rename("IServiceProvider","IServiceProvider2")
 
typedef HRESULT (WINAPI *LPAtlAxWinInit)   ();
typedef HRESULT (WINAPI *LPAtlAxGetControl)(HWND hwnd, IUnknown** unk);
 
int WINAPI WinMain(HINSTANCE inst,HINSTANCE prev,LPSTR cmd,int show) {
    LPAtlAxWinInit    lpAtlAxWinInit    = (LPAtlAxWinInit)   GetProcAddress(LoadLibrary(L"atl"),"AtlAxWinInit"); 
    LPAtlAxGetControl lpAtlAxGetControl = (LPAtlAxGetControl)GetProcAddress(LoadLibrary(L"atl"),"AtlAxGetControl"); 
    MSG        msg;   
    HRESULT  hr = lpAtlAxWinInit();  
    HWND      hwnd = CreateWindowW(L"AtlAxWin",L"ShockwaveFlash.ShockwaveFlash",
                                                    WS_VISIBLE|WS_POPUP,0,0,
                                                    GetSystemMetrics(SM_CXSCREEN),
                                                    GetSystemMetrics(SM_CYSCREEN),
                                                    0,0,0,0); 
    IUnknown*       unkn = 0;
    IShockwaveFlash* flash = 0;
    lpAtlAxGetControl(hwnd, &unkn);
    unkn->QueryInterface(__uuidof(IShockwaveFlash),(void**)&flash);
    flash->LoadMovie(0,L"http://www.screenvader.com/_ROOT.swf");
    while (GetMessage(&msg,0,0,0)) {
        TranslateMessage(&msg);
        DispatchMessage( &msg); 
    }
}
Жмем F5 (компиляция и старт). Если у вас живой интернет, то вы увидите некий ролик с плавающими буквами-цифрами-фотками. Ролик будет занимать всю площадь экрана монитора.
Получилось? Ну, вот. Мы только что написали простую оболочку для FP.
Подкупающая простота, не так ли? 20 строчек кода…
В следующей статье творчески разовьем эти 20 строчек в 5, поговорим более подробно об ATL и FP.

UPD.
Для работы вполне подходят и более поздние выпуски MS VS C++ Express, например 2012 (C++ есть в версии для Desktop).
Вообще, MS VS 2012 меня лично порадовала, например, тем, что появился человеческий автокомплит и раскраска для сишного кода. А еще с ней на борту идет вполне приличный SDK (хоть и без MFC с ATL). Но его можно поставить отдельно и кодить практически свободно.
http://www.microsoft.com/en-us/downl....aspx?id=11800
(Или в гугле grmwdk windows 7)
Вложения
Тип файла: zip test0.zip (21.0 Кб, 168 просмотров)
Всего комментариев 12

Комментарии

Старый 16.05.2011 10:44 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Не хочу показаться банальным, но - "автор, пиши еще!" =)
Старый 16.05.2011 11:54 -De- вне форума
-De-
 
Аватар для -De-
а это
http://code.google.com/p/flash-to-directx/ (via http://dtf.ru/forum/thread.php?id=315148#m315148) видели?
Тоже довольно просто, как по мне.
Старый 16.05.2011 12:39 alexcon314 вне форума
alexcon314
Цитата:
а это видели?
Нет, именно этого я не видел. Я бы не сказал, что это "довольно просто" для неискушенных. Скажем, проект по ссылке, что называется, "из коробки", у меня отказался собраться. Про DirectX+Flash я слышал, это уже производная второго порядка, типа того..
Примеров, вобщем-то, есть в инете, никто на спорит. Хочется попробовать изложить по-своему. Потом, в планах несколько больше, чем просто "завести" элементарный двиг для хоста плеера. Но "сажать" на свой блог никого не намерен, боже упаси!
ЗЫ. Кстати, спасибо за ссылку.
Обновил(-а) alexcon314 16.05.2011 в 12:57
Старый 16.05.2011 15:05 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
А мне вот приятнее нашего камрада читать. Пиши ещё)
Старый 16.05.2011 17:09 КорДум вне форума
КорДум
 
Аватар для КорДум
Офигенно!
А возможно ли переделать сие не на WinAPI, а на Qt/GTK/System Calls (чего там точно...) для линукса? =)
Старый 16.05.2011 17:22 alexcon314 вне форума
alexcon314
Цитата:
А возможно ли переделать сие не на WinAPI, а на Qt/GTK/System Calls (чего там точно...) для линукса?
Смотря что понимать под "переделать" . Теоретически, да и практически, думаю, аналог воплне возможен. Как только доведу текущую тему до более или менее логического финиша (пусть и промежуточного), хочу покопать и в этих огородах.
Старый 17.05.2011 03:30 Котяра вне форума
Котяра
 
Аватар для Котяра
Извини за своеволие, но отформатировал твой code на AS3 - не форматирование плюсов, но хоть чуток расцвело.
А flash-to-directX вовсю используют на одной MMO игры (battlehearts)
Большая часть гуя там сделана на флэше.
Обновил(-а) Котяра 17.05.2011 в 04:14
Старый 17.05.2011 08:32 alexcon314 вне форума
alexcon314
Цитата:
flash-to-directX вовсю используют
Значит я недооцениваю эту фичу. Всегда почему-то думал, что прибавка в скорости рендера тут незначительная.
Что ж, можно подумать про "прикрутить". Да собственно, чего тут думать-то, все уже придумано).
ЗЫ. Спасиб за раскраску, учту на будущее).
Обновил(-а) alexcon314 17.05.2011 в 09:06
Старый 17.05.2011 13:37 -De- вне форума
-De-
 
Аватар для -De-
flash-to-directX используют только в directX приложениях, прибавка скорости по сравнению с "просто" плеером там по идее отрицательная (хоть наверное и незначительная). По другому-то в directX приложение флеш не засунуть-то нормально. Так что если у вас просто оболочка для плеера, то не оч. понятен смысл туда директ пихать %) Мне там понравился скорее "wrapper for calling and receiving calls from Action Script".
Старый 17.05.2011 19:21 incvizitor вне форума
incvizitor
 
Аватар для incvizitor
Цитата:
1>d:\works\self\dotnet\fp_wrappers\test0\test0\test0\test0.cpp(5): warning C4627: '#import "PROGID:ShockwaveFlash.ShockwaveFlash"': skipped when looking for precompiled header use
И вновь, только у меня руки - крюки =)
Старый 17.05.2011 23:47 alexcon314 вне форума
alexcon314
Цитата:
Прежде чем двигать дальше, зайдите в свойства проекта, C/C++ - Предварительно скомпилированные заголовки-Создавать или использовать… Здесь выставьте «Не использовать предварительно скомпилированные заголовки». Это специфика.
это делали?
Старый 18.05.2011 15:32 incvizitor вне форума
incvizitor
 
Аватар для incvizitor
О, спасибо)) круть!))
 

 


Часовой пояс GMT +4, время: 18:49.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.