Combox me bloquant l'appli [Résolu]

Signaler
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013
-
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013
-
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

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,

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

    while(GetMessage(&msg,0,0,0)==TRUE)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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.
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
N'as tu pas l'impression d'avoir oublier un break après tes case IDOK et IDCANCEL

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

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.
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

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

Nickel !
merci !