begin process at 2012 05 29 07:15:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

GUI

 > 

GlobalLock


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

GlobalLock

samedi 26 août 2006 à 02:18:32 | GlobalLock

Ziman

Bonjour,

je viens d'un peu chercher après des sources pour gérer le presse-papier et j'en ai trouvé une de BruNews. Bien faite, comme d'hab et je comprend quasi tout sauf deux API. L'un était l'inverse de l'autre :

GlobalLock et GlobalUnlock :

char *Texte;

hMemory = GlobalAlloc(GHND, 5);
Texte = (char*) GlobalLock(hMemory);
GlobalUnlock(hMemory);
lstrcpy(Texte, "brun");
OpenClipboard(hwnd);
EmptyClipboard();
SetClipboardData(CF_TEXT, Texte);
CloseClipboard();

Voilà, donc ca place bien 'brun' dans le presse-papier mais à quoi sert GlobalLock ?

Apprendre le VB6
samedi 26 août 2006 à 04:26:13 | Re : GlobalLock

racpp

Administrateur CodeS-SourceS
Réponse acceptée !
Salut,
Dans cet exemple, le premier paramètre de GlobalAlloc() est GHND. C'est un attribut qui combine deux autres : GMEM_MOVEABLE et GMEM_ZEROINIT. Le premier attribut indique que la zone mémoire allouée peut être déplacée. Le deuxième sert à mettre à zéro tous les octets de cette zone. Quand la zone est déplaçable, la fonction retourne un handle HGLOBAL sur l'objet mémoire. Ce handle doit être transformé en pointeur sur la zone allouée. C'est le rôle de la fonction GlobalLock(). Elle sert aussi à empêcher la zone d'être déplacée pendant son utilisation. GlobalUnlock() fait l'opération inverse en autorisant à nouveau le déplacement.
Il est à noter qu'on n'a pas besoin d'utiliser GlobalLock() ni GlobalUnlock() si on appelle GlobalAlloc() avec l'attribut GMEM_FIXED ou GPTR. Dans ce cas la zone mémoire est fixe et la fonction retourne directement un pointeur sur le premier octet de cette zone.

samedi 26 août 2006 à 13:09:51 | Re : GlobalLock

Ziman

Et si on utilise GPTR comment le type du pointeur est-il déterminé ?

Apprendre le VB6
samedi 26 août 2006 à 13:21:13 | Re : GlobalLock

vecchio56

Administrateur CodeS-SourceS
Avec GPTR, un pointeur est retourné. A toi de caster ensuite pour l'utiliser comme tu veux. Par exemple:
char* p = (char*)GlobalAlloc(GPTR, 5);

_____________________________________
Un éditeur de ressources gratuit pour Windows

samedi 26 août 2006 à 13:24:20 | Re : GlobalLock

Ziman

Mais donc dans l'exemple avec le presse papier, BruNews aurait pu utiliser GlobalAlloc avec GPTR ? Ca serait revenu au meme ?

Apprendre le VB6
samedi 26 août 2006 à 13:30:56 | Re : GlobalLock

vecchio56

Administrateur CodeS-SourceS
Non car dans la fonction SetClipboardData, il est spécifié que la mémoire doit être alloué en moveable:

"If the hMem parameter identifies a memory object, the object must have been allocated using the function with the GMEM_MOVEABLE flag"
Sinon ca aurait été possible en effet

_____________________________________
Un éditeur de ressources gratuit pour Windows

samedi 26 août 2006 à 14:15:38 | Re : GlobalLock

Ziman

Ah donc si j'ai bien compris, dans l'exemple, on crée un segment de mémoire moveable, puis on le bloque pour donner une adresse au pointeur char et ensuite on le débloque pour pouvoir le passer à la fonction SetClipboardData ?

Je sais que je repete +/- la meme chose que vous mais c'est pour voir si j'ai bien compris :p

Apprendre le VB6
samedi 26 août 2006 à 14:23:54 | Re : GlobalLock

vecchio56

Administrateur CodeS-SourceS
Oui c'est ca. D'ailleurs à mon avis dans ton exemple, il faudrait faire le GlobalUnlock après le lstrcpy

_____________________________________
Un éditeur de ressources gratuit pour Windows

samedi 26 août 2006 à 14:47:31 | Re : GlobalLock

Ziman

Oui, c'est vrai que ca serait plus logique.

Merci de toute vos réponses

Apprendre le VB6


Cette discussion est classée dans : texte, presse, papier, globallock, hmemory


Répondre à ce message

Sujets en rapport avec ce message

copier du texte dans le presse papier [ par arconius ] Je voudrais copier du texte ou une variable dans le presse papier afin de pouvoir les réutiliser dans une autre application. Je connais l'instruction copier du texte dans le presse papier [ par arconius ] Je voudrais copier du texte ou une variable dans le presse papier afin de pouvoir les réutiliser dans une autre application. Je connais l'instruction Comment ecrire ds le presse papier [ par obasileus ] Salut, est ce qqun sait comment copier le contenue d'un tableu par exemple ds le presse papier sous windows.Merci Effacer le presse papier [ par C++ ] salut, comment faut effacer le presse papier? copier une image dans le presse papier [ par cyb_dev ] BonjourJe souhaiterais savoir comment faire pour copier le contenu d'un composant image dans le presse papier, puis comment faire pour copier cette im lire le presse papier ? [ par supergrey ] Bonjour, je voudrais savoir si quelqu'un aurai une source ou un bout de code permettant de lire le text contenu dans le presse papier.Merci Presse Papier--Image [ par Belt ] Salut à tous j'aimerais récupérer une image du presse papier genre: " getclipboarddata(CF_BITMAP)" et la sauvegarder ou la mettre dans une ImageBox ! copier du texte dans le presse papier [ par arconius ] Salut à tous :),J'ai besoin d'un peu d'aide car je galère avec le presse papier.Ce que je veux faire est très simple, j'ai une variable char qui conti Utiliser le bloc note [ par tibob51 ] Bonjour a tous,J'ai un programme qui sauvegarde des resultats de calculs dans le presse papier,mais plutot que de devoir obliger l'utilisateur le fair Récupérer une image du presse-papier (clipboard) [ par Siteauludo ] Bonjour,En fait je programme en général sous C# mais j'ai besoin d'un truc plus puissante pour une minuscule application.Y me faudrait faire un progra


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 : 1,076 sec (3)

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