Вывод ответа #1863091132

-

помощь новичкам

kolayuk


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

Пост № 1863091132

Вопросец возник. Пытаюсь сделать прозрачное окно основанное на исходниках питоновского 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 


ответ опубликован:
Рейтинг: 5
голосов: 2