problem de define en c avec winapi

problem de define en c avec winapi - C - Programmation

Marsh Posté le 28-01-2009 à 22:33:10    

Bonjour a tous,
je suis en train de créer un programme et avec une interface graphique (winapi)  créer par les ressource.
j'utilise les DEFINE pour identifier chaque control:
***************************
Les define :
 
 
#define
 
ID_D_MAIN 0005
#define
 
ID_M_MENU_MAIN 0006
#define
 
ID_MODE 0007
#define
 
ID_B_OPEN_SAVE 00010
#define
 
ID_T_FILE 00011
#define
 
ID_T_IP 00012
#define
 
ID_T_PORT 00013
#define
 
ID_B_SEND_RECV 00014
 
 
La dialog :
 
 
ID_D_MAIN DIALOGEX 0, 0, 5+30+5+97+5, 5+11+5+11+5
 
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
 
CAPTION  
 
"Send_File_RB [Client]"
MENU ID_M_MENU_MAIN
 
FONT 10,  
 
"Berlin Sans FB Demi", 0, 0, 0x0
BEGIN
 
DEFPUSHBUTTON  
 
"Open",ID_B_OPEN_SAVE,5,5,30,11
EDITTEXT ID_T_FILE,5+30+5,5,97,11,ES_AUTOHSCROLL
 
EDITTEXT ID_T_IP,5,5+11+5,65,11,ES_CENTER
 
EDITTEXT ID_T_PORT,5+65+5,5+11+5,27,11,ES_NUMBER|ES_CENTER
 
DEFPUSHBUTTON  
 
"Send",ID_B_SEND_RECV,5+65+5+27+5,5+11+5,30,11
END
***************************
 
Le probleme c'est que quand je veut utiliser les define pour par exemple verouiller le TEXTBOX  ip avec la fontion  sa EnableWindow(GetDlgItem(hwnd,ID_T_IP),0); sa verouille le bouton open (ID_B_OPEN_SAVE).
merci a tous ceux qui repondront a ma question.
a++

Reply

Marsh Posté le 28-01-2009 à 22:33:10   

Reply

Marsh Posté le 28-01-2009 à 22:55:28    

Mouais 12 en octal, ça donne 10 en décimal. Vire les 0 qu'il y a avant les nombres dans tes defines.

Reply

Marsh Posté le 28-01-2009 à 23:52:00    

sa marche pas maintenant sa reconnai aucain control.
je compren pas c bizare

Reply

Marsh Posté le 29-01-2009 à 03:24:19    

Tu devrais être un peu plus précis quand tu dis que "sa marche pas".
 
Bon mon explication était sans doute pas très claire, alors je recommence. Tes defines sont de la forme :

Code :
  1. #define ID_B_OPEN_SAVE 00010


J'ai pas l'impression que t'es au courant que mettre un 0 avant un nombre en C, c'est la manière d'utiliser la notation octale (base 8). Et en général, lorsqu'on veut vraiment utiliser la base octale, on ne met qu'un seul 0.
 
D'autant que ton ID_T_IP vaut 012, soit 10 en décimal, ce qui est la valeur de ID_B_OPENSAVE s'il avait été exprimé en décimal (ce qui est certainement le cas dans le programme qui t'a généré l'interface).
 
Donc je parie qu'en enlevant ces zéros de bourrage, tu ne désactiverais pas le mauvais bouton en utilisant ta constante.

Reply

Marsh Posté le 29-01-2009 à 11:27:53    

bonjour,
j'ai mis sa a la place :
 
//define recource
#define ID_D_MODE  111
#define ID_GROUP   112
#define ID_SERVEUR  113
#define ID_CLIENT   114
 
#define ID_D_MAIN  115
#define ID_M_MENU_MAIN  116
#define ID_MODE   117
 
#define ID_B_OPEN_SAVE  118
#define ID_T_FILE   119
#define ID_T_IP   1110
#define ID_T_PORT  1111
#define ID_B_SEND_RECV  1112
 
mais sa marche toujour pas.
peut etre que le probleme ne vien pas de la.
peut etre quil vien de mon fichier ressource.
le voisi :
#include "main.h"
 
//dialog principale
ID_D_MAIN DIALOGEX 0, 0, 5+30+5+97+5, 5+11+5+11+5
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CAPTION "Send_File_RB [Client]"
MENU ID_M_MENU_MAIN
FONT 10, "Berlin Sans FB Demi", 0, 0, 0x0
BEGIN
    DEFPUSHBUTTON  "Open",ID_B_OPEN_SAVE,5,5,30,11
 EDITTEXT   ID_T_FILE,5+30+5,5,97,11,ES_AUTOHSCROLL
 EDITTEXT   ID_T_IP,5,5+11+5,65,11,ES_CENTER
 EDITTEXT   ID_T_PORT,5+65+5,5+11+5,27,11,ES_NUMBER|ES_CENTER
 DEFPUSHBUTTON  "Send",ID_B_SEND_RECV,5+65+5+27+5,5+11+5,30,11
 
END
 
//dialog pour choisir le mode serveur ou client
ID_D_MODE DIALOGEX 0, 0, 10+60+10, 20+10+5+20+15+10
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Mode"
FONT 9, "MS Sans Serif", 0, 0, 0x0
BEGIN
 GROUPBOX   "Mode",ID_GROUP,10,10,60,40
 AUTORADIOBUTTON  "Serveur",ID_SERVEUR,20,20,40,10
 AUTORADIOBUTTON  "Client",ID_CLIENT,20,20+10+5,40,10
 DEFPUSHBUTTON  "OK",IDOK,10,20+10+5+20,60,15
END
 
//menu de main
ID_M_MENU_MAIN MENU  
BEGIN
    POPUP "Options"
    BEGIN
        MENUITEM "Mode", ID_MODE
    END
END

Reply

Marsh Posté le 29-01-2009 à 11:35:17    

j'ai essayer de mettre des int a la place des define mais sa marche pas.
c'est normale?

Reply

Marsh Posté le 29-01-2009 à 13:34:00    

dyroj a écrit :

j'ai essayer de mettre des int a la place des define mais sa marche pas.
c'est normale?


Oui. Un #define ne crée pas de variable, c'est une macro de remplacement à la compilation.

Reply

Marsh Posté le 29-01-2009 à 14:49:22    

mais alors personne sais pourquoi sa me fai sa.

Reply

Marsh Posté le 29-01-2009 à 15:16:03    

Faire quoi ? Même en changeant les identifiants, tu as toujours le mauvais control qui est désactivé ?

Reply

Marsh Posté le 29-01-2009 à 15:19:03    

en changeant plus rien n'est desactiver.

Reply

Marsh Posté le 29-01-2009 à 15:19:03   

Reply

Marsh Posté le 29-01-2009 à 15:19:35    

et vous avez verifier le fichier ressource.

Reply

Marsh Posté le 29-01-2009 à 16:41:16    

J'ai l'impression que tu fais tout à la main, sans IDE. Ton fichier de ressources tu l'as recompilé lorsque tu as changé les defines ?
 
Edit: ton fichier de ressource à l'air d'être correct, tes defines aussi.


Message édité par tpierron le 29-01-2009 à 16:42:17
Reply

Marsh Posté le 29-01-2009 à 16:42:15    

je suis sous vc++

Reply

Marsh Posté le 29-01-2009 à 17:22:09    

Oué, mais est-ce que tu as vu quelque part que ton fichier de ressource a bien été recompilé ?

Reply

Marsh Posté le 29-01-2009 à 17:23:16    

oui il a ete recompiler

Reply

Marsh Posté le 29-01-2009 à 18:00:40    

Bah, chais pas ce que tu fais exactement, mais chez_moi_ca_marche™.
 
J'ai rajouté un :

Code :
  1. EnableWindow(GetDlgItem(hwndDlg,ID_T_IP),0);

à l'évédement WM_INITDIALOG, et c'est bien la zone d'édition qui est grisé, pas open :
 
http://www.izipik.com/images/20090129/isooyg-dialog-win32-ressource-file.png
 

Reply

Marsh Posté le 29-01-2009 à 18:07:08    

moi aussi sa marche.
j'ai recrée le projet et j'y est insserer le meme code et sa marche je ne comprend pas vraiment pourquoi sa marchai pas mais bon l'ésenciel c'est que sa marche.
je te remersi pour ton aide tpierron.
tu peut me dire comment sa se fait que toi ta des beau bouton et textbox et moi il son moche.
quand je dit beau bouton sa veut dire style 3D...

Reply

Marsh Posté le 29-01-2009 à 18:17:15    

Ah, ça c'est le Manifest XP (c.f. google). S'il n'est pas là, windows va utiliser une ancienne version (la v5) de la lib commoncontrol (celle qui gère l'interface). Pour activer les thèmes, il faut rajouter un fichier XML à la con (j'utilise Code::Blocks avec MinGW, tout ce qu'il y à faire c'est cocher une case, ça doit pareil avec Visual C++), pour utiliser la dernière version de la lib (v6), qui elle supporte les thèmes.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed