Combox me bloquant l'appli

Résolu
SnOOpss
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013
- 17 sept. 2006 à 18:40
SnOOpss
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013
- 20 sept. 2006 à 06:57
Bonjour j'ai essayé de simplifier au maximum mon code mais meme codé comme cela j'ai le meme probleme. Tant que je clique par sur le comboBox tout est OK, mais sinon des le premier clic l'appli se bloque et se ferme seule apres un clic dans la barre des taches.

fichier main.cpp
#include <windows.h>
#include "resource.h"

LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
    HWND hDlg;
    MSG msg;
     hDlg=CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),HWND_DESKTOP,(DLGPROC)MainProc);

    if (!hDlg) return 0;

    ShowWindow(hDlg,SW_SHOW);

    while(GetMessage(&msg,hDlg,0,0)==TRUE)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}

HWND cbohWnd;

LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)
{

    switch(message)
    {

        case WM_INITDIALOG:{

          cbohWnd=GetDlgItem(Dlg, IDC_COMBO1);
          SendMessage(cbohWnd, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)"ligne1");
          SendMessage(cbohWnd, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)"ligne2");
          SendMessage(cbohWnd, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)"ligne3");
          SendMessage(cbohWnd, CB_SETCURSEL, (WPARAM)0, 0);
         
          return true;
        }
         break;

        case WM_COMMAND:
        {
            int Select=LOWORD(wParam);
            switch(Select)
            {
                case IDOK:
                case IDCANCEL:
                    DestroyWindow(Dlg);
                    PostQuitMessage(0);
            }
        }
        break;
    }

    return false;
}

fichier res.rc
#include <windows.h>
#include "resource.h"

IDD_DIALOG1 DIALOGEX 0,0,186,95
STYLE NOT WS_VISIBLE | DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SETFONT | DS_FIXEDSYS | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU
CAPTION "Dialog"
FONT 8,"MS Shell Dlg 2",400,0,1
BEGIN
    PUSHBUTTON      "OK",IDOK,129,7,50,14,BS_DEFPUSHBUTTON
    PUSHBUTTON      "Cancel",IDCANCEL,129,24,50,14
    COMBOBOX        IDC_COMBO1,31,35,64,46,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
END

fichier ressources.h
#define IDC_STATIC                      -1
#define IDD_DIALOG1                     100
#define IDC_COMBO1                      1000

testé sous VC 2005

6 réponses

racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
14
17 sept. 2006 à 20:34
Salut,

L'erreur est dans ta boucle des messages. Il faut faire:

    while(GetMessage(&msg,0,0,0)==TRUE)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
3
racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
14
19 sept. 2006 à 16:56
Bonjour,
Si tu mets le HWND de la boite de dialogue comme 2ème paramètre de GetMessage(), l'application ne recevra que les messages destinés à cette boite et à ses controles enfants. Pour les controles simples comme les boutons, les edits etc cela ne pose aucun  problème. Par contre, quand il s'agit d'un controle composé comme le combobox ça ne marche plus car les messages destinés aux controles contenus dans ce combobox ne seront pas interceptés. Mettre à 0 le 2ème paramètre de GetMessage() permet à l'application de recevoir tous les messages quelque soit leur destination.
3
cs_Joky
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
17 sept. 2006 à 19:20
N'as tu pas l'impression d'avoir oublier un break après tes case IDOK et IDCANCEL

ULARGE_INTEGERJokyQi=QI("Joky"
0
SnOOpss
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

17 sept. 2006 à 19:43
Heu si mais comme il n'y a pas d'autre CASE break ou pas ca ne doit pas changer grand chose ? En tout cas j'ai rajouté le break et toujour le meme prb.
Franchement a part un bug de vc2005 je voit pas ce que ca peut etre, il ya juste le strict minimum de ligne de code.
0

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

Posez votre question
SnOOpss
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

18 sept. 2006 à 20:51
C'etait ca !
Mais je comprend pas pourquoi tout les autres controles marchaient (edit + boutton + scrollbar ++..) ??
0
SnOOpss
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

20 sept. 2006 à 06:57
Nickel !
merci !
0