Modif d'info d'une fenètre avant sa création.

Résolu
cs_hdaniel Messages postés 37 Date d'inscription vendredi 9 juillet 2004 Statut Membre Dernière intervention 18 octobre 2010 - 21 sept. 2004 à 16:55
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 - 23 sept. 2004 à 18:21
Bonjour,

je cherche a modifier l'apparence d'une fenêtre par exemple un bouton visible ou pas avant la création de la fenêtre.

pour que la fenêtre ai la bonne apparence dès sa création.

hdaniel

14 réponses

malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
23 sept. 2004 à 18:21
c'est corrigé!
3
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
21 sept. 2004 à 18:21
Fais tes manips dans WM_CREATE ou WM_INITDIALOG

ciao...
BruNews, MVP VC++
0
cs_hdaniel Messages postés 37 Date d'inscription vendredi 9 juillet 2004 Statut Membre Dernière intervention 18 octobre 2010 1
22 sept. 2004 à 09:51
J'avais déja essayé avec WM_CREATE et ça ne va pas.

je fais apparaitre le bouton avec :
m_CtrlBut.ShowWindow(SW_SHOW);
et ça me pête un popup debug assertion failed
file winocc.cpp line 301

y a peut-être un autre moyen de rendre visible un bouton.

hdaniel
0
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
22 sept. 2004 à 10:05
Moi j'utilise un BOOL:

Variable global: BOOL setVisible, ensuite lors de l'appel je fais:
case IDC_BOUTON1:
setVisible =TRUE;
return (int)DialogBox(hInst,MAKEINTRESOURCE(IDD_FENETRE),NULL,fenetreDlg); }

et dans fenetreDlg, je fais un truc genre:
if (setVisible) {
hCtrl = GetDlgItem(hWndconf, IDC_BOUTON_A_AFFICHER);
showWindow(hCtrl, SW_SHOW);
}

Voilà!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
22 sept. 2004 à 10:40
Une prochaine fois serait cool d'indiquer 'MFC' dans la question.

ciao...
BruNews, MVP VC++
0
cs_hdaniel Messages postés 37 Date d'inscription vendredi 9 juillet 2004 Statut Membre Dernière intervention 18 octobre 2010 1
23 sept. 2004 à 09:34
Bon, j'ai du mal a comprendre (j'suis pas un c++seur de longue date)

le passage par un bool tout a fais ok,

(int)DialogBox(hInst,MAKEINTRESOURCE(IDD_FENETRE),NULL,fenetreDlg); }
je comprends pas.

malik7934, quand tu dis
et dans fenetreDlg, je fais un truc genre:

c'est dans le constructeur?
fenetreDlg::fenetreDlg(CWnd* pParent )
: CDialog(fenetreDlg::IDD, pParent)

hdaniel
0
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
23 sept. 2004 à 09:49
en fait, je crois que j'ai mal compris ce que tu veux.

Ma méthode fait la chose suivante: tu es sur une fenêtre, il y a un bouton "ajouter une editbox" par exemple. En cliquant sur ce bouton, une editbox apparaît, mais en changeant de fenêtre.

Si tu veux rester au même endroit, ben y a une source sur ce site qui t'expliquera: c'est pour une progress bar, je sais plus sa référence alors la voilà:
#ifndef __PROGRESSBAR_H
#define __PROGRESSBAR_H

#include <windows.h>
#include <commctrl.h>

class ProgressBar
{
private:
HWND hBar;

public:
int MaxRan;
int MinRan;

BOOL Init(HWND hwndbar); //Initialise le controle
BOOL SetRange(int nMinRange,int nMaxRange); //Définis la position Minimale et Maximale
void Hide(BOOL bVisible); //Afiche ou Cache le controle
BOOL IsVisible(void); //Détermine si le controle est visible
int SetStep(int nStep); //Définis le pas
int SetPos(int nPos); //Définis la valeur du controle
int Increment(int nIncrement);//Incrémente de nIncrement la valeur du controle
int IncrementStep(void);//Incrémente d'un pas définis par SetStep la valeur du controle
};

BOOL ProgressBar::Init(HWND hwndbar) //Initialise le controle
{
hBar=hwndbar;

if (hBar==NULL)
    {
     return FALSE;
     }
return TRUE;
}

BOOL ProgressBar::SetRange(int nMinRange,int nMaxRange) //Définis la position Minimale et Maximale
{
if ((nMinRange<0) || (nMaxRange>65535))
    {
   return FALSE;
     }

if(SendMessage(hBar,PBM_SETRANGE,0,MAKELPARAM(nMinRange,nMaxRange))==0)
    {
     return FALSE;
     }

MinRan = nMinRange;
MaxRan = nMaxRange;

return TRUE;
}

int ProgressBar::SetStep(int nStep) //Définis le pas
{
int nOldStep;
nOldStep=SendMessage(hBar,PBM_SETSTEP,(WPARAM)nStep,0);
return nOldStep;
}

int ProgressBar::Increment(int nIncrement) //Incrémente de nIncrement la valeur du controle
{
int nOldPos;
nOldPos=SendMessage(hBar,PBM_DELTAPOS,(WPARAM)nIncrement,0);
return nOldPos;
}

int ProgressBar::IncrementStep(void) //Incrémente d'un pas définis par SetStep la valeur du controle
{
int nOldPos;
nOldPos=SendMessage(hBar,PBM_STEPIT,0,0);
return nOldPos;
}

int ProgressBar::SetPos(int nPos) //Définis la valeur du controle
{
int nOldPos;
nOldPos=SendMessage(hBar,PBM_SETPOS,(WPARAM)nPos,0);
return nOldPos;
}

void ProgressBar::Hide(BOOL bVisible) //Afiche ou Cache le controle
{
if (bVisible==TRUE)
    {
        ShowWindow(hBar,SW_SHOW);
     }
else
    {
        ShowWindow(hBar,SW_HIDE);
     }
}

BOOL ProgressBar::IsVisible(void) //Détermine si le controle est visible
{
return IsWindowVisible(hBar);
}
#endif


après, il te suffit de faire Bar1.Hide(false/true); (Bar1 est déclaré dans le cas présent "progressbar Bar1;"). T'as plus qu'à adapter!

Voilà! J'espère que c'est ce que tu voulais!

See you,Malik7934
0
cs_hdaniel Messages postés 37 Date d'inscription vendredi 9 juillet 2004 Statut Membre Dernière intervention 18 octobre 2010 1
23 sept. 2004 à 10:11
Je pense que mon problème est plus simple que ce que tu penses.

j'ai une fenêtre ou je collecte des informations.
à la fin de cette collecte, je crée une fenêtre dlgModifConf

dlgModifConf.DoModal()

dans la fenêtre dlgModifConf je veux imposer certains choix au début (en fonction des infos collectés avant).

notamment faire apparaître ou non un bouton.

donc avec un bool je peux sauver mon info tout a fais ok.
mais ou je met mon ShowWindow?

hdaniel
0
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
23 sept. 2004 à 10:26
Ben alors je reviens sur ce que je disais:

Variable global:
BOOL setBoutonVisible; /* pour avoir ton fameux bouton*/
case TRAITEMENT: /* en supposant que tu as un bouton "Traitement des infos" qu'on clique lorsque différentes radio sont cochées par exemples*/
if(SendMessage(GetDlgItem(hWnd,IDC_RADIO),BM_GETCHECK,0,0) == BST_CHECKED){/* imaginons que IDC_RADIO implique une condition */
EndDialog(hWnd,0);/*je ferme la fenêtre courante*/
setBoutonVisible = TRUE; /*je dis que je veux afficher mon bouton en plus*/
return (int)DialogBox(hInst,MAKEINTRESOURCE(IDD_FENETRE2),NULL,fenetreDlg); }/*et ouvre une nouvelle fenêtre, identique à la précédente (un clône), mais qui a les spécificités demandées par IDC_RADIO en plus*/

et dans BOOL CALLBACK fenetre(...) (qui est la même fonction qu'avait appelé ton programme et o`on à coché le radio!), je fais
if (setVisible) {
hCtrl = GetDlgItem(hWnd, IDC_BOUTON_A_AFFICHER);
showWindow(hCtrl, SW_SHOW);
}

... on y est? Je sais pas si ma méthode est "propre" mais elle a l'avantage de fonctionner ;o)
0
cs_hdaniel Messages postés 37 Date d'inscription vendredi 9 juillet 2004 Statut Membre Dernière intervention 18 octobre 2010 1
23 sept. 2004 à 14:59
J'ai bien du mal avec ton style de programmation. je pense que tu est un cran au dessus.

moi je crée mes boites de dialogue avec editeur microsoft VC6 et je fais un DoModal
et je ne me sens pas capable de passer a cette programmation cela risque de me poser plein de problème. je suis pas a l'aise avec les handles de fenêtre etc...
hdaniel
0
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
23 sept. 2004 à 15:52
T'en fais pas, on va y arriver! (j'espère ;o))

Sûr que je suis pas un cran au dessus! J'ai découvert le C y a pas 2 mois!!! Et tu peux demander à BruNews ce qu'il pense de mes connaissances ;o)

Reprenons... En mots:
Imaginons que tu as une fenêtre avec deux radios et un bouton EXECUTE. Le premier dit "afficher un bouton" et le second dit "ne pas afficher de boutons".

Je prépare la fenêtre qui va être appelée par EXECUTE en mettant, par exemple, le fameux bouton en invisible. Je mets aussi BOOL ShowMyButton comme variable globale

Bon, jusque là, rien de spécial. Ensuite je dis: lorsque je clique EXECUTE, si c'est le radio "avec bouton" qui est sélectionné, je mets mon boolean ShowMyButton à TRUE, si c'est le radio "sans bouton", je mets ShowMyButton = FALSE. Suite à ça, j'appelle la fenêtre dans BOOL CALLBACK lafenetre (...), ben il suffit d'avoir un bout de code du type if(ShowMyButton){rendre le bouton visible} else{ne rien faire}...

Voilà! Je crois pas être capable d'être plus clair! Sorry...

En code:

...
BOOL ShowMyButton;
...
case EXECUTE:if(SendMessage(GetDlgItem(hWnd,IDC_RADIO_AVEC),BM_GETCHECK,0,0) BST_CHECKED){ShowMyButton TRUE;}if(SendMessage(GetDlgItem(hWnd,IDC_RADIO_SANS),BM_GETCHECK,0,0) BST_CHECKED){ShowMyButton FALSE;}
EndDialog(hWnd,0);
return (int)DialogBox(hInst,MAKEINTRESOURCE(IDD_FENETRE2),NULL,fenetreDlg); }
...
BOOL CALLBACK fenetreDlg(...) (
if (ShowMyButton) {
hCtrl = GetDlgItem(hWnd, IDC_BOUTON_A_AFFICHER);
showWindow(hCtrl, SW_SHOW);}
...

T'as tout là! Pis si ça suffit pas, je te conseille de prendre du temps sur http://www.msdn.microsoft.com et d'étudier quelques sources sur ce site...

A+, Malik7934
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
23 sept. 2004 à 16:04
hdaniel> les handle n'ont rien de mystique, faut faire comme malik7934 et s'y mettre. On peut creer ses dialog idem avec le resource editor en codant direct API.
MSDN + Petzold ira impec:
http://brunews.free.fr/brunews/download/CP5.zip
http://brunews.free.fr/brunews/download/CP5Sources.zip

ciao...
BruNews, MVP VC++
0
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
23 sept. 2004 à 17:39
Voilà pour toi:

http://www.cppfrance.com/code.aspx?ID=26355

A+, Malik7934
0
cs_hdaniel Messages postés 37 Date d'inscription vendredi 9 juillet 2004 Statut Membre Dernière intervention 18 octobre 2010 1
23 sept. 2004 à 17:56
Je te remercie de tous les efforts que tu fais pour me mettre les points sur les i.

Par contre dans ta source, resource.h se trouve ou?

hdaniel
0