Accueil > Forum > > > > Problèmes avec les API graphiques de windows
Problèmes avec les API graphiques de windows
dimanche 27 mai 2007 à 18:12:27 |
Problèmes avec les API graphiques de windows

Kite37
|
Bonjour ! J'ai trouvé des morceaux de code sur différents sites touchant au API graphique présents dans windows, mais je ne sais pourquoi je n'arrive pas a en faire marcher un seul .. Que se soit SetPixel ou bitblt par exemple, j'obtient a chaque fois la meme erreur. Voici les déclarations des deux API : Declare Function BitBlt Lib "gdi32" Alias "BitBlt" ( _ ByVal hDestDC As Long, _ ByVal x As Long, _ ByVal y As Long, _ ByVal nWidth As Long, _ ByVal nHeight As Long, _ ByVal hSrcDC As Long, _ ByVal xSrc As Long, _ ByVal ySrc As Long, _ ByVal dwRop As Long)As LongDeclare Function SetPixel Lib "gdi32" (byval hDC as long, ByVal X as long, ByVal Y as long, ByVal color as long) As Long. Travaillant sur VB 2005, voici des exemples de code que j'ai testé, sans succès : setpixel(form1.handle, 50,50, color) (color étant défini par la fonction RGB auparavant dans mon programme), le but étant ici de faire aparaitre un pixel de la couleur voulue au point de coordonnées 50/50 sur ma form. bitblt(form1.handle, 50,50,picSource.width, picSource.height, picSource.handle, 0,0, SRCCOPY) SRCCOPY étant une constante de l'API = &HCC0020 , le but ici étant de copier l'image d'une picturebox vers une autre simplement. Cependant, dans chacun des cas, une erreur survient : PInvokeStackImbalance a été détecté Message: Un appel à la fonction PInvoke 'WindowsApplication1!WindowsApplication1.Form1::SetPixel' a déséquilibré la pile. Cela peut se produire, car la signature PInvoke managée ne correspond pas à la signature cible non managée. Vérifiez que la convention d'appel et les paramètres de la signature PInvoke correspondent à la signature non managée cible. Quelqu'un maniant bien ces APIs en VB 2005 pourrait-il me dépanner? car je ne trouve vraiment rien sur MSDN qui me sorte de ce mauvais pas :s
|
|
dimanche 27 mai 2007 à 18:58:27 |
Re : Problèmes avec les API graphiques de windows

casy
|
Si tu travaille en VB2005, il te faut modifier toutes les déclarations des fonctions de l'api.
En effet, à moins que ce soit explicitement mentionner, les codes que tu trouvera ne sont par pour la plateforme .Net. Sous .Net certains types de variables ont changés. C'est le cas notamment des Long. Sur une structure Win32 (API windows, VB6, ...) un long fait 32 bits soit 4 octets. Sur une plateforme Win64 ou sur la plateforme .Net, un long fait 64 bits soit 8 octets.
Dans toutes les déclarations, il faut donc que tu remplace tous les long par leur équivalent 32bits sous .Net soit au choix Integer ou Int32
---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
|
|
dimanche 27 mai 2007 à 19:28:54 |
Re : Problèmes avec les API graphiques de windows

Kite37
|
hum ta solution corrigé bien l'erreur, mais cependant je n'arrive pas a afficher les pixel et les image normalement obtenues a l'écran :s
La form sur laquelle je suis sensé dessiner reste vierge ..
|
|
lundi 28 mai 2007 à 09:09:19 |
Re : Problèmes avec les API graphiques de windows

Renfield
|
en VB6, je t'aurais dit de faire un Refresh, et de vérifier ton AutoRedraw...
form1.handle => c'est le hWnd il faut passer un hDc aux API
Renfield Admin CodeS-SourceS- MVP Visual Basic
|
|
lundi 28 mai 2007 à 11:04:40 |
Re : Problèmes avec les API graphiques de windows

Kite37
|
Réponse acceptée !
Je pense avoir trouvé :
une API de windows est la suivante :
Private Declare Function GetDC Lib "user32" ( _
ByVal hwnd As Integer) As Integer
Ainsi, pour SetPixel, en faisant :
SetPixel(GetDC(Me.Handle), x, y, color)
au lieu de :
SetPixel(Me.Handle, x, y, color)
Nous obtenons enfin un résultat concluant ! A vérifier maintenant si c'est aussi le cas pour BitBlt, mais cela ne devrait poser aucun problème, GetDC fournissant le hDC inexistant en .NET :)
|
|
lundi 28 mai 2007 à 11:18:32 |
Re : Problèmes avec les API graphiques de windows

Kite37
|
Réponse acceptée !
Je viens cependant de m'apercevoir d'une chose : GetDc étant assez long d'exécution il est préférable de mettre le hDC du controle voulu dans une variable puis d'utiliser celle-ci, comme suit :
Dim hdc As Int32 = GetDC(Me.Handle)
puis
SetPixel(hdc, x, y, color)
En effet, en 1 seconde, le code du message précédent ne trace que 2400 points, alors que celui que je viens de donner en trace près de 73000 !
|
|
lundi 28 mai 2007 à 12:21:35 |
Re : Problèmes avec les API graphiques de windows

Renfield
|
Réponse acceptée !
le probleme est que tu ne libère pas ton DC, et que, par conséquent, tu risque de provoquer un crash rapidement...
ReleaseDc
SetPixelV ira plus vite encore....
Renfield Admin CodeS-SourceS- MVP Visual Basic
|
|
lundi 28 mai 2007 à 12:23:19 |
Re : Problèmes avec les API graphiques de windows

Kite37
|
Réponse acceptée !
Private Declare Function ReleaseDC Lib "user32" ( _
ByVal hwnd As Integer, _
ByVal hdc As Integer) As Integer
ça peut servir ;)
|
|
lundi 28 mai 2007 à 12:32:45 |
Re : Problèmes avec les API graphiques de windows

Kite37
|
Réponse acceptée !
De plus, après vérification, la seule différence entre SetPixel et SetPixelV est la valeur de retour (long pour la couleur dans un cas, boolean dans l'autre).
Donc meme avec SetPixelV, le problème de libération du hDC se serait posé ^ ^.
De plus, MSDN nous dit que SetPixelV est censé être plus rapide que SetPixel, mais après plusieurs test l'écart de rapidité apparait comme négligeable. (moins de 200 point d'écart, quelques soit la durée d'exécution du code).
Je pense donc que les API SetPixel, GetDc et ReleaseDc suffisent ^ ^
|
|
Cette discussion est classée dans : long, api, signature, setpixel, bitblt
Répondre à ce message
Sujets en rapport avec ce message
[.NET 2] APi : Recupérer titre de la fenetre active [ par fdiedler2000 ]
Bonjour,Je voudrais récupérer le titre de la fentre windows active mais j'ai une erreur : Private Declare Function GetForegroundWindow Lib "user32" (
Menu Dynamique - Utilisation API setwindowlong [ par cricri95 ]
Bonjour, Voila j'ai créé des menus dynamiquement à partir d'une base de données (en Visual Basic 6).Je gère les clicks sur les menus deroulants avec s
Manette de jeu et visual basic 2005 [ par sidne_II ]
Bonsoir Je n'arrive pas à utiliser l'API pour lire le joystick avec la foncion joyGetPos (0, manette_info) Public Structure JOYINFO Public
Setparent dans VB .NET 2005 [ par math083 ]
Salut tout le monde !J'ai un petit problèmeAvant sous vb 6 je pouvais utiliser la fonction setparent en utilisant l'api : Declare Function SetParent L
Fonction BitBlt .. [ par Kite37 ]
Bonjour !En regardant de nombreux code de jeux (référence a ceux de EBArtSoft par exemple :p) j'ai trouvé une fonction graphique qui m'interresse beau
Déplacement souris [ par bimbo777 ]
Bonjour à tous,Je suis débutant et je souhaiterai pouvoir automatiser le déplacement de ma souris (je verrai les clicks plus tard...)J'ai un soucis av
Utilisation de SendMessage-constante API [ par Trappiste ]
Bonjour.Pour mon application, j'aimerai changer la couleur de fond d'un HScroll lorsque l'utilisateur sélectionne une certaine plage.Comme la propriét
[VB.NET] Coord souris/API/PictureBox/ [ par jajapremier ]
bonjourje voudrais recuperer les coordonées du curseur dans une picture box. pour cela j'utilise l'API GetCursorPosmais pas bien apperement, je vous l
Fonction BitBlt ??? [ par liban123 ]
Salut a tous!La fonction" bitblt (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC A
Livres en rapport
|
Derniers Blogs
ASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHEASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHE par fathi
Tout le monde est unanime pour dire que la programmation multi-thread et asynchrone est en train de devenir un sujet incontournable. Beaucoup de choses sont arrivées avec le framework 4 pour le code parallèle (TPL, PLinq,.) et bientôt, on va avoir l...
Cliquez pour lire la suite de l'article par fathi PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS !PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS ! par Etienne Margraff
J'ai récemment eu un problème pour obtenir l'intelliTrace sur un site web dans IIS. Il n'y avait pas de message d'erreur, rien dans le journal d'évènement Windows, et après 3 appels à une voyante, 2 visites chez un marabou, j'ai failli me résign...
Cliquez pour lire la suite de l'article par Etienne Margraff OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en œuvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|