begin process at 2012 05 30 19:54:00
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Win Api : redessiner une fenêtre


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

Win Api : redessiner une fenêtre

mardi 22 août 2006 à 19:32:06 | Win Api : redessiner une fenêtre

acryline

Bonjour déjà

Bon voilà mon problème et je seche depuis quelques heures dessus. Ce serait sympa de m'aider .

Je fais un petit programme en API windows . J'ai dessiné une fenêtre, une image de fond, quelques boutons... J'aimerais pouvoir redessiner cette fenêtre quand je presse sur un bouton.

Les notifications des boutons sont testées dans "case WM_COMMAND" par une fonction de mon cru dans laquelle une structure de deux termes(  BOOL)  est mise à jour et qui est retournée par cette fonction..... ok ? ( En fait leurs valeurs sont inversée. )

J'ai vérifié, sous WM_COMMAND la structure est bien modifiée en passant pas la fonction en question.
Alors j' utilise la fonction InvalidateRect comme ceci pour forcer le message WM_PAINT.

if (temoins.liste) InvalidateRect(hwnd, 0, TRUE);

Passons au code de case WM_PAINT :

 case WM_PAINT:
            {
                HDC hdc =NULL;
                PAINTSTRUCT ps;
                hdc = BeginPaint(hwnd,&ps);
                if(temoins.couv) dessinerCouverture (hwnd,hdc,ps, "Carnet                                              d'adresses",hBouton); // la fonction
                if(temoins.liste) exit(0);  //pour voir si ça passe ...et non ! :(
                EndPaint(hwnd, &ps);
                return 0;
            }
        return 0;
Comme vous l'avez compris,  ma fenêtre ne se ferme pas quand temoins.liste =TRUE. Pourquoi ??
J'aimerais bien pouvoir dessiner ma fenêtre avec une autre fonction quand temoins.liste =TRUE.

Merci pour votre réponse.




mardi 22 août 2006 à 19:41:51 | Re : Win Api : redessiner une fenêtre

vecchio56

Administrateur CodeS-SourceS
if (temoins.liste)
{
  InvalidateRect(hwnd, 0, TRUE);
  UpdateWindow(hwnd);
}

Comme ca tu es sur que la valeur de
temoins.liste ne changera pas entre temps

_____________________________________
Un éditeur de ressources gratuit pour Windows

mardi 22 août 2006 à 19:49:09 | Re : Win Api : redessiner une fenêtre

racpp

Administrateur CodeS-SourceS
Salut,
Comment est déclarée ta structure? en global ou en static dans la procédure de la fenêtre?

mardi 22 août 2006 à 19:51:57 | Re : Win Api : redessiner une fenêtre

acryline

Je viens d'essayer ta solution mais la fenêtre reste ouverte .
Bon ça m'évite déjà de prendre le risque que le message change effectivement.

Voici ma fonction au cazou...

TEMOINS messagesBoutonsCouv( HWND hwnd,HWND *hBouton, UINT uMsg ,
                            WPARAM wParam, LPARAM lParam, TEMOINS temoins)
{
      static long i=0,j=0;
        for(i=0;i<27;i++)
           {
            if(HIWORD(wParam)== BN_CLICKED)
            {
              if(lParam== (LPARAM)hBouton[i])
               {
                   for(j=0;j<27;j++) {DestroyWindow(hBouton[j]); }
                   //les boutons s'effacent pour ça pas de problème
                   temoins.couv=FALSE;
                   temoins.liste=TRUE;
               }
            }
           }
           return temoins;
  }

mardi 22 août 2006 à 19:54:11 | Re : Win Api : redessiner une fenêtre

vecchio56

Administrateur CodeS-SourceS
La structure TEMOINS est passée par valeur, donc les changement sont pas pris en compte dans la fonction originale. Passe un pointeur de la structure, ou mets la en variable globale

_____________________________________
Un éditeur de ressources gratuit pour Windows

mardi 22 août 2006 à 19:54:40 | Re : Win Api : redessiner une fenêtre

acryline

La structure est  en static et ça marche pas ...
mardi 22 août 2006 à 19:59:06 | Re : Win Api : redessiner une fenêtre

acryline

Je vais esayer mais ça va me prendre un peu de temps... moi les pointeurs j'aime pas ça lol et le variables globales j'essaie d'éviter...

à plus pour les nouvelles :!

et surtout merci pour vos réponses... c'est hyper rapide !
mardi 22 août 2006 à 20:03:45 | Re : Win Api : redessiner une fenêtre

acryline

J'ai essayé en globale et en pointeur et ni l'un ni l'autre ne fonctionnent !!
Quel casse tête !
mardi 22 août 2006 à 20:05:12 | Re : Win Api : redessiner une fenêtre

vecchio56

Administrateur CodeS-SourceS
void messagesBoutonsCouv( HWND hwnd,HWND *hBouton, UINT uMsg ,
                            WPARAM wParam, LPARAM lParam, TEMOINS* temoins)
{
  remplacer tous les temoins. par des temoins->
  rien a retourner
}

Mais j'ai un doute, je vois que ta fonction retourne une structure TEMOINS donc si tu l'affectais à la variable d'origine, ce devrait peut être marcher. Par contre utiliser un pointeur est plus performant

_____________________________________
Un éditeur de ressources gratuit pour Windows

mardi 22 août 2006 à 20:08:43 | Re : Win Api : redessiner une fenêtre

racpp

Administrateur CodeS-SourceS
Pour les variables globales, on doit les éviter tant que possible. Les pointeurs sont au contraire indispensables en programmation C/C++. Ta fonction messagesBoutonsCouv() prend un pointeur comme 2ème paramètre.
Tu sais ce n'est pas toujours facile de trouver une erreur à partir d'un morceau de code. Il faut voir la totalité du code si c'est possible.

1 2 3 4 5

Cette discussion est classée dans : fonction, liste, wm, fenêtre, temoins


Répondre à ce message

Sujets en rapport avec ce message

CListBox [ par wanny ] Bonjour.Dans une classe d'une fonction, je déclare une autre classe (avec une boite de dialogue à afficher) :Dans la boite de dialogue, il y a une CLi ShowWindow() [ par JCpp ] ShowWindow(hdlg,SW_HIDE);Je viens de comprendre pourquoi quand je cache une fenêtre, elle n'apparaît pas avec la fonction : ShowWindow(hdlg,SW_SHOW);E gestion de la souris dans une fenêtre OpenGL [ par philmus ] salut, je commence à écrire des petits pgs OpenGL; maintenant, je doit gérer l'entrée (clavier et souris) pour interagir avec l'utilisateur. Le pb ajouter fonction: "réduire la fenêtre" [ par alanbraxe31 ] http://membres.lycos.fr/alanbraxe31bonjour tt le monde!je suis novice en c++ et je ne sais pas comment faire pour ajouter la fonction réduction à mon Taille minimum pour une fenêtre [ par vecchio56 ] BonjourComment faire pour empecher une fenêtre de faire moins qu'un certaine taille. Faut-il traiter WM_SIZE ou WM_SIZING en comment?Merci prototype de fonction [ par loupin ] D'abord bonjour a tous. Je debute en c tant bien que mal, mais j'ai un tout petit souci qui n'en ai pas un mais j'aimerais comprendre. Alors voici le Probleme de Timer avec SetCursorPos [ par Maegis ] Voila je fais une appli Win32 qui necesite l'emploi d'un timerLe probleme c'est que je ne recois jamois le message WM_TIMER ,en fait je le recois si j Largeur d'un menu [ par ymca2003 ] Bonjour,y a t'il une fonction (Win32 ou MFC) permettant de connaître la largeur du menu associé à une fenêtre ou pour ajuster la taille de la fenêtre activer une fenetre dans une appli MDI [ par arno2004 ] Bonjourj'ai récupérer un éditeur de dessin. j'y est ajouter une fonction'ci dessous) pour copier une zone sélectionnée dans une nouvelle fenêtre. la f [Visual C] Comment rediriger des fprintf() vers une fenêtre windows [ par castelj ] Bonjour,Débutant en programmation windows, mon problème est que j'aimerai savoir comment est-ce que l'on peut faire des fprintf dans une fenetre Windo


Nos sponsors


Sondage...

Comparez les prix

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,468 sec (4)

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