ENVIYER DES MESSAGES DANS UNE FENËTRE HeDIT

piroman14 Messages postés 18 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 11 novembre 2008 - 2 juil. 2008 à 14:14
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 - 3 juil. 2008 à 13:37
Bonjour je souhaiterais envoyer des messages au moyen de la fonction SendMessage dans la fenêtre déjà existante hEdit.
L'aide n'est pas très fournie. Je ne sais pas comment remplir les champs de la fonction.

LRESULTSendMessage(HWNDhWnd, UINTMsg, WPARAMwParam, LPARAMlParam); 
Merci_ de votre aide ça me serait très utile.

LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static HWND hEdit;
    static BOOL EditNotChg = TRUE;
    FILE *fp0, *fp1, *fp2;
    FILE *tmpf= 0;      //Opened temp. file
 
 char name[255];
 char ext[7], mode[7];
 unsigned int i, j, k;
 unsigned int imax, jmax, kmax;
 unsigned char pix; 
 char *vtk, *vtkPtr;


 switch (uMsg)
    {
        case WM_CREATE:


            {
             HFONT hFont;


             hEdit = CreateWindow("edit","\nPour générer les images acoustiques de votre échantillon : Fichier -> Générer les images acoustiques à partir d'un fichier VTK", WS_CHILD | WS_VISIBLE |ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL,0, 0, 0, 0, hwnd, NULL, hinst, NULL);
             hFont = (HFONT)GetStockObject(ANSI_FIXED_FONT);
             SendMessage(hEdit,WM_SETFONT,(UINT)hFont,TRUE);
             SendMessage(hEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(5, 5));
             return 0;
            }


        case WM_CLOSE:
    DestroyWindow(hwnd);
    return 0;


        case WM_COMMAND:


            if(LOWORD(wParam) == IDM_OPEN)
              {
                OPENFILENAME ofn;
                CHAR szFile[MAX_PATH]={0};


                ZeroMemory(&ofn, sizeof(OPENFILENAME));
                ofn.lStructSize = sizeof(OPENFILENAME);
                ofn.hwndOwner = hwnd;
                ofn.lpstrFile = szFile;
                ofn.nMaxFile = MAX_PATH;
                ofn.lpstrFilter ="Fichier  VTK\0*.vtk\0";
                ofn.nFilterIndex = 1;
                ofn.Flags =OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
  


                if (GetOpenFileName(&ofn)==TRUE)


    {      //je voudrais insérer un message ici dans la fenêtre hEdit                          

      i = 0;   
     while (*(szFile + i) != 0)
     {
        *(name + i) = *(szFile + i);
        ++i;
     }
     *(name + i) = 0; // terminateur par défaut
     while (i > 0)
     {
        --i;
        if (*(name + i) == '\\') break; // pas d'extension
        if (*(name + i) == '/') break; // pas d'extension
        if (*(name + i) == '.')
        {
        *(name + i) = 0; // extension supprimée
        break;
        }
        }
          }
              }
            if(LOWORD(wParam) == IDM_QUIT) PostMessage(hwnd, WM_CLOSE,0,0);            if(HIWORD(wParam) EN_CHANGE) EditNotChg FALSE;
           
   return 0;


        case WM_SIZE:
             MoveWindow(hEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
             return 0;


        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;


        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
}

4 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
2 juil. 2008 à 20:14
Déjà la prochaine fois évite de mettre le nom de la fonction en blanc ça aide pas
Ensuite pour un Edit tu peux utiliser simplement SetWindowText(hEdit,"le texte");

accessoirement pour répondre à ta question :
SendMessage(HWND hEdit,WM_SETTEXT,NULL,(LPARAM)"le texte");
suffit de savoir quel message utiliser (WM_SETTEXT en l'occurence) et chercher la signification des paramètres pour ce message en particulier sur MSDN ou dans le SDK. 
0
piroman14 Messages postés 18 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 11 novembre 2008
3 juil. 2008 à 09:29
Excuse moi pour la fonction mais elle était sélectionnée c pour ça qu'elle n'était pas affichée en noir.

Sinon j'ai bien essayé ce que tu m'as dit (j'avais essayé des choses semblables avant) mais sans succès.
Ces lignes ne génèrent aucune erreur à la compilation mais aucun texte ne s'affiche dans ma fenêtre.
Ne faut-il pas rafraîchir la fenêtre? Le pb c que je ne sais pas comment.

Merci de me donner des pistes.

Noobinho
0
piroman14 Messages postés 18 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 11 novembre 2008
3 juil. 2008 à 11:50
Hi everybody!!

Quelqu'un pourrais-t-il m'expliquer pourquoi si SetWindowText(hEdit,"Traitement en cours..."); est avant   if (GetOpenFileName(&ofn)= =TRUE) le message s'affiche bien dans ma fenêtre alors que si celui-ci est après il ne s'affiche pas?

Merci par avance de vos précieux conseils!

case WM_COMMAND:


            if(LOWORD(wParam) == IDM_OPEN)
              {
                OPENFILENAME ofn;
                CHAR szFile[MAX_PATH]={0};


                ZeroMemory(&ofn, sizeof(OPENFILENAME));


                ofn.lStructSize =sizeof(OPENFILENAME);
                ofn.hwndOwner = hwnd;
                ofn.lpstrFile = szFile;
                ofn.nMaxFile = MAX_PATH;
                ofn.lpstrFilter ="Fichier  VTK\0*.vtk\0";
                ofn.nFilterIndex = 1;
                ofn.Flags =OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
  
    SendMessage(hEdit,WM_SETTEXT,NULL,(LPARAM)"Traitement en cours...");  // le message ici s'affiche bien
    SetWindowText(hEdit,"Traitement en cours...");


                if (GetOpenFileName(&ofn) ==TRUE)


    {  HFONT hFont;
     
     SetWindowText(hEdit,"Traitement en cours..."); // alors qu'ici il ne s'affiche pas ???
     SendMessage(hEdit,WM_SETTEXT,NULL,(LPARAM)"Traitement en cours...");


     i = 0;   
     while (*(szFile + i) != 0)
     {
        *(name + i) = *(szFile + i);
        ++i;
     }
     *(name + i) = 0; // terminateur par défaut
     while (i > 0)
     {
        --i;
        if (*(name + i) == '\\') break; // pas d'extension
        if (*(name + i) == '/') break; // pas d'extension
        if (*(name + i) == '.')
        {
        *(name + i) = 0; // extension supprimée
        break;
        }
     }

MERCI
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
3 juil. 2008 à 13:37
Pourquoi mets-tu SendMessage ET SetWindowText? C'est un des deux, ils font la même chose en l'occurence.
Quant à savoir pourquoi ça marche pas dans un cas...Es-tu sûr que tu entres bien dans le bloc?
Tu peux tester par exemple :
if(GetOpenFileName(&ofn)) // (pas besoin de ==TRUE)
{
SetWindowText(hEdit,"Traitement en cours");
MessageBox(NULL,"Test","Test",MB_OK);
...
}
0
Rejoignez-nous