Richedit bloquer la modification d'un document [Résolu]

Signaler
Messages postés
40
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
9 septembre 2010
-
Messages postés
40
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
9 septembre 2010
-
Bonjour j'aimerais savoir comment faire pour lorsque je fais fermer le document il me met une fenetre gisée(ca j'ai trouver) mais ou il ne soit pas possible de noter quoi que ce soit
merci beaucoup de votre aide

voici une partie de mon code
// FindEdit.c
// Une fenêtre d'édition (RichEdit) avec dialogue "Chercher" non-modal

#include "OnlineSpell.h"                       // les ID du menu et autres

#define TAILLENOMFICH 256                   // pour nom (et chemin) de fichier
#define TAILLETEXTE 30000                   // taille du buffer de texte

// Charge la fenêtre avec le contenu d'un fichier choisi par l'utilisateur
// Utilise une boîte de dialogue standard
//void ChargeFenetre(HWND hWnd);
BOOL DemandeNom(char* szNomFichier,HWND hWnd,BOOL ouvrir);
void ChargeFenetre(char* szNomFichier, HWND hWnd);

//BOOL DemanderNomEnregistrer(char* szNomFichier, HWND hWnd) ;
void enregistrer(char* szNomFichier, HWND hWnd);

void nouveauDoc(HWND hWnd);
void effacerTout(HWND hWnd);
void Chercher(HWND hWnd);                   // ouvrir le dialogue chercher

PSTR szProgName = "OnlineSpell";               // le nom du programme
char nomSansChem [TAILLENOMFICH];
char tampon[256];
char szNomFichier[TAILLENOMFICH];

LRESULT CALLBACK WndProc(HWND hWnd,         // handle de notre fenêtre
                         UINT nMsg,         // numéro du message
                         WPARAM wParam,     // 1ère info supplémentaire
                         LPARAM lParam) {   // 2ème info supplémentaire
  HINSTANCE hInst;                          // processus propriétaire
  static HWND hWndEdit;
  static BOOL EditNotChg = TRUE;
  char * rep;

  switch(nMsg) {                            // quel message ?
    case WM_CREATE :                        // on va créer une sous-fenêtre
                                            // le processus propriétaire
      hInst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
      LoadLibrary("RICHED32.DLL");          // librairie contenant RichEdit
     hWndEdit = CreateWindowEx(
                              0,            // style étendu (rien de particulier)
                              "RICHEDIT",   // nom de la classe
                              NULL,         // pas de titre
                              WS_CHILD |    // fenêtre fille
                              WS_VISIBLE |  // visible
                              WS_VSCROLL |  // avec défilement vertical
                              ES_NOHIDESEL| // texte sélectionné tj. visible
                              ES_MULTILINE, // édition sur plusieurs lignes
                              0, 0, 0, 0,   // dimension spécifiée ailleurs
                              hWnd,         // handle fenêtre parente
                              NULL,         // pas de menu
                              hInst,        // processus propriétaire
                              NULL);        // pas de data supplémentaires
       SendMessage(hWndEdit, EM_SETBKGNDCOLOR, 0, (LPARAM)RGB(100,100,100));

      return 0;                             // message traité
    case WM_SETFOCUS :                      // on reçoit la main
      SetFocus(hWndEdit);                   // la passer à la fenêtre fille
      return 0;                             // message traité
    case WM_SIZE :                          // dimension de fenêtre ajustée
                                            // redimensionner fenêtre fille
      MoveWindow(hWndEdit,                  // handle fenêtre fille
                 0,                         // bord gauche
                 0,                         // bord supérieur
                 LOWORD(lParam),            // largeur
                 HIWORD(lParam),            // hauteur
                 TRUE);                     // repeint la fenêtre fille
      return 0;                             // message traité

    case WM_CONTEXTMENU :
                {
                HMENU hmenu, hpopup;

                hmenu = LoadMenu(hInst,"OnlineSpell");
                hpopup = GetSubMenu(hmenu, 1);

                TrackPopupMenuEx(hpopup, 0, LOWORD(lParam), HIWORD(lParam), hWndEdit, NULL);

                DestroyMenu(hmenu);
                return 0;
                }

    case WM_COMMAND :      /* if ((HWND)lParam hWndEdit && HIWORD(wParam) EN_IMECHANGE) {
          MessageBeep(-1);
          EnableMenuItem(GetMenu(GetParent(hWnd)),ID_FICHIER_ENREGISTRER,MF_BYCOMMAND);
         }*/

    // notification ou menu
      if((HIWORD(wParam) ==0)||(HIWORD(wParam) ==1)) {   // entrée du menu sélectionnée
                                                         //et racourcis clavier pas de notification
        switch(LOWORD(wParam)) {            // laquelle ?
        case ID_FICHIER_NOUVEAU :
          nouveauDoc(hWndEdit);
          break;
//*******************************
      case ID_FICHIER_FERMER:
                if(EditNotChg ||
                     (rep=MessageBox(hWnd,"Quitter sans enregistrer les modifications ?"
                    ,"Question ?",MB_YESNOCANCEL | MB_ICONQUESTION )) == IDYES)
                      DestroyWindow(hWnd);
                   else if (rep==IDNO){
                    enregistrer(hWnd, TRUE); // On enregistre.
                   //on met le truc griser et pas accessible on le rendra accessible avec nouveau et ouvrir
                   }
                  return 0;
        case ID_FICHIER_OUVRIR :
          if(DemandeNom(&szNomFichier, hWnd,TRUE))
                    { ChargeFenetre(szNomFichier,hWndEdit);
                          GetFileTitle(szNomFichier,nomSansChem,TAILLENOMFICH);
                          wsprintf(tampon,"%s [ %s ] ",szProgName,szNomFichier);
              SetWindowText(hWnd,tampon);
                  }

          break;
        case ID_FICHIER_ENREGISTRERSOUS :
          if(DemandeNom(&szNomFichier, hWnd,FALSE) ){
                          GetFileTitle(szNomFichier,nomSansChem,TAILLENOMFICH);
                          wsprintf(tampon,"%s [ %s ] ",szProgName,szNomFichier);
              SetWindowText(hWnd,tampon);
                      enregistrer(&szNomFichier, hWndEdit);
                    }
          break;

        case ID_FICHIER_ENREGISTRER :
                                    GetFileTitle(szNomFichier,nomSansChem,TAILLENOMFICH);
                                    wsprintf(tampon,"%s [ %s ] ",szProgName,szNomFichier);
              SetWindowText(hWnd,tampon);
              enregistrer(&szNomFichier, hWndEdit);
              break;
        case ID_FICHIER_QUITTER :           // fermer la fenêtre
          PostMessage(hWnd, WM_CLOSE,0, 0); // envoyer message WM_CLOSE
          break;
        //**************
        case ID_EDITER_COUPER :             // envoie WM_CUT
          SendMessage(hWndEdit, WM_CUT, 0, 0);
          break;
        case ID_EDITER_COPIER :             // envoie WM_COPY
          SendMessage(hWndEdit, WM_COPY, 0, 0);
          break;
        case ID_EDITER_COLLER :             // envoie WM_PASTE
          SendMessage(hWndEdit, WM_PASTE, 0, 0);
          break;
        case ID_EDITER_EFFACER :            // envoie WM_CLEAR
          SendMessage(hWndEdit, WM_CLEAR, 0, 0);
          break;
        case ID_EDITER_SELECTALL :
          SendMessage(hWndEdit,EM_SETSEL,0, -1);
          break;
        case ID_EDITER_ALLCLEAR :
          effacerTout(hWndEdit);
          break;
        //**************
        case ID_ORTHO :                  // ouvre le dialogue Chercher
          //Chercher(hWndEdit);
          break;
        }
        return 0;                           // message traité
      }
      break;                                // traitement par défaut

    case WM_DESTROY :                       // fenêtre en passe d'être détruite
      PostQuitMessage(0);                   // envoie WM_QUIT
      return 0;                             // message traité
  }
  // tous les messages non pris en charge
  return( DefWindowProc(hWnd, nMsg, wParam, lParam) );
}

Babyboo

2 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Pour griser un controle on fait : EnableWindow(hwnd,0);
Pour le dégriser : EnableWindow(hwnd,1);
Messages postés
40
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
9 septembre 2010

Merci beaucoup j'imaginais des choses plus compliquées ^^






Babyboo