помощь новичкам » Страница 15
-Программирование на С++
Вопросец возник. Пытаюсь сделать прозрачное окно основанное на исходниках питоновского TopWindow, окно вроде как создается, но во первых битмапа в нем нет (мб неверно создаю?), а во вторых при переключении программ остается висеть кусок фона той программы, из которой запускался экзешник (та самая прозрачность), т.е при изменении фона под окном окно не меняется (Foreground Events руками ловить что ли и обновлять?)
Код создания окна:
<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:
{
<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
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);
как сделать чтоб выполнялся разный код в зависимости от ос 9.2/9.3 (стоят 2 сдк), нужно изменить инклуд, либу и работу с классом. Можно разбить на 2 сиса, (компилять разными сдк), но как бы это сделать чтоб каждый раз код не переписывать, чтоб в коде было и на случай компиляции под фп1 и под фп2... #ifdef EKA2 как я понимаю не поможет, нужно что то другое...
- «
- 1
- 2
- --
- 14
- 15
- 16
- --
- 35
- 36
- »
- #

