помощь новичкам » Страница 15

-

Программирование на С++



Derail


репутация: 317
на сайте с 2005 года
сообщений: 2253

Минск

Возраст - 40

141

waper90, определенно можно.

kolayuk


репутация: 889
на сайте с 2006 года
сообщений: 575

LG Nexus 4 (LG-E960)

Санкт-Петербург

Возраст - 35

142

на винду и винмобло точно можно (кури винапи), а под маемо только чистый С если не ошибаюсь (Труфанов писал в отчете о какой то конференции вроде), хотя кути на С это извращение, так что хз...

Derail


репутация: 317
на сайте с 2005 года
сообщений: 2253

Минск

Возраст - 40

143

kolayuk, что значит чистый С ? без плюсов?

Nokia Qt SDK, насколько я знаю, как раз поддерживает маемо и не видел еще, чтоб qt просил на С без плюсов что-то делать.

kolayuk


репутация: 889
на сайте с 2006 года
сообщений: 575

LG Nexus 4 (LG-E960)

Санкт-Петербург

Возраст - 35

144

извиняюсь, речь шла о разработке на маемо на GTK+, недосмотрел. habrahabr.ru/blogs/nokia/89046/

kolayuk


репутация: 889
на сайте с 2006 года
сообщений: 575

LG Nexus 4 (LG-E960)

Санкт-Петербург

Возраст - 35

145

Вопросец возник. Пытаюсь сделать прозрачное окно основанное на исходниках питоновского TopWindow, окно вроде как создается, но во первых битмапа в нем нет (мб неверно создаю?), а во вторых при переключении программ остается висеть кусок фона той программы, из которой запускался экзешник (та самая прозрачность), т.е при изменении фона под окном окно не меняется (Foreground Events руками ловить что ли и обновлять?)
Код создания окна:

void CApplication::ConstructL()
<span style="white-space: pre;"> </span>{
<span style="white-space: pre;"> </span>TInt MaskID;
<span style="white-space: pre;"> </span>TInt ImageID;
<span style="white-space: pre;"> </span>iWindow=CTopWindow::NewL();
<span style="white-space: pre;"> </span>if (ETrue){ImageID=0;MaskID=1;}
<span style="white-space: pre;"> </span>else {ImageID=2;MaskID=3;}
<span style="white-space: pre;"> </span>iBitmap=LoadBitmap(ImageID);
<span style="white-space: pre;"> </span>iMask=LoadBitmap(MaskID);
<span style="white-space: pre;"> </span>TInt ScrX=iWindow->ScreenDevicePtr()->SizeInPixels().iWidth;
<span style="white-space: pre;"> </span>TInt ScrY=iWindow->ScreenDevicePtr()->SizeInPixels().iHeight;
<span style="white-space: pre;"> </span>TInt BitX=iBitmap->SizeInPixels().iWidth;
<span style="white-space: pre;"> </span>TInt BitY=iBitmap->SizeInPixels().iHeight;<span style="white-space: pre;"> </span>
<span style="white-space: pre;"> </span>iWindow->RWindowPtr()->SetPosition(TPoint(ScrX/2-BitX/2, ScrY/2-BitY/2));
<span style="white-space: pre;"> </span>iWindow->RWindowPtr()->SetSize(iBitmap->SizeInPixels());
<span style="white-space: pre;"> </span>iWindow->PutImageL(iBitmap, iMask);
<span style="white-space: pre;"> </span>iWindow->ShowL();
<span style="white-space: pre;"> </span>
<span style="white-space: pre;"> </span>}
  
CFbsBitmap* CApplication::LoadBitmap(TInt aID)
<span style="white-space: pre;"> </span>{
<span style="white-space: pre;"> </span>CFbsBitmap* Bitmap = new (ELeave) CFbsBitmap();
<span style="white-space: pre;"> </span>Bitmap->Load(KMBMPath, aID);
<span style="white-space: pre;"> </span>return Bitmap;
<span style="white-space: pre;"> </span>}


Модернизированный TopWindow:

void CTopWindow::PutImageL(CFbsBitmap* aBitmap, CFbsBitmap* aMask)
{
<span style="white-space: pre;"> </span>iGc->Activate(*iWindow);
<span style="white-space: pre;"> </span>TRect DrwRect(TPoint(0, 0), iWindow->Size());
  iWindow->Invalidate(DrwRect);
  iWindow->BeginRedraw();
<span style="white-space: pre;"> </span>iGc->BitBltMasked(TPoint(0, 0), aBitmap, aBitmap->SizeInPixels(), aMask, EFalse); // битмап с белым фоном, маска - черное где должно быть прозрачно, белое - где картинка
<span style="white-space: pre;"> </span>iWindow->EndRedraw();
<span style="white-space: pre;"> </span>iGc->Deactivate();
  iSession->Flush();
  


Кто то знает как поправить? И если сделать через спрайты RWsSprite (с ними кто нибудь работал?), то тоже руками обновлять надо будет при изменении активного приложения?
-------------
добавлено в 20.43: блин этот новый редактор... Тут код https://paste.org.ru/?a4t5ew 

watt


репутация:
на сайте с 1970 года
сообщений:

146

kolayuk, просто включи поддержку тем

----------------

в АppUi - BaseConstructL(EAknEnableSkin)

----------------

в AppView

_в конструкторе - iBackground = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse );

_в Draw

MAknsSkinInstance* skin = AknsUtils::SkinInstance();

MAknsControlContext* cc = AknsDrawUtils::ControlContext(this);

AknsDrawUtils::Background( skin, cc, this, gc, aRect );

_добавить метод -

TTypeUid::Ptr CViewServerAppView_0::MopSupplyObject( TTypeUid aId )

{

if ( aId.iUid == MAknsControlContext::ETypeId && iBackground )

{

return MAknsControlContext::SupplyMopObject( aId, iBackground );

}



return CCoeControl::MopSupplyObject( aId );

}
~~~~~~~~~~~
спрайты сами выводятся поверх всех окон
Construct( CEikonEnv::Static()->RootWin(), TPoint(0, 0), ESpriteNoChildClip);

_APTEM_


репутация:
на сайте с 1970 года
сообщений:

147

watt,
Окно, закрашеное AknsDrawUtils::Background( skin, cc, this, gc, aRect ), и прозрачное окно - разные вещи.
kolayuk,
Попробуй перерисовывать при каждом изменении активного приложения.

kolayuk


репутация: 889
на сайте с 2006 года
сообщений: 575

LG Nexus 4 (LG-E960)

Санкт-Петербург

Возраст - 35

148

у меня консольное приложение так что нету AppUi и прочего...
-------------
добавлено в 10.48: кстати, ладно я отловлю переключение приложений, но почему картинки то нет? у меня просто прозрачный кусок. Может я битмап неверно загружаю?

DzybbA


репутация: 371
на сайте с 2006 года
сообщений: 97

Nokia E7-00

Екатеринбург

Возраст - 42

149

Глупый наверно вопрос но что делает функция flush в рвссессии

kolayuk


репутация: 889
на сайте с 2006 года
сообщений: 575

LG Nexus 4 (LG-E960)

Санкт-Петербург

Возраст - 35

150

как сделать чтоб выполнялся разный код в зависимости от ос 9.2/9.3 (стоят 2 сдк), нужно изменить инклуд, либу и работу с классом. Можно разбить на 2 сиса, (компилять разными сдк), но как бы это сделать чтоб каждый раз код не переписывать, чтоб в  коде было и на случай компиляции под фп1 и под фп2... #ifdef EKA2 как я понимаю не поможет, нужно что то другое...