/ Vytvorenie vlastného transparentného ovládania - mfc, ovládacie prvky, priehľadnosť, alphablending, z-order

Vytvorenie vlastného transparentného ovládania - mfc, ovládacie prvky, priehľadnosť, alphablending, z-order

Snažím sa vytvoriť vlastnú kontrolu, ktorá zobrazuje bitmapu s alphablendom na pixel (ako niektorí z vás už vedia pre iné otázky).

Práve teraz používam vlastnú kontrolu veditora zdrojov a pripojil som ho k triede odvodenej od CWnd. Keď si zaregistrujem svoju vlastnú triedu, nastavím hbrBackground štruktúry WNDCLASS na NULL_BRUSH na dosiahnutie transparentnosti ovládacieho prvku.

V okne OnPaint ovládacieho prvku používam AlphaBlend na maľovanie bitovej mapy alfa-pixelovej zmesi.

To funguje pomerne dobre, ale mám tieto dva problémy:

  • Chcem zmeniť zobrazenú bitovú mapu, keďmyš je nad kontrolou. Keď je ovládací prvok transparentný, oblasti, ktoré jedna bitová mapa nie sú prekryté inou bitovou mapou, sa nevymažú. Ako môžem vymazať pozadie pri zmene obrázka?

  • Druhý problém súvisí s dvomaprekrývajúce sa ovládacie prvky. Moja kontrola je namalovaná nad inou kontrolou, ktorá má gradient (v skutočnosti je vnútri inej kontroly). Problém je v tom, že ak vložím kontrolu predtým v z-poradí, ostatné ovládacie prvky prekrývajú moju kontrolu a moja nie je zobrazená. Ak dal som iný ovládač predtým v z-order, nemôžem dostať správu myši pod moju kontrolu.

Možno robím niečo zlé alebo sa mýlim v tom, ako sa snažím vykonať svoju kontrolu. Akákoľvek pomoc by bola ocenená.

Vďaka,

Javier

odpovede:

1 pre odpoveď č. 1

Budem mať šancu. :-)

To by vám malo poskytnúť všetko, čo potrebujete na dosiahnutie toho, čo si myslím, že chcete.

Všeobecné riešenie pre transparentné ovládanie

Čo sa týka problémov s objednávkou Z, objednávka z neovplyvňuje prioritu správy. Musíte zadať určitý kód, aby sme mohli určiť, čo sa tam deje.