Poster une réponse  Créer un sujet 
Pages (7): « Première < Précédente 3 4 5 6 [7] Dernière »
[Win API] Un carnet d'adresses
Auteur Message
acryline
Member
***


Messages : 68
Groupe : Membres
Inscription : Dec 2006
Statut : Hors ligne
Réputation : 2
Message : #61
 

Bonjour tout le monde ! J'ai zappé hier ! Rolleyes

Bon allez pour me rattraper je mets deux fonctions en ligne aujourd'hui : creerBoutonsFiche et creerEditFiche.

Création des boutons de la fiche :

Code C :

void creerboutonsfiche(hwnd hwndfiche,bouton *p_bouton)
{
    long largeur=0,hauteur=0;
    long coorb[11][4],i=0;
    char nom[3][20]={"modifier","fermer","enregistrer"};

    dimfenetre (&largeur,&hauteur);
       //bouton nul pour activer  le curseur (setclasslong de la procedure) pour plus tard si on configure ã©galement me curseur
   p_bouton->hbouton[0]= createwindow("button","",bs_groupbox |ws_child| bs_center,
                  coorb[0][0],coorb[0][1],coorb[0][2],coorb[0][3],hwndfiche,null,hinstance,null);

  i=1,coorb[i][0]=largeur/50, coorb[i][1]=hauteur/200,coorb[i][2]=(27*largeur)/50,coorb[i][3]=(5*hauteur)/50;
  i=2,coorb[i][0]=largeur/50, coorb[i][1]=(hauteur*5)/50,coorb[i][2]=(48*largeur)/50,coorb[i][3]=(7*hauteur)/50;
  i=3,coorb[i][0]=largeur/50, coorb[i][1]=3+(hauteur*12)/50,coorb[i][2]=(48*largeur)/50,coorb[i][3]=-5+(7*hauteur)/50;
  i=4,coorb[i][0]=largeur/50, coorb[i][1]=(hauteur*19)/50,coorb[i][2]=(33*largeur)/50,coorb[i][3]=(14*hauteur)/50;
  i=5,coorb[i][0]=(35*largeur)/50, coorb[i][1]=(hauteur*19)/50,coorb[i][2]=(14*largeur)/50,coorb[i][3]=(14*hauteur)/50;
  i=6,coorb[i][0]=largeur/50, coorb[i][1]=(hauteur*33)/50,coorb[i][2]=(48*largeur)/50,coorb[i][3]=(13*hauteur)/50;
  i=7,coorb[i][0]=(largeur*36)/50, coorb[i][1]=(hauteur*31)/50,coorb[i][2]=(largeur*12)/50,coorb[i][3]=15;
  i=8,coorb[i][0]=(largeur*15)/50, coorb[i][1]=(47*hauteur)/50,coorb[i][2]=(10*largeur)/50,coorb[i][3]=2*hauteur/50;
  i=9,coorb[i][0]=(largeur*27)/50, coorb[i][1]=(47*hauteur)/50,coorb[i][2]=(10*largeur)/50,coorb[i][3]=2*hauteur/50;

  for (i=1;i<7;i++)
  {
       p_bouton->hbouton[i]= createwindow("button","",bs_groupbox |ws_child | ws_visible | bs_center,
              coorb[i][0],coorb[i][1],coorb[i][2],coorb[i][3],hwndfiche,null,null,null);
  }

  for (i=7;i<10;i++)
  {
    p_bouton->hbouton[i] =   createwindow("button",nom[i-7],
                ws_visible | ws_child | bs_pushbutton ,   //| bs_ownerdraw ,
                coorb[i][0],coorb[i][1],coorb[i][2],coorb[i][3],hwndfiche,null,null,null);
  }

}

 


rien de bien nouveau ici. j'ai mis les coordonnã©es des boutons dans un tableau pour allã©ger le code simplement.
il y a deux sortes de boutons. les boutons normaux sur lesquels ont clique pour obtenir une rã©ponse, les groupe, qui n'ont
ici qu'une valeur esthã©tique.

passons ã  la crã©ation des contrã´les d'ã©dition :

Code C :

void creereditfiche(hwnd hwndfiche,bouton *p_edit)
{
     long largeur=0,hauteur=0,i=0;
     long coore[13][5];
     dword style[13]={0};

     dimfenetre (&largeur,&hauteur);

  i=0,coore[i][0]=(8*largeur)/50, coore[i][1]= -2+(7*hauteur)/50,coore[i][2]=(40*largeur)/50,coore[i][3]=20, coore[i][4]=1;
  i=1,coore[i][0]=(8*largeur)/50, coore[i][1]=(9*hauteur)/50,coore[i][2]=(40*largeur)/50,coore[i][3]=20, coore[i][4]=0;
  i=2,coore[i][0]=(6*largeur)/50, coore[i][1]=-2+(14*hauteur)/50,coore[i][2]=(6*largeur)/50,coore[i][3]=20,coore[i][4]=2;
  i=3,coore[i][0]=(17*largeur)/50, coore[i][1]=-2+(14*hauteur)/50,coore[i][2]=(31*largeur)/50,coore[i][3]=20,coore[i][4]=0;
  i=4,coore[i][0]=(6*largeur)/50, coore[i][1]=(16*hauteur)/50,coore[i][2]=(6*largeur)/50,coore[i][3]=20,coore[i][4]=2;
  i=5,coore[i][0]=(20*largeur)/50, coore[i][1]=(16*hauteur)/50,coore[i][2]=(28*largeur)/50,coore[i][3]=20,coore[i][4]=1;
  i=6,coore[i][0]=(11*largeur)/50, coore[i][1]=(21*hauteur)/50,coore[i][2]=(12*largeur)/50,coore[i][3]=15,coore[i][4]=2;
  i=7,coore[i][0]=(11*largeur)/50, coore[i][1]=(23*hauteur)/50,coore[i][2]=(12*largeur)/50,coore[i][3]=15,coore[i][4]=2;
  i=8,coore[i][0]=(11*largeur)/50, coore[i][1]=(25*hauteur)/50,coore[i][2]=(12*largeur)/50,coore[i][3]=15,coore[i][4]=2;
  i=9,coore[i][0]=(9*largeur)/50, coore[i][1]=(27*hauteur)/50,coore[i][2]=(24*largeur)/50,coore[i][3]=15,coore[i][4]=3;
  i=10,coore[i][0]=(9*largeur)/50, coore[i][1]=(29*hauteur)/50,coore[i][2]=(24*largeur)/50,coore[i][3]=15,coore[i][4]=3;
  i=11,coore[i][0]=(9*largeur)/50, coore[i][1]=(31*hauteur)/50,coore[i][2]=(24*largeur)/50,coore[i][3]=15,coore[i][4]=3;
  i=12,coore[i][0]=(2*largeur)/50, coore[i][1]=5+(38*hauteur)/50,coore[i][2]=(46*largeur)/50,coore[i][3]=(7*hauteur)/50,coore[i][4]=4;

  for(i=0;i<13;i++)
  {
     if (coore[i][4]==0 ) {style[i]=ws_visible | ws_child|ws_tabstop  |ws_border ;}
     if (coore[i][4]==1 ) {style[i]=ws_visible | ws_child|ws_tabstop  |ws_border |  es_uppercase ;}
     if (coore[i][4]==2 ) {style[i]=ws_visible | ws_child |ws_tabstop  |ws_border |es_number;}
     if (coore[i][4]==3 ) {style[i]=ws_visible | ws_child|ws_tabstop  |ws_border |es_autohscroll ;}
     if (coore[i][4]==4 ) {style[i]=ws_visible | ws_child|ws_tabstop  |ws_border|es_autovscroll|es_multiline   ;}
    p_edit->hedit[i] =createwindow( "edit","",style[i],
                        coore[i][0],coore[i][1],coore[i][2],coore[i][3],hwndfiche,null,null, null);
  }
}

 

Ici, il y a plusieurs styles de contrôle d'édition représentés.
- un style normal,
- un style ou l'affichage ne se fait qu'en majuscules pour le nom,
- un style ou l'on ne peut afficher que des nombres pour les numéros de téléphones, le numéro de la rue et le code postal.
- un style ou le texte peut défiler horizontalement pour les mails
- un style multi-lignes pour la note.

18/01/2007 07:42
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
acryline
Member
***


Messages : 68
Groupe : Membres
Inscription : Dec 2006
Statut : Hors ligne
Réputation : 2
Message : #62
 

Bonjour !

voici quelques jours que je ne suis plus venue... j''ai configuré Kunbuntu pour ne plus avoir besoin de Windows. Maintenant je
peux tout faire sans microsoft sauf utiliser mon p etit carnet d'adresses ... donc je vais arrêter le Win api !
Mais je continue ma présentation ici bien entendu. Smile

voici la fonction de création des combobox de la fiche :


J'ai fait une bêtise avec mes lecteurs de DVD... je dois réparer !à+ pour le code. J'espère aujourd'hui.
Pas tjrs facile de se faire à un OS, d'où l'utilité de s'y mettre le plus tôt possible avant que ça ne devienne
urgent voir indispensable. Smile

voici le code :

Code C :

void creercombofiche(hwnd hwndfiche,bouton *p_combo)
{
   char elem[31][3];
   char mois[12][12]={"janvier","fevrier","mars","avril","mai","juin",
             "juillet","aout","septembre","octobre","novembre","decembre"};
   char groupe[5][10]={"amis","famille","travail","loisirs","autre"};
   long largeur=0,hauteur=0,i=0;

    for (i=0;i<31;i++)
     {
          elem[i][0]=ceil((i+1)/10)+48;
          elem[i][1]=i+1-(ceil((i+1)/10)*10)+48;
      elem[i][2]=0;
         }

   dimfenetre (&largeur,&hauteur);

  p_combo->hcombo[0]=createwindowex( 0,"combobox","",
            ws_child | ws_visible | ws_vscroll |lbs_combobox | ws_hscroll | cbs_autohscroll | cbs_dropdown,
            (largeur *8)/50,(35*hauteur)/50,50,90,hwndfiche,null,hinstance, null);
  setwindowtext(p_combo->hcombo[0],"1");
  for (i=30;i>-1;i--)
  {
    sendmessage(  p_combo->hcombo[0], cb_insertstring,0,(lparam) elem[i]);
  }

    p_combo->hcombo[1]=createwindowex( 0,"combobox","",
            ws_child | ws_visible | ws_vscroll  | ws_hscroll | cbs_autohscroll | cbs_dropdown
            ,(14*largeur)/50,(35*hauteur)/50,100,90,hwndfiche,null,null, null);
    setwindowtext(p_combo->hcombo[1],"janvier");
    for (i=11;i>-1;i--) sendmessage(p_combo->hcombo[1], cb_insertstring,0,(lparam) mois[i]);


    p_combo->hcombo[2]=createwindowex( 0,"combobox","",
            ws_child | ws_visible | ws_vscroll |  ws_hscroll | cbs_autohscroll | cbs_dropdown
            ,(32*largeur)/50,(35*hauteur)/50, 100, 90, hwndfiche, null, null, null);
    setwindowtext(p_combo->hcombo[2],"amis");
    for (i=4;i>-1;i--) sendmessage(p_combo->hcombo[2], cb_insertstring,0,(lparam) groupe[i]);
}
 

21/01/2007 10:56
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
acryline
Member
***


Messages : 68
Groupe : Membres
Inscription : Dec 2006
Statut : Hors ligne
Réputation : 2
Message : #63
 

Voici la fonction pour dessiner la fiche après le message WM_PAINT dessinerFiche:

//je ne mets pas l'organigramme, il ne correspond pas. Rolleyes

Code CPP :

void dessinerfiche(hwnd hwndfiche, char *titrefiche)
{
hdc hdc=null;
paintstruct ps;
ecrire coort[16];
long largeur=0,hauteur=0,i=0;
colorref couleurpapier1=0,couleurtexte1=0;

dimfenetre (&largeur,&hauteur);
chargerconfig (&couleurpapier1, sizeof(char)*10 +sizeof(colorref)*2,sizeof(colorref));
chargerconfig (&couleurtexte1, sizeof(char)*10 +sizeof(colorref)*4,sizeof(colorref));
for(i=0;i<16;i++) coort[i].cx=0,coort[i].cy=0,coort[i].texte[0]='';
   i=0,coort[i].cx=(largeur*2)/50,coort[i].cy=-2+(hauteur*7)/50, strncat(coort[i].texte,"nom : ",max_path);
   i=1,coort[i].cx=(largeur*2)/50,coort[i].cy=(hauteur*9)/50, strncat(coort[i].texte,"prenom : ",max_path);
   i=2,coort[i].cx=(largeur*2)/50,coort[i].cy=(hauteur*12)/50, strncat(coort[i].texte,"adresse  ",max_path);
   i=3,coort[i].cx=(largeur*2)/50,coort[i].cy=(hauteur*14)/50, strncat(coort[i].texte,"n� : ",max_path);
   i=4,coort[i].cx=(largeur*13)/50,coort[i].cy=(hauteur*14)/50, strncat(coort[i].texte,"rue :  ",max_path);
   i=5,coort[i].cx=(largeur*2)/50,coort[i].cy=(hauteur*16)/50, strncat(coort[i].texte,"cp :  ",max_path);
   i=6,coort[i].cx=(largeur*13)/50,coort[i].cy=(hauteur*16)/50, strncat(coort[i].texte,"commune :  ",max_path);
   i=7,coort[i].cx=(largeur*2)/50,coort[i].cy=(hauteur*21)/50, strncat(coort[i].texte,"telephone 1 :  ",max_path);
   i=8,coort[i].cx=(largeur*2)/50,coort[i].cy=(hauteur*23)/50, strncat(coort[i].texte,"telephone 2 :  ",max_path);
   i=9,coort[i].cx=(largeur*2)/50,coort[i].cy=(hauteur*25)/50, strncat(coort[i].texte,"telephone 3  :  ",max_path);
   i=10,coort[i].cx=(largeur*2)/50,coort[i].cy=(hauteur*27)/50, strncat(coort[i].texte,"email 1 : ",max_path);
   i=11,coort[i].cx=(largeur*2)/50,coort[i].cy=(hauteur*29)/50, strncat(coort[i].texte,"email 2 :  ",max_path);
   i=12,coort[i].cx=(largeur*2)/50,coort[i].cy=(hauteur*31)/50, strncat(coort[i].texte,"email 3 :  ",max_path);
   i=13,coort[i].cx=(largeur*2)/50,coort[i].cy=(hauteur*34)/50, strncat(coort[i].texte,"anniversaire :  ",max_path);
   i=14,coort[i].cx=(largeur*27)/50,coort[i].cy=(hauteur*34)/50, strncat(coort[i].texte,"groupe :  ",max_path);
   i=15,coort[i].cx=(largeur*2)/50,coort[i].cy=(hauteur*37)/50, strncat(coort[i].texte,"notes :  ",max_path);

    hdc = beginpaint(hwndfiche,&ps);
     dessinerrectanglesimple (hdc,0,0,largeur,hauteur,couleurpapier1,couleurpapier1);
    setbkmode(hdc, transparent);
    for (i=0;i<16;i++)
{
   ecriretexte (hdc,coort[i].cx,coort[i].cy,coort[i].texte,"comic sans ms",12,5,1,0,700,false, false,
                                  false,false,couleurtexte1);
}
    dessinerphoto(hwndfiche,hdc, largeur, hauteur);
    titre(hdc,titrefiche);
    endpaint(hwndfiche, &ps);
}
 

22/01/2007 22:35
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
acryline
Member
***


Messages : 68
Groupe : Membres
Inscription : Dec 2006
Statut : Hors ligne
Réputation : 2
Message : #64
 

Bonjour !

J'espace un peu mes interventions toujours et encore pour les mêmes raison... changement d'habitudes ;D Mais c'est
pour la bonne cuase, mon porte-monnaie et ma liberté.

Aujourd'hui je vous présente la fonction dessiinerPhoto qui, comme son nom l'indique, va dessiner la photo de la fiche.
Voici l'organigramme :

Et le code :

Code C :

void dessinerphoto(hwnd hwndfiche,hdc hdc,long largeur,long hauteur)
{
    char adressetempo[max_path]={0};
    lirefichiertempo(adressetempo);
    if (strlen(adressetempo)>0)
    {
        dessinerimage("",adressetempo,hdc ,(36*largeur)/50,(hauteur*20)/50,
                    (largeur*12)/50,(hauteur*11)/50, lr_loadfromfile, srccopy);
    }
    else
    {
         dessinerimage( "ressource","",hdc ,(36*largeur)/50,(hauteur*20)/50,
                    (largeur*12)/50,(hauteur*11)/50, lr_loadfromfile, srccopy);
    }
}
 


On charge le fichier temporaire qui contient l'image de la fiche en cours. S'il n'y en a pas on utilise une image
de la ressource ( un ?). Ensuite l'image est dessinée en fonction de son origine.
La place de la photo dans la fiche dépend des dimensions du carnet d'adresses.
La configuration de la largeur et de la hauteur du carnet d'adresse à été prévue
tout au long du programme mais n'est pas codée. C'est une amélioration possible.

25/01/2007 08:15
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
acryline
Member
***


Messages : 68
Groupe : Membres
Inscription : Dec 2006
Statut : Hors ligne
Réputation : 2
Message : #65
 

Bonjour !
je n'oublie pas cette présentation, mais en ce moment j'ai un énorme coup de flemmingite ! Smile
Promis je reviens bientôt vous présenter la suite.

Wink

01/02/2007 09:05
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
acryline
Member
***


Messages : 68
Groupe : Membres
Inscription : Dec 2006
Statut : Hors ligne
Réputation : 2
Message : #66
RE: [Win API] Un carnet d'adresses

Bonjour !
Je vais essayer de reprendre la suite de ma présentation. (Je m'habitue progressivement à Kubuntu). Je vais vous montrer comment j'ai affiché la photo d'identité dans la fiche.

On regarde déjà si la fiche a déjà été ouverte et si une photo est déjà sélectionnée dans le fichier temporaire.


Code C :

 void lireFichierTempo(char* adresse)
 {
HANDLE hFichier=NULL;
DWORD nbcharRead= 0;
static char repertoire[MAX_PATH]={0};

GetCurrentDirectory(MAX_PATH,(LPTSTR)repertoire);
strncat (repertoire,"\\~fichier.tmp",MAX_PATH);
 hFichier = CreateFile(repertoire , GENERIC_READ, 0,NULL,
                                            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
SetFilePointer( hFichier,0,0,FILE_BEGIN);
 ReadFile(hFichier, adresse,sizeof(char)*256, &nbcharRead, NULL);
 CloseHandle(hFichier);
 }
 


Puis on dessine l'image : deux possibilités sont envisagées dans cette fonction, l'image a une adresse, ou l'image est une ressource.


Code C :

void dessinerImage(LPCTSTR ressource,LPCTSTR adresseTempo,HDC hdc ,int x,int y,
                            int largeur,int hauteur,UINT fuLoad, DWORD dwRop)
{
    HANDLE  hBitmap=0;
        BITMAP bmp;
        HDC hDCmemory=NULL;
        long largeurOrigine=0, hauteurOrigine=0;

    SetBkMode(hdc, TRANSPARENT);
    if (strlen(adresseTempo)>0)
    {
         hBitmap=LoadImage(hinstance, adresseTempo,IMAGE_BITMAP,0,0,fuLoad);
     }
    else if (strlen(ressource)>0)
    {
         hBitmap=LoadImage(hinstance,"personne.bmp",IMAGE_BITMAP,0,0,fuLoad);
         //hBitmap=LoadBitmap(hinstance, ressource);
    }
    else
    return FALSE;

         if (!hBitmap) return FALSE;
         GetObject(hBitmap,sizeof(bmp),&bmp);
         largeurOrigine = bmp.bmWidth;
         hauteurOrigine =bmp.bmHeight;
         hDCmemory = CreateCompatibleDC(0);
         SelectObject(hDCmemory, hBitmap);
         SetStretchBltMode(hdc,COLORONCOLOR);
         StretchBlt(hdc,x,y,largeur,hauteur,hDCmemory,0,0,largeurOrigine,hauteurOrigine,dwRop);
         DeleteDC( hDCmemory );
         DeleteObject( hBitmap );

}
 

Ce message a été modifié le: 15/02/2007 18:20 par CrazyCat.

15/02/2007 14:45
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Poster une réponse  Créer un sujet 

Voir une version imprimable
Envoyer ce sujet à un ami
S'abonner au sujet | Ajouter le sujet aux favoris

Aller à :