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 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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
Rejoignez-nous