Accueil > Forum > > > > Decalement de 3 pixel dans le HDC
Decalement de 3 pixel dans le HDC
jeudi 27 janvier 2005 à 14:30:47 |
Decalement de 3 pixel dans le HDC

SnOOpss
|
Bonjour !!! Pourquoi si je fait :
case WM_PAINT:
{
RECT rt;
PAINTSTRUCT ps;
HDC hdc = BeginPaint(GetParent(hwnd), &ps);
GetWindowRect( hwnd, &rt);
FillRect(hdc,&rt,crouge);
je me retrouve avec un carré rouge pile dans les coordonées du handle de la fentre tandis que si je fait
case WM_PAINT:
{
RECT rt;
HDC hdc = GetWindowDC(GetParent(hwnd));
GetWindowRect( hwnd, &rt);
FillRect(hdc,&rt,crouge);
Je retrouve avec un decalage de 3 pixels, a la rigueur je m'en fou je
peu le decaler mais est ce que sur un ordre ordi il sera encore de 3
pixels ???
En fait je ne peux pas utiliser Beginpaint en dehors du WM_paint donc sa me pose probleme dans la suite du prog !!
|
|
jeudi 27 janvier 2005 à 16:27:17 |
Re : Decalement de 3 pixel dans le HDC

ymca2003
|
Begin paint récupére un Dc pour dessiner dans la zone cliente de la fenêtre. GetWindowDc récupère un DC de la fenêtre en entier (avec les bordures et la barre de titre) d'ou le décalage de pixel.
Quoi qu'il en soit pour quoi dans le traitement de WM_PAINT tu récupère le DC du parent de ta fenêtre ?
Si tu veux récupérer un DC en dehors de WM_PAINT, c'est GetDC. Mais le mieux c'est quand même de demùander de redessiner la fenêtre avec invalidateRect plutot que de dessiner n'importe quand.
|
|
jeudi 27 janvier 2005 à 19:08:36 |
Re : Decalement de 3 pixel dans le HDC

SnOOpss
|
Je recupere le dc de la fentre parente car je dessine en dehors de le
fentre fille et je ne peux pas me servir de wm_paint par exmple
dans c WM_CTLCOLORLISTBOX je redessine un truc sur la listbox et a
cette interuption je suis obligé de recuperer le dc par GetDc.
Pour la taille du titre c'est bon je les ai tous virés mais ya pas un
moyen de connaitre l epaisseur du cadre pour etre sur que ca marche d
un ordi sur lautre ???
|
|
vendredi 28 janvier 2005 à 09:00:59 |
Re : Decalement de 3 pixel dans le HDC

ymca2003
|
Je ne comprend pas trop. tu traite WM_CTLCOLORLISTBOX pour dessiner dans ta ListBox. Ce message est reçu par le parent de la ListBox donc le DC du parent du ListBox est le DC de la fenêtre qui reçoit le message c'est à dire le hWnd de la WndProc (ou DlgProc) que tu récupère par GetDC(hwnd) non ?
Si c'est pas ça, ourrait-tu expliquer ce que tu veux faire (quel genre d'interfcae tu veux et comment tu le fait), il y a peut-être plus simplet et plus propre (il n'est pas bon de dessiner ailleurs que dans sa zone cliente quqnd on nous le demande).
|
|
vendredi 28 janvier 2005 à 09:50:33 |
Re : Decalement de 3 pixel dans le HDC

SnOOpss
|
Je traite WM_CTLCOLORLISTBOX comme ca g toute les information que je ve sur les listboxs presente sur le dialog.
En fait cette application est une dll ki applique un theme sur un autre
programme c'est l'autre programme qui crée le dialog moi je ne fait ke
sous classer le dialog complet grace a la dll, je fait ma sauce et je
lui renvoi la main !!!
Les bouttons sont carrement refait en ownerdraw mais j'ai franchement
la flemme de faire pareil pour les listbox et en faisant comme ca, ca
marche a part le decalage.
Effectivement avecWM_CTLCOLORLISTBOX
g le bon DC mais je ne peux pas utliser beginpaint donc je me retrouve
avec un decalage de 3 pixel vers le haut et vers la gauche en dehors de
la listbox.
|
|
vendredi 28 janvier 2005 à 10:18:39 |
Re : Decalement de 3 pixel dans le HDC

ymca2003
|
Dans ton subclassing, tu as donc comme param de la DlgProc le handle de la boîte de dialogue (qui doit être le parent de la listbox mais il se peut qu'il y ai une ruse dans la façon que le programme crée ses contrôles).
Pour avoir les coordonnées de la listBox relativement à la zone cliente du Dialog( peut importe leur lient de parenté réel) : HWND hListBox -> handle de la listbox (doit se trouver dans les param du WM_COLORLISTBOX) HWND hDlg -> handle de la boîte de dialogue subclassée (doit se trouver en param de ta nouvelle DlgProc).
RECT rcListBox; GetWindowRect(hListBox, &rcListBox); MapWindowPoints(HWND_DESKTOP, hDlg, (LPPOINT)&rcListBox, 2);
en récupérant le DC de la zone cliente du dialogue : HDC hdc = GetDC(hDlg);
=> rcListBox représente le rectangle de la ListBox dans ce DC (à toi de dessiner autour).
Ne pas oublier de faire un ReleaseDC().
|
|
vendredi 28 janvier 2005 à 14:04:28 |
Re : Decalement de 3 pixel dans le HDC

SnOOpss
|
Rien a faire toujour le meme decalge de 3 pixel pareil pour la meme avec ton code
case WM_PRINT:
{
RECT rcListBox;
GetWindowRect(hwnd, &rcListBox);
MapWindowPoints(HWND_DESKTOP, hDlg, (LPPOINT)&rcListBox, 2);
RECT rt;
rt=tabpoint->rteff;
HDC hdc = GetWindowDC(GetParent(hwnd));
POINT lppt;
SetBrushOrgEx(hdc,3,3,&lppt);
FillRect(hdc,&rt,hbDialog);
La partie en vert amene le meme resultat ke la partie en
rose du coup je suis obligé de decaler ma brosse avec la commande en
rouge.
|
|
vendredi 28 janvier 2005 à 14:11:08 |
Re : Decalement de 3 pixel dans le HDC

SnOOpss
|
Je pense me servir de SM_CXBORDER, SM_CYBORDER ou de SM_CXEDGE,
SM_CYEDGE pour avoir la decalage mais ca ne me servirait a rien vu ke
ca voudrait dire ke sur n'importe quel ordinateur sur n importe kelle
reolution et n'importe quel systeme d exploitation la taille des
bordure serait la meme (vu que ce sont des constantes non ??) donc de
tout decaler de 3 pixels ce serait une bonne idées. Tu penses ke c bon
????
|
|
vendredi 28 janvier 2005 à 14:24:03 |
Re : Decalement de 3 pixel dans le HDC

ymca2003
|
Réponse acceptée !
Tu insiste vraiment pour prendre GetWindowDC alors que j'ai dit GetDC (ou alors tu n'as remis que ton code initial).
Sinon SM_CXBORDER sont effectivement des constantes qui servent à récupérer les valeurs dynamiques du système par l'intermédiare de GetSystemMetrics();
|
|
vendredi 28 janvier 2005 à 14:34:42 |
Re : Decalement de 3 pixel dans le HDC

SnOOpss
|
Mince désolé j'avais pas repéré la bonne partie du code a changer, en
tout cas c'était simplement ca GetDC a la place de GetWindowDC, me
reste plus qu'a tout rechanger au endroit ou j'ai du gruger les 3
pixels je suis sur que c'est la meme histoire.
En tout cas merci parce que j aurait jamais pensé a ca ( je l'ai meme pas vu quand tu la mit dans ton post)
|
|
Cette discussion est classée dans : wm, hwnd, hdc, paint, rt
Répondre à ce message
Sujets en rapport avec ce message
Screenmate defectueux [ par anthraxx ]
Anthrax ignisque -- Le charbon et le feu J'essaye de faire un screenmate (une petite bestiole se promenant sur les fenetres), mais n'etant pas tres ex
win app et les variable [ par ultima666 ]
Dsl de refaire un sujet dessus mais personne ne répond a l'autre.case WM_PAINT:{// Debut de WM_PAINTint i = 2;hDc = BeginPaint(hWnd, &ps);GetClientRec
Effacer les graphiques avec InvalidateRect !? [ par Suisse00 ]
Dans plusieurs source je voie qu'il utilise InvalidateRect pour "effacer". Mais dans mon cas sa fait en sorte que je recois toujours WM_PAINT (et don
Affichage bitmap [ par gregory6 ]
GringoBonjour, je suis débutant ss visual C++ et j'aurai besoin d'un peu d'aide. Je crée un projet MFC ds lequel je crée une fenetre. Cette fenetre cr
un probleme de calcul de courbe [ par Cyr62110 ]
Voila mon probleme, je creer un programme dessinant des courbes (fonction,point par point).Mais j'ai un probleme, lors ce que je teste et je rentre le
Re : WM_KEYDOWN interception touche clavier [ par gregory6 ]
GringoBonjour, Je débute sous visual C++ et j'ai un petit problème sur les interceptions de touches au clavier. J'aimerai récupérer les touches du cla
WM_PAINT [ par Ensias ]
Salut tous le monde , je voudrais savoir si le message WM_PAINT est envoyé indifiniment à la fenetre, ou bien suite à des evenements precis si c'est l
Prob gestion des touches Win32 Unicode [ par raton ]
Salut a tous.Voila je suis en train de dev une app pour un scanner (genre ce qu'utilise les caissieres mais avec des touches dessus) et j'ai un petit
Problème d'enregistrement avant de quitter [ par julien_boss ]
Un problème assez chiant il faut dire. Voilà, je vous explique :le client quitter sur la pitite croix rouge, direction message WM_CLOSE : case
Contrôle windows sur surface DirectDraw [ par rom2n ]
Bonjours a tous, je suis en train de développer un jeu en 2D avec DirectDraw et je voulais savoir comment on pouvais affiché un contrôle windows sur u
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|