IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Freeze d'une CDialog.


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 70
    Par défaut Freeze d'une CDialog.
    Bonjour,
    Comme dans beaucoup de programme, suite à l'initialisation de la fenêtre principale, le programme ouvre une boîte de dialogue modale pour demander des information. Le problème est que cette boîte se bloque et plus aucune action n'est possible.

    Voici le header de la boîte de dialogue SysView.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #pragma once
    #include "usb_comp.h"
    // Boîte de dialogue CSysView
     
    class CSysView : public CDialog
    {
    	DECLARE_DYNAMIC(CSysView)
     
    public:
    	CSysView(CWnd* pParent = NULL);   // constructeur standard
    	virtual ~CSysView();
     
    // Données de boîte de dialogue
    	enum { IDD = IDD_CONFIG_SYSTEM_FORM };
     
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // Prise en charge de DDX/DDV
    	void enOK();
    	bool b_echap;
     
    	DECLARE_MESSAGE_MAP()
    public:
     
    	usb_comp *TelUSB;
    	virtual BOOL OnInitDialog();
     
    	int OnBnClickedBtn(int ID, int RQ);
    	virtual BOOL PreTranslateMessage(MSG* pMsg);
     
    	int m_Id_Tel;
    	int m_ALTF4;
    	int m_ALTTAB;
    	int m_mode_souris;
    	int m_audio;
    	int m_video;
    	int m_explorateur;
    };
    Ensuite, le code de la fenêtre Sysview.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    #include "stdafx.h"
    #include "TelUSB.h"
    #include "usbrq.h"
    #include "SysView.h"
     
    // Boîte de dialogue CSysView
     
    IMPLEMENT_DYNAMIC(CSysView, CDialog)
     
    CSysView::CSysView(CWnd* pParent /*=NULL*/)
    	: CDialog(CSysView::IDD, pParent)
    	, m_Id_Tel(0)
    	, m_ALTF4(0)
    	, m_ALTTAB(0)
    	, m_mode_souris(0)
    	, m_audio(0)
    	, m_video(0)
    	, m_explorateur(0)
    {
     
    }
     
    CSysView::~CSysView()
    {
    }
     
    void CSysView::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Text(pDX, IDC_ID_TEL_EDIT, m_Id_Tel);
    	DDX_Text(pDX, IDC_ALTF4_EDIT, m_ALTF4);
    	DDX_Text(pDX, IDC_ALTTAB_EDIT, m_ALTTAB);
    	DDX_Text(pDX, IDC_MDSOURIS_EDIT, m_mode_souris);
    	DDX_Text(pDX, IDC_AUDIO_EDIT, m_audio);
    	DDX_Text(pDX, IDC_VIDEO_EDIT, m_video);
    	DDX_Text(pDX, IDC_EXPLORATEUR_EDIT, m_explorateur);
    }
     
     
    BEGIN_MESSAGE_MAP(CSysView, CDialog)
    END_MESSAGE_MAP()
     
     
    // Gestionnaires de messages de CSysView
     
    BOOL CSysView::OnInitDialog()
    {
    	char Donnee[2]={2,0};
    	CDialog::OnInitDialog();
    	if(!TelUSB->connecte())
    		CDialog::OnCancel();
    	//Mise en marche de config
    	if(!TelUSB->send(USBRQ_ETAT,Donnee,2))
    	{
    		AfxMessageBox(_T("Erreur,Dialogue mauvais!"),MB_OK|MB_ICONEXCLAMATION);
    		CDialog::OnCancel();
    		return FALSE;
    	}
    	if(m_Id_Tel!=-1)
    	{
    		GetDlgItem(IDC_ALTF4_BTN)->EnableWindow(TRUE);
    		GetDlgItem(IDC_ALTTAB_BTN)->EnableWindow(TRUE);
    		GetDlgItem(IDC_MDSOURIS_BTN)->EnableWindow(TRUE);
    		GetDlgItem(IDC_AUDIO_BTN)->EnableWindow(TRUE);
    		GetDlgItem(IDC_VIDEO_BTN)->EnableWindow(TRUE);
    		GetDlgItem(IDC_EXPLORATEUR_BTN)->EnableWindow(TRUE);
    	}
    	enOK();
    	b_echap=FALSE;
     
    	return TRUE;  // return TRUE unless you set the focus to a control
    	// EXCEPTION*: les pages de propriétés OCX devraient retourner FALSE
    }
     
    void CSysView::enOK()
    {
    	if(m_video!=-1 && m_audio!=-1 && m_explorateur!=-1 && m_ALTTAB!=-1 && m_ALTF4!=-1 && m_mode_souris!=-1 && m_Id_Tel!=-1)
    		GetDlgItem(IDC_OK)->EnableWindow(TRUE);
    	else
    		GetDlgItem(IDC_OK)->EnableWindow(FALSE);
    	UpdateData(FALSE);
    }
    int CSysView::OnBnClickedBtn(int ID,int RQ)
    {
    	char Donnee[2]={0,0};
    	GetDlgItem(ID)->SetWindowTextW(_T("Attente bouton, Echap pour annuler"));
    	do
    	{
    		if(!TelUSB->connecte())
    		{
    			CDialog::OnCancel();
    			return -1;
    		}
    		if(!TelUSB->receive(RQ,Donnee,2))
    		{
    			AfxMessageBox(_T("Erreur,Dialogue mauvais!"),MB_OK|MB_ICONEXCLAMATION);
    			CDialog::OnCancel();
    			return FALSE;
    		}
    		::Sleep(50);
    		if(b_echap==TRUE)
    		{
    			b_echap=FALSE;
    			return -1;
    		}
     
    	}
    	while(Donnee[1]!=0);
    	return Donnee[0];
     
    }
     
    BOOL CSysView::PreTranslateMessage(MSG* pMsg)
    {
    	// TODO : ajoutez ici votre code spécialisé et/ou l'appel de la classe de base
    	switch(pMsg->message)
    	{
    	case WM_KEYDOWN:
    		if(pMsg->wParam == VK_ESCAPE)  
    		{
    			b_echap=TRUE;
    			return TRUE;
    		}
    		if(pMsg->wParam == VK_RETURN)  return TRUE;
    		break;
    	case BN_CLICKED:
    		switch(pMsg->wParam)
    		{
    		case IDC_ID_TEL_BTN:
    			m_Id_Tel=OnBnClickedBtn(IDC_ID_TEL_EDIT,USBRQ_DEM_ID_TEL);
    			if(m_Id_Tel!=-1)
    			{
    				GetDlgItem(IDC_ALTF4_BTN)->EnableWindow(TRUE);
    				GetDlgItem(IDC_ALTTAB_BTN)->EnableWindow(TRUE);
    				GetDlgItem(IDC_MDSOURIS_BTN)->EnableWindow(TRUE);
    				GetDlgItem(IDC_AUDIO_BTN)->EnableWindow(TRUE);
    				GetDlgItem(IDC_VIDEO_BTN)->EnableWindow(TRUE);
    				GetDlgItem(IDC_EXPLORATEUR_BTN)->EnableWindow(TRUE);
    			}
    			enOK();
    			return TRUE;
    		case IDC_ALTF4_BTN:
    			m_ALTF4=OnBnClickedBtn(IDC_ALTF4_EDIT,USBRQ_DEM_BTN);
    			enOK();
    			return TRUE;
    		case IDC_ALTTAB_BTN:
    			m_ALTTAB=OnBnClickedBtn(IDC_ALTTAB_EDIT,USBRQ_DEM_BTN);
    			enOK();
    			return TRUE;
    		case IDC_MDSOURIS_BTN:
    			m_mode_souris=OnBnClickedBtn(IDC_MDSOURIS_EDIT,USBRQ_DEM_BTN);
    			enOK();
    			return TRUE;
    		case IDC_AUDIO_BTN:
    			m_audio=OnBnClickedBtn(IDC_AUDIO_EDIT,USBRQ_DEM_BTN);
    			enOK();
    			return TRUE;
    		case IDC_VIDEO_BTN:
    			m_video=OnBnClickedBtn(IDC_VIDEO_EDIT,USBRQ_DEM_BTN);
    			enOK();
    			return TRUE;
    		case IDC_EXPLORATEUR_BTN:
    			m_explorateur=OnBnClickedBtn(IDC_EXPLORATEUR_EDIT,USBRQ_DEM_BTN);
    			enOK();
    			return TRUE;
    		}
    	}
     
    	return CDialog::PreTranslateMessage(pMsg);
    }
    Je souligne desuite que le fichier usbrq.h ne contient que des #define. usb_comp contient les définitions des fonction appelé par la classe usb_com dont le nom est TelUSB. Cette classe a été testé par ailleurs et ne pose pas de problème.

    Voici le code d'appel de la fenêtre modale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    long CTelUSBView::OnInitAlgo(WPARAM wparam,LPARAM lparam)
    {
    	_TCHAR Chemin[MAX_PATH];
    	CString cz_Chemin;
    	int i=0;
    	char Donnee[2]={0,0};
    	//Algorithme d'init du logiciel (chargement fichier ou création)
    	//Initialisation des variable de sauvegarde
    	Btn_Souris.RemoveAll();
    	Btn_Syst.RemoveAll();
    	Btn_Video.RemoveAll();
    	Btn_Son.RemoveAll();
    	Btn_Expl.RemoveAll();
    	Id_Tel=-1;
     
    	//Ouverture du fichier et détection de la télécommande. CSIDL_APPDATA 
    	if(!SUCCEEDED(SHGetFolderPath(NULL,CSIDL_APPDATA,NULL,SHGFP_TYPE_CURRENT,Chemin)))
    	{
    		AfxMessageBox(_T("Erreur, Pas de chemin valide pour l'application, fermeture de l'application!"),MB_OK|MB_ICONEXCLAMATION);
    		AfxGetMainWnd()->PostMessage(WM_SYSCOMMAND,SC_CLOSE,0);
    	}
    	cz_Chemin.Format(_T("%s\\TelUsb"),Chemin);
    	CreateDirectory(cz_Chemin,NULL);
    	//Le répertoire existe et le fichier existe
    	if(GetLastError()==ERROR_ALREADY_EXISTS && F_Btn.Open(cz_Chemin+_T("\\BtnSave.tel"),CFile::modeReadWrite,NULL))
    	{
    		if(F_Btn.GetLength()!=0)
    		{
    			CArchive ar( &F_Btn, CArchive::load);
    			GetDocument()->Serialize(ar);
    			ar.Close();
    		}
    	}
    	//Création du fichier
    	else if(!F_Btn.Open(cz_Chemin+_T("\\BtnSave.tel"),CFile::modeCreate|CFile::modeReadWrite,NULL))
    	{
    		AfxMessageBox(_T("Erreur,Impossible de créer ou d'ouvrir le fichier de sauvegarde!"),MB_OK|MB_ICONEXCLAMATION);
    		AfxGetMainWnd()->PostMessage(WM_SYSCOMMAND,SC_CLOSE,0);
    	}
    	F_Btn.Close();
    	//Test pour l'existence des paramètres de boutons système	
    	if(Id_Tel!=-1 && Btn_Syst.GetCount()==6)
    	{
     
    		for(i=0;i<6;i++)
    		{
    			if(Btn_Syst[i].Id_Btn<0)
    				break;
    		}
    	}
    	//Si i<6 ->  sinon, autoriser la marche et la config
    	if(i<6 || Id_Tel==-1)
    	{
    		//init
    		OnIdTel();
    		return 0L;
    	}
     
    	CMenu* pTopLevelMenu =AfxGetMainWnd()->GetMenu();
    	CMenu *pMenu;
    	pMenu = pTopLevelMenu->GetSubMenu(1);
    	pMenu->EnableMenuItem(0,MF_BYPOSITION|MF_ENABLED);
     
    	Donnee[0]=Id_Tel;
    	if(!TelUsb->send(USBRQ_DON_TEL,Donnee,2))
    	{
    		AfxMessageBox(_T("Erreur,Dialogue mauvais!"),MB_OK|MB_ICONEXCLAMATION);
    		return 0L;
    	}
     
    	Donnee[0]=0;
    	if(!TelUsb->send(USBRQ_ETAT,Donnee,2))
    	{
    		AfxMessageBox(_T("Erreur,Dialogue mauvais!"),MB_OK|MB_ICONEXCLAMATION);
    		return 0L;
    	}
    	//Autorise les fonctions;
    	GetDlgItem(IDC_MARCHE_BTN)->EnableWindow(TRUE);
    	pMenu = pTopLevelMenu->GetSubMenu(0);
    	pMenu->EnableMenuItem(0,MF_BYPOSITION|MF_ENABLED);
    	pMenu = pTopLevelMenu->GetSubMenu(1);
    	pMenu->EnableMenuItem(0,MF_BYPOSITION|MF_ENABLED);
    	pMenu->EnableMenuItem(1,MF_BYPOSITION|MF_ENABLED);
     
    	return 0L;
    }
     
    void CTelUSBView::OnIdTel()
    {
    	char Donnee[2]={0,0};
    	CMenu* pTopLevelMenu =AfxGetMainWnd()->GetMenu();
    	CMenu *pMenu;
    	CSysView Cfgwnd;
    	//Affectation des différentes variables
    	Cfgwnd.m_Id_Tel=(int)Id_Tel;
    	if(Btn_Syst.GetSize()!=6)
    	{
    		Btn_Syst.RemoveAll();
    		for(int i=0;i<6;i++)
    			Btn_Syst.Add(CBouton(-1,0,0));
    	}
    	Cfgwnd.m_ALTF4=(int)Btn_Syst[0].Id_Btn;
    	Cfgwnd.m_ALTTAB=(int)Btn_Syst[1].Id_Btn;
    	Cfgwnd.m_mode_souris=(int)Btn_Syst[2].Id_Btn;
    	Cfgwnd.m_audio=(int)Btn_Syst[3].Id_Btn;
    	Cfgwnd.m_video=(int)Btn_Syst[4].Id_Btn;
    	Cfgwnd.m_explorateur=(int)Btn_Syst[5].Id_Btn;
    	Cfgwnd.TelUSB=TelUsb;
     
    	//Appel de la fenêtre.
    	if(Cfgwnd.DoModal()==IDOK)
    	{
    		//copie des information
    		Id_Tel=Cfgwnd.m_Id_Tel;
    		Btn_Syst[0].Id_Btn=Cfgwnd.m_ALTF4;
    		Btn_Syst[1].Id_Btn=Cfgwnd.m_ALTTAB;
    		Btn_Syst[2].Id_Btn=Cfgwnd.m_mode_souris;
    		Btn_Syst[3].Id_Btn=Cfgwnd.m_audio;
    		Btn_Syst[4].Id_Btn=Cfgwnd.m_video;
    		Btn_Syst[5].Id_Btn=Cfgwnd.m_explorateur;
    		GetDlgItem(IDC_MARCHE_BTN)->EnableWindow(TRUE);
    		pMenu = pTopLevelMenu->GetSubMenu(0);
    		pMenu->EnableMenuItem(0,MF_BYPOSITION|MF_ENABLED);
    		pMenu = pTopLevelMenu->GetSubMenu(1);
    		pMenu->EnableMenuItem(1,MF_BYPOSITION|MF_ENABLED);
    	}	
    	else
    	{
    		GetDlgItem(IDC_MARCHE_BTN)->EnableWindow(FALSE);
    		GetDlgItem(IDC_ARRET_BTN)->EnableWindow(FALSE);
    		pMenu = pTopLevelMenu->GetSubMenu(0);
    		pMenu->EnableMenuItem(0,MF_BYPOSITION|MF_DISABLED | MF_GRAYED );
    		pMenu = pTopLevelMenu->GetSubMenu(1);
    		pMenu->EnableMenuItem(1,MF_BYPOSITION|MF_DISABLED | MF_GRAYED );
    		if(!TelUsb->connecte())
    		{
    			pMenu = pTopLevelMenu->GetSubMenu(1);
    			pMenu->EnableMenuItem(0,MF_BYPOSITION|MF_DISABLED | MF_GRAYED);
    			Tempo();
    			return;
    		}
    	}
     
    	Donnee[0]=0;
    	TelUsb->send(USBRQ_ETAT,Donnee,2);
    	pMenu = pTopLevelMenu->GetSubMenu(1);
    	pMenu->EnableMenuItem(0,MF_BYPOSITION|MF_ENABLED);
    	GetDocument()->SetModifiedFlag(TRUE);
     
    }
    Pour décrire mon code :
    _A l'initialisation du programme, je teste la connexion de mon périphérique usb. Dès qu'il est connecté, j'envoie le message onInitAlgo qui lance la fonction CTelUSBView::OnInitAlgo.
    _Dans cette fonction, si les conditions sont réunies, je lance la fonction IdTel() qui m'affichera la fenêtre de dialogue.

    Il convient de noter que cette fonction peut aussi être appelé par le clic sur un menu qui est désactivé au démarrage.

    J'ai déjà fait quelques tests. Le programme se poursuit sans encombre jusqu'à la fin de la fonction OnInitDialog(). Puis, seulement le bouton du haut de la fenêtre (image fournies en pièce jointe) s'affiche et plus aucune action n'est possible.

    Avez-vous une idée du problème?

    Merci d'avance.
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!TelUSB->send(USBRQ_ETAT,Donnee,2))
    et si la clé USB ne répond pas ?
    Ton programme risque de boucler indéfiniment.
    A vue de nez faudrait mettre dans des threads tout ce qui est échanges I/O avec la clé USB

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 70
    Par défaut
    Peut-être, mais dans mon cas, même en mode débugage, le programme ne boucle pas et la fenêtre ne s'affiche pas entièrement.
    Juste le premier bouton.

  4. #4
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Il semble surtout que ton code suivant ne s'exécute pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        if(m_Id_Tel!=-1)
        {
            GetDlgItem(IDC_ALTF4_BTN)->EnableWindow(TRUE);
            GetDlgItem(IDC_ALTTAB_BTN)->EnableWindow(TRUE);
            GetDlgItem(IDC_MDSOURIS_BTN)->EnableWindow(TRUE);
            GetDlgItem(IDC_AUDIO_BTN)->EnableWindow(TRUE);
            GetDlgItem(IDC_VIDEO_BTN)->EnableWindow(TRUE);
            GetDlgItem(IDC_EXPLORATEUR_BTN)->EnableWindow(TRUE);
        }
    Donc soit ta condition est fausse, soit il y a un blocage en amont (voir post de Mat.M par exemple) ... Utilise une exécution pas-à-pas ou mets des points d'arrêt.

    Bon courage !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 70
    Par défaut
    C'est ce que j'ai fait.
    La fonction InitDialog se déroule comme je veux.
    Lors de l'INIT du programme, je veux que tous les boutons soient désactivés au démarrage.

    La fenêtre se bloque après l'exécution des fonctions décrites. En effet, le débogueur me dis qu'il doit arrêter la poursuite du code car des fonctions de bases sont inclus dans des dll.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 70
    Par défaut
    En fait, la panne venait d'autre part.
    Les ID définis pour les objets visuels n'étaient pas uniques et brouillaient la communication.

    Merci à tous quand même.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] CTabCtrl dans une CDialog
    Par eyghon dans le forum MFC
    Réponses: 1
    Dernier message: 29/04/2005, 19h31
  2. [MFC][DLL]Afficher une CDialog ?
    Par matazz dans le forum MFC
    Réponses: 13
    Dernier message: 13/04/2005, 13h47
  3. Réponses: 5
    Dernier message: 25/03/2005, 16h19
  4. Réponses: 2
    Dernier message: 17/02/2004, 23h27
  5. Réponses: 3
    Dernier message: 28/01/2004, 14h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo