Bonjour,
Aujourd'hui je vais commencer à parler de la fenêtre de configuration du programme qui s'ouvre dans le
menu en cliquant sur "Affichage". Cette fenêtre est une boite de dialogue qui contient deux fenêtres qui s'ouvent
chacune avec un onglet (comme dans un classeur).
Patit rappel :
dans la fonction de traitement des messages du menu
messagesMenu le cas où l'utilisateur presse sur
l'option "Affichage" est traité comme ceci :
case idm_options :
dialogbox(hinstance, "dialog3" , hwnd, (dlgproc)dialog3proc);
sendmessage(findwindow ("dialog","dialog3"),wm_handle,hwndcouv,0);
break;
voici le code du fichier ressource du programme, où apparait les boites de dialogues ressources.
#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <ctype.h>
#include "fonctions.h"
personne bitmap "personne.bmp"
icone1 icon "bonnet.ico"
dialog1 dialog
10, 10, 160, 120
style ws_popup | ws_visible | ws_caption | ws_sysmenu
caption "crã©er un nouveau carnet d'adresses "
begin
defpushbutton "ok", id_ok, 56, 55, 42, 12
ltext "nom du nouveau carnet :", -1, 10, 15, 90, 10
edittext ide_edit1, 45, 30, 60, 12,es_left | ws_border | ws_tabstop
ltext "caractã¨res permis :", -1, 10, 70, 90, 10
ltext "abcdefghijklmnopqrstuvwxyz", -1, 10, 80, 150, 10
ltext "abcdefghijklmnopqrstuvwxyz", -1, 10, 90, 150, 10
ltext "0123456789_", -1, 10, 100, 150, 10
end
dialog2 dialog
10, 10, 160, 120
style ws_popup | ws_visible | ws_caption | ws_sysmenu
caption "a propos du carnet d'adresses "
begin
ltext "carnet d'adresses 0.0.1", -1, 10, 10, 150, 10
ltext "© acryline", -1, 10, 20, 150, 10
ltext "ce programme est fourni sans aucune garantie comme prã©vu par la loi.", -1, 10, 35, 150, 50
ltext "vous pouvez le redistribuer selon les termes de la licence publique gã©nã©rale gnu.", -1, 10, 60, 150, 50
defpushbutton "ok", id_ok, 56, 95, 42, 12
end
<strong>
dialog3 dialog
10, 10, 200, 180
style ws_popup | ws_visible | ws_caption | ws_sysmenu
caption "affichage "
begin</strong>
end
ici nous allons utiliser la boite de dialogue dialog3. cette fenãªtre a une procã©dure que voici :
tout d'abord voici une nouvelle structure que j'ai dã©finie dans le header :
typedef struct config config;
struct config
{
char largeur[5];
char hauteur[5];
colorref couleur[6];
char adresse [max_path];
};
j'ai eu du mal avec cette partie du programme, j'apprenais en faisant... donc le code ne correspond pas exactement ã l'organigramme :
bool apientry dialog3proc(hwnd hdlg,uint umsg,wparam wparam,lparam lparam)
{
static hwnd hwndonglet1=null, hwndonglet2=null, hboutonok=null, hboutonan=null;
static hwnd htabs=null,hwndcouv=null;
static config data, *p_data;
switch (umsg)
{
case wm_initdialog: // ici au je n'ai pas crã©ã© de fonction, le code est placã© directement dans la procã©dure
{
tcitem tie;
//charger la configuration actuelle.
structureconfig ( &data);
initcommoncontrols();
htabs = createwindowex(0 , wc_tabcontrol, "", ws_child | ws_visible,
10, 10, 380, 300,hdlg, null, hinstance, null);
tie.mask = tcif_text;
tie.psztext = "couverture";
tabctrl_insertitem(htabs, 1, &tie);
tie.psztext = "fiches";
tabctrl_insertitem(htabs, 2, &tie);
hwndonglet1=onglet1(htabs); //fonction pour crã©er la premiere fenãªtre onglet
hwndonglet2=onglet2(htabs); //fonction pour crã©er la seconde fenãªtre onglet
sendmessage (hwndonglet1,wm_couleur,&data,hdlg);
sendmessage (hwndonglet2,wm_couleur,&data,hdlg);
showwindow(hwndonglet1,sw_show);
//deux boutons au bas de la boite de dialogue : ok et annuler.
hboutonok=createwindow("button","ok",ws_child|ws_visible | bs_pushbutton ,
120,330,80,20,hdlg,null,hinstance,null);
hboutonan=createwindow("button","annuler",ws_child|ws_visible | bs_pushbutton ,
220,330,80,20,hdlg,null,hinstance,null);
return true;
}
case wm_command:
messagestab (hdlg,wparam,lparam,&data);
invalidaterect(hwndcouv,null,true);
return true;
case wm_notify: // pour passer d'une fenãªtre ã l'autre en pressant sur les onglets
{
lpnmhdr pnmhdr = (lpnmhdr)lparam ;
if(pnmhdr->code == tcn_selchanging && tabctrl_getcursel(htabs) == 1)
{
showwindow(hwndonglet2,sw_hide);
showwindow(hwndonglet1,sw_show);
}
if(pnmhdr->code == tcn_selchanging && tabctrl_getcursel(htabs) == 0)
{
showwindow(hwndonglet1,sw_hide);
showwindow(hwndonglet2,sw_show);
}
return true;
}
case wm_couleur: //envoie du message wm_couleur aux procã©dures des fenãªtres ã onglet
p_data=wparam;
data=*p_data;
sendmessage (hwndonglet1,wm_couleur,&data,hdlg);
sendmessage (hwndonglet2,wm_couleur,&data,hdlg);
return true;
case wm_handle: // pour rã©cupã©rer le handle de la couverture.
if (lparam==0) hwndcouv= (hwnd)wparam;
return true;
case wm_close:
enddialog(hdlg,0);
return true;
default:
return false;
}
}