begin process at 2012 05 29 05:58:36
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Graphique

 > 

Une fenetre animee transparente


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Une fenetre animee transparente

vendredi 2 mai 2003 à 12:19:25 | Une fenetre animee transparente

anthraxx

Anthrax ignisque -- Le charbon et le feu

C la seconde foi ke je poste sur ce sujet, mais j'ai un autre probleme.

En gros: j'ai une fenetre transparente (creee avec WS_EX_TRANSPARENT) que je dessine (BitBlt) en reponse aux WM_PAINT, et que je deplace sur l'ecran (SetWindowPos) en reponse à WM_TIMER.

Le but est de faire une ebauche de screen mate. (un ver en l'ocurence, d'ou les noms de fonction en "Worm" pour qui n'aurait pas compris)
Malheureusement, la fenetre, qui est au premier plan (HWND_TOPMOST):
-si elle a le focus, est invisible (bien qu'elle se deplace quand meme)
-si elle perd le focus, elle se deplace et est animee à peu pres correctement (à part un clignotement de temps en temps)

Je trouve ce comportement pour le moins etrange...
Aidez-moi svp!







Des extraits du code:

// Lors de l'enregisterment de la classe, entre autres parametres:
wcex.style=CS_DBLCLKS|CS_OWNDC|CS_SAVEBITS;
wcex.hbrBackground = (HBRUSH)(GetStockObject(HOLLOW_BRUSH));

// Lors de la creation de la fenetre:
// parametres: WS_VISIBLE|WS_POPUP
// parametres etendus: WS_EX_TOOLWINDOW|WS_EX_TRANSPARENT

// Dans WndProc:

case WM_CREATE:
hdc=GetDC(hwnd);
SetWormImage(); // charge un bitmap par defaut
InvalidateRect(hwnd,NULL,TRUE); // et demande de redessiner la fenetre
ReleaseDC(hwnd,hdc);
SetTimer(hwnd,1,100,NULL);
break;

case WM_TIMER:
hdc=GetDC(hwnd);
UpdateWorm(hwnd,hdc); // deplace la fenetre, change l'animation, et fait redessiner
ReleaseDC(hwnd,hdc);
break;

case WM_PAINT:
hdc=BeginPaint(hwnd, &ps);
DrawWorm(hwnd,hdc); // redessine le bitmap sur la fenetre
EndPaint(hwnd, &ps);
break;
// ...

void UpdateWorm(HWND hwnd, HDC hdc)
{
// ... ici du code qui fait des trucs de base:
// ... verifie que la fenetre est toujours dans l'ecran, met à jour wWorm.frame...

// wWorm.frame c'est l'ID du bitmap qui est sensé être chargé
// wWorm.actualframe c'eset l'ID du bitmap chargé en ce moment

if (wWorm.actualframe!=wWorm.frame) SetWormImage();
SetWindowPos(hwnd,HWND_TOPMOST,wWorm.x,wWorm.y,wWorm.width,wWorm.height, SWP_NOACTIVATE|SWP_NOREPOSITION); // deplace la fenetre
InvalidateRect(hwnd,NULL,TRUE); // declenche WM_PAINT
// à la limite on pourrait s'en passer puisque SetWindowPos declenche WM_PAINT aussi
// mais j'ai essayé, et ça ne resoud pas le probleme
}


void SetWormImage( void )
{
DeleteObject(hWormBmp); // supprime l'ancien bitmap
hWormBmp=LoadBitmap(hInst,MAKEINTRESOURCE(wWorm.frame)); // et charge le nouveau BITMAP bm;
GetObject(hWormBmp,sizeof(bm),&bm); // il nous faut obtenir les dimensions de l'image wWorm.width=bm.bmWidth;
wWorm.height=bm.bmHeight;
wWorm.actualframe=wWorm.frame;
}


Cette discussion est classée dans : fenetre, hwnd, hdc, green, wworm


Répondre à ce message

Sujets en rapport avec ce message

Screenmate defectueux [ par anthraxx ] Anthrax ignisque -- Le charbon et le feu J'essaye de faire un screenmate (une petite bestiole se promenant sur les fenetres), mais n'etant pas tres ex Fenetre au premier plan [ par SnOOpss ] Bonjour suite a mon probleme de capture d'ecran on resolu (cf http://www.cppfrance.com/forum.v2.aspx?ID=631298) j'ai essayé de prendre mon probleme au Ligne comande processus avec hwnd fenetre [ par unrealgun ] Bonjour, Je voudrais savoir comment obtenir le handle, la ligne de commande, le nom d'exe et le ID du processus correspondant a une fenetre dont j'ai Contrôle windows sur surface DirectDraw [ par rom2n ] Bonjours a tous, je suis en train de développer un jeu en 2D avec DirectDraw et je voulais savoir comment on pouvais affiché un contrôle windows sur u check-mark bitmap [ par mat74 ] salut à tous, voila j'aimerai mettre des icones devant le texte dans le menu et j'y suis presque arrivé. </T [api]Plusieurs images dans un dcMem, ou plusieurs dcMem [ par hoGan ] Bonjour à tous,j'aimerais pouvoir afficher plusieurs images l'une à la suite de l'autre en cliquant plusieurs fois sur un bouton. Voici la façon dont Obtenir un handle d'un fenetre Winform sous la forme d'un HWND [ par gwenCPP ] Bonjour, J'ai crée une application WinForm avec visual studio c++ 2003.NET. J'ai besoin d'obtenir un handle de ma fenetre principale et de le convert LRESULT CALLBACK dans une class [ par TeniX ] Salut, Je crée une class PRINCIPAL qui memorise la class WNDCLASSEX class PRINCIPAL { public: HINSTANCE hinstance; HWND hwndp Nettoyer la fenetre windows [ par bordeaux ] Bonjour,je viens de faire ma premiere application grpahique et je remarque que lorsque le call_back WS_PAINT est appele,il ne nettoie pas la fenetre.c Copier un tableau de couleur vers la fenetre [ par supergrey ] Bonjour, je voudrais copier les données d'un tableau de char contenant des valeurs RGB vers la fenetre de mon application.J'ai chercher mais je ne tro


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,390 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales