IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Clipboard Windows


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Par défaut Clipboard Windows
    Bonsoir à tous,

    Je viens poster ce message car mon problème me surpasse ... Je suis actuellement entrain de développer une petite appli pour accroitre les possibilités que nous offre le clipboard Windows. En gros, je veux garder un historique du clipboard et offrir la possibilité à l'utilisateur de re-selectionner dans cette historique un ancien "copié" qu'il a fais.

    Pour cela je fais un petit test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    void setdata(char * tmp)
    {
    	char *MonTest = (char *)malloc(strlen(tmp) + 1) ;
    	strcpy(MonTest, tmp) ;
    	OpenClipboard(NULL);
    	EmptyClipboard();
    	SetClipboardData(CF_TEXT, MonTest);
     
    	CloseClipboard() ;
    }
    int main(void)
    {
     char *montest = (char *)malloc(1024) ;
     strcpy(montest, "HUHU") ;
     setdata(montest) ;
    }
    Tout marche bien le contenus de mon clipboard devient bien "HUHU".

    Là où ça devient 'bizarre' c'est quand j'intègre ce morceau de code dans mon projet windows :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    int WINAPI WinMain(HINSTANCE FirstInstance, HINSTANCE PrevInstance, LPSTR CmdLine, int CmdShow)
    {
    	MSG msg;
    	WNDCLASSEX wc;
    //	DWORD ThreadId ;
    	char * test = (char *)malloc(1024) ;
    	strcpy(test, "teeeeeeeeest") ;
     
    	InputClipboardData(test) ;
    	exit(0) ;
    }
     
    void InputClipboardData(char * Data)
    {
    	int ClipboardDataLen = strlen(Data) + 1 ;
    	char * ClipboardData = (char *)malloc(ClipboardDataLen) ;
     
    	char *test = (char *)malloc(1024) ;
    	sprintf(test, "Len : %d=>%s=>%s", ClipboardDataLen, Data, ClipboardData) ;
    	MessageBox(NULL, test, "Erreur", MB_OK) ;
     
    	strncpy(ClipboardData, Data, ClipboardDataLen) ;
     
    	OpenClipboard(NULL) ;
     
    	EmptyClipboard() ;
    	SetClipboardData(CF_TEXT, ClipboardData) ;
     
    	CloseClipboard() ;
    }
    Le premier point que je ne comprend pas c'est que dans la MessageBox, Data affiche bien le contenus que je passe en argument (c'est à dire "teeeeeeeeest"), mais ClipboardData affiche des Y et des I avec des accents alors que je viens de copier dedans le contenus de Data ...

    Le second point que je comprend pas c'est que le contenus du clipboard ne correspont pas au Y et I avec accent que j'ai obtenus plus haut, mais son contenus est écrasé ... Le clipboard est vide alors que la même fonction dans mon premier projet plus haut marche correctement.

    Toutes informations susceptibles de m'aider sera la bien venus.

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    voir la faq:
    http://c.developpez.com/faq/vc/?page...etClipBoadData
    on ne travaille pas avec malloc mais avec GlobalAlloc /GlobalLock/GlobalUnlock.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Par défaut
    Merci pour ton aide, j'ai quand même une ou deux questions si quelqu'un peux m'éclaircir les idées ... Je suis nouveau sur l'API windows

    Selon MSDN : GlobalAlloc function allocates the specified number of bytes from the heap. C'est ce que fais malloc également non ? Je ne saisie pas la différence.

    GlobalUnlock libère la mémoire comme le fait free() ?

    Pour en finir, j'ai l'impression que SetClipboardData me supprime mon dernier caractère car lorsque par exemple je lance ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	for(i=0; i<=3; i++) {
    	   sprintf(test, "ici %s=>%d", pnem, DataLen) ;
    	   MessageBox(NULL, test, "InputClipboardData", 1) ;
    	   SetClipboardData(CF_TEXT, pnem) ;
    	}
    J'obtiens successivement : "test", "tes", "te", "t" ... Sachant que pnem vaut "test" à la base, est ce un comportement normal ?

    Merci de votre aide

Discussions similaires

  1. Problème avec Clipboard.getData sous Windows 7
    Par TZRman dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 17/02/2012, 21h04
  2. copier une image dans le clipboard windows
    Par yvco7311 dans le forum Windows XP
    Réponses: 1
    Dernier message: 14/05/2009, 14h44
  3. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  4. Réponses: 4
    Dernier message: 18/05/2006, 11h07
  5. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo