begin process at 2012 05 28 19:13:00
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Composant Perso


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Composant Perso

dimanche 4 décembre 2005 à 15:05:05 | Composant Perso

Joky

Membre Club
Hey Bonjour les gens !
J'ai un soucis :)
Donc voila j'ai créer un composant drButton qui crée un bouton en forme de flêche soit qui se dirige vers la gauche soit vers la droite !
Donc le premier problème que j'ai rencontré, c'est dans WM_PAINT
Je voulais récupérer la valeur de la direction ( contenue dans la structure drButton )
Mais voilà pas possible à travers la gestion des gestion !
Donc je suis passé par un message personnel

WM_GETDIR WM_USER+1

et voici la macro correspondante

#define Draw_Button(hButton, Dir) \
    (SendMessage(  \
        (hButton), \
        WM_GETDIR, \
        (WPARAM)(DIRECTION)Dir, \
        0L))

Donc dans le message correspondant je récupère la direction
avec
static int Pos = (DIRECTION)wParam;
et ainsi dans WM_PAINT, je peut dessiné en fonction de la direction.
Sauf que voilà ça marche pas puisque il reçoit le message WM_PAINT par la suite sans passer par WM_GETDIR
Et je ne peut simuler le message car je n'ai pas l'objet correspondant dans ma Procédure de message :)

En faite, je voudrais savoir, si il est possible de récupèrer l'objet associer à une Procédure de message :)
Voila merci bien :p

if(!Meilleur("Joky")) return ERREUR;<

dimanche 4 décembre 2005 à 15:40:16 | Re : Composant Perso

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
C'est quoi la "la gestion des gestion"?
J'ai pas compris le but de WM_GETDIR. Même quand tu recois le message, comment retrouves-tu la structure (si tu as plusieurs boutons dans ton application)?

Pour connaitre la direction, tu peux attacher une valeur à ton bouton:
SetWindowLong(hbtn, GWL_USERDATA, &drButton);
J'imagine que tu vois comment la récupérer
Si tu n'aimes pas la méthode, tu peux aussi utiliser un conteneur associatif:
map<HWND, int> qui te donnera la direction en fonction du bouton
dimanche 4 décembre 2005 à 15:47:15 | Re : Composant Perso

Joky

Membre Club
La gestion de gestion c'était la gestion des messages mais écrit en trop vite lol :)

Donc je reprend :)
J'ai une structure de bouton
typedef struct
{
    HWND hButton;
    HINSTANCE hInst;
    DIRECTION dirButton;

}drButton, *LP_drButton;

avec enum DIRECTION
{
    LEFT,
    RIGHT,
};

Et donc dans mon application je créer un bouton vers la gauche et un bouton vers la droite
Mais seulement voilà ! aucun moyen de récupèrer la direction dans WM_PAINT
Ainsi, j'ai fait le message WM_GETDIR qui fait ça :
case WM_GETDIR:   
        MyButt = NewButton(hWnd, (DIRECTION)wParam);
        SendMessage(hWnd, WM_PAINT, wParam, lParam);
        return 0;

Comme ça j'ai l'objet associé ! mais seulement il ne passe qu'une fois par la donc ça sert à rien lol.
Si tu pouvais expliquer un peu plus pour le SetWindowLong parce que j'ai vu dans la source de ymca sur les splitter la même méthode, donc ça m'intéresserai de la comprendre :)

TSplitterWnd* pSplitter = NULL;
    if(uMsg != WM_NCCREATE)
        pSplitter = (TSplitterWnd*)GetWindowLong(hWnd, 0);
    else
    {
        pSplitter = new TSplitterWnd(hWnd);
        SetWindowLong(hWnd, 0, (LONG)pSplitter);
    }

Lui c'était avec des classes mais bon voilà :)

if(!Meilleur("Joky")) return ERREUR;<

dimanche 4 décembre 2005 à 16:10:12 | Re : Composant Perso

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
Tu connais pas SetWindowLong? Dommage, c'est très utile. Mais laissons la source de ymca de coté si tu veux bien (SetWindowLong set a faire plein de trucs différents).
Ta structure ne sert en fait a rien. Avec SetWindowLong, tu associe directement une valeur à un bouton.
Par exemple, tu pourrais utiliser ces deux fonction, fournies gratuitement par moi:

void SetButtonDirection(HWND hBtn, DIRECTION d)
{
  SetWindowLong(hBtn, GWL_USERDATA, d);
}

DIRECTION GetButtonDirection(HWND hBtn)
{
  return GetWindowLong(hBtn, GWL_USERDATA);
}
dimanche 4 décembre 2005 à 16:15:58 | Re : Composant Perso

Joky

Membre Club
Yo bé tu sais quoi :p
Juste quand t'as répondu, bé j'ai réussi lol :)

    int Pos = MyButt->dirButton;

    MyButt->hButton = CreateWindow("drButton", 0, WS_VISIBLE | WS_CHILD,
                                   50*Pos+10, 10, 11, 11, hParent, NULL, MyButt->hInst, NULL);

    SetWindowLong(MyButt->hButton, GWL_USERDATA, Pos);

et dans la procédure de message
static int pos = GetWindowLong(hWnd, GWL_USERDATA);

et ça marche impec :)
Merci mille fois :)
Et si je connais SetWindowLong, c'était juste le USERDATA, je voyais pas à quoi ça correspondait :)

Mille bisous (k) :p

if(!Meilleur("Joky")) return ERREUR;<

lundi 5 décembre 2005 à 10:59:49 | Re : Composant Perso

magma

MyButt == MonCul ...... in english !
lundi 5 décembre 2005 à 11:09:53 | Re : Composant Perso

vecchio56

Administrateur CodeS-SourceS
Ya toujours des trucs subliminaux dans les sources de Joky...
lundi 5 décembre 2005 à 18:15:46 | Re : Composant Perso

Joky

Membre Club
Lol mdr
J'ai mis 10 Minutes à réfléchir pour comprendre mais voilà lol
Donc bé oui MyButton c'était trop long :)
J'essairai de me renseigner sur la langue anglaise avant de coder prochain coup :)

Au faite, c'était pas BruNews qui disait qu'on programmer avec une 100aine de mots ? :)
Comme quoi !

if(!Meilleur("Joky")) return ERREUR;<

lundi 5 décembre 2005 à 21:08:49 | Re : Composant Perso

Joky

Membre Club
Hé Vecchio j'ai un soucis lol :)
Pourquoi quand j'essai de stocker une chaîne dans GWL_USERDATA
Bé j'arrive à retrouver la chaîne mais seulement localement, et quand j'essai de récupérer sa valeur autre part, ça marche pas :(
Comment ça se fait ? :)

BOOL CreateMyLink(LP_drLink MyLink, HWND hParent)
{
    MyLink->hLink = CreateWindow("drLink", MyLink->szLink, WS_VISIBLE | WS_CHILD,
                                 50,30,50, 20,
                                 hParent, NULL, MyLink->hInst, NULL);
   
    SetWindowLong(MyLink->hLink, GWL_USERDATA, (LONG)MyLink->szLink);
    MessageBox(0,(char*)GetWindowLong(MyLink->hLink, GWL_USERDATA), 0, 0x40);
    if(!MyLink->hLink)
        return FALSE;
    else
        return TRUE;
}

Dans Procédure des messages:
    case WM_GETVALUE:
        MessageBox(0,(char*)GetWindowLong(hWnd, GWL_USERDATA), 0, 0x40);
        return 0;

et donc le premier marche et l'autre non :(

if(!Meilleur("Joky")) return ERREUR;<



Cette discussion est classée dans : message, composant, wm, paint, direction


Répondre à ce message

Sujets en rapport avec ce message

message WM_PAINT [ par spiky31 ] BonjourJe m'excuse si ca semble une question de debutant mais c'est la premiere fois que je dessine dans une fenetre windows :(Je me suis rendu compte Message WM_NCLBUTTONUP [ par _michel ] J'ai un problème dans la CallBack de ma fenêtre : je n'arrive pas à receptionner les messages WM_NCLBUTTONUP, qui sont envoyés à chaque fois que le bo Envoyer un message WM_USER à un service ? [ par spectrobob ] Comment fait-on pour envoyer un message de type WM_USER d'un exécutable  console (MFC) vers un service windows (MFC) donc sans handle de fenêtre ?Merc comment choper un message WM_KEYDOWN d'une Ccombobox? [ par papipsycho ] Bonjour comment choper un message WM_KEYDOWN d'une CcomboboxMerci.--==Papi Psycho==-- [keyboard] attente windows message [ par Andejen ] Bonjour,Je viens de creer une fonction assez simple qui me permet d'effectuer une action des que l'utilisateur tape une touche au clavier. Cependant, WM_USER [ par mika_33 ] Bonjour à toute la communauté, Voici mon problème je développe un programme avec builder 4 pour la lecture et l'écriture de caractères sur une liaison WM_MOUSEWHEEL et XP [ par Pistol_Pete ] Salut à tous Je cherche à gérer la molette de la souris dans mon application win32. Le message WM_MOUSEWHEEL correspond parfaitement à ce que je veux. Win32 - Message WM_LBUTTONUP non reçu [ par nico255 ] Bonsoir, mon programme en C Win32 est en tray-icon et s'inspire fortement de la source CONTROLE-VOLUME-OSD-WIN32 (ID=38949) - une CreateWindowEx WS_ API Windows, gestion de WM_COMMAND [ par coucou_le_minou ] Bonjour, tout d'abord pardonnez moi si mon message ne correspond pas a la rubrique choisie, j'ai eu quelques soucis a cerner la categorie de mon probl Reception multiple dans PeeKMessage [ par sephiro ] BonjourVoici mon probleme:J'envoie un message à un Thread que je viens de créé (pas de probleme) Ptr_Thread=CreateThread(NULL,NULL,Thread_DownLoad,(LP


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales