Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » FAQ C / C++ (WinAPI, Konsole) » Daten in Zwischen-ablage?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.03.2003, 00:06 Uhr
Alf



Hy!

Ich bin etwas in die Grafik Programmierung Eingestiegen. Da man immer wieder Werte für Rot, Gelb, Blau angeben muss habe ich mir überlegt ein Tool zu schreiben.
Es zeigt mir alle möglichen Farben ich klick auf eine Farbe, die Werte (r,g,b) werden in der Zwischen-Ablage gespeichert und in meinem aktuellen Projekt klicke ich nur noch im Kontext-Menu auf „Einfügen“.

Nun meine frage:

Wie bekomme ich einen string z.b. „255, 255, 255“ in die Zwischen-Ablage(unter Windows)?

Danke !!!
--
Mfg

Andy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.03.2003, 06:43 Uhr
virtual
Sexiest Bit alive
(Operator)


Wenn Du eine Farge hast, die sich auf Windows bezieht, dann stell sie doch in einem Windowsforum! - Hier gehts um ANSI C/C++
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.03.2003, 12:06 Uhr
Christian
C/C++ Master
(Operator)


Hi!

Dazu musst du die Clipboardbefehle nutzen. Ich hab' die Zwischenablage bisher immer nur mit der MFC benutzt, daher kann ich dir nicht genau sagen, wie das auf API Basis funktioniert. Auf jedenfall musst du zuerst
OpenClibboard(..) aufrufen und anschließend mit SetClipboardData(..) die Daten in die Zwischenablage packen. Am besten MSDN!

Grüße, Christian
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.03.2003, 00:03 Uhr
Alf



Jo Danke!!!

so geht´s:


C++:
    char *pszData;
    HGLOBAL hData;
    LPVOID pData;

    pszData = (char*)malloc(11);
    strcpy(pszData, "255,255,255");
    
    OpenClipboard(NULL);

    EmptyClipboard();

    hData = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE,
                               strlen(pszData) + 1);

    pData = GlobalLock(hData);

    strcpy((LPSTR)pData, pszData);

    GlobalUnlock(hData);

    SetClipboardData(CF_TEXT, hData);

    CloseClipboard();

--
Mfg

Andy

Dieser Post wurde am 21.03.2003 um 00:05 Uhr von Alf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.03.2003, 11:26 Uhr
~christian
Gast


Wäre ja klasse, wenn du dazu einen Beitrag ordentlich FAQ - reif schreiben würdest...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.03.2003, 00:44 Uhr
Alf



Speichern:


C++:
#include <windows.h>;                  // Header Datei einbinden

char *pszData;                            // Zeiger für den String

HGLOBAL hData;                          // Handle für einen Globalen Speicherblock

LPVOID pData;                            // Zeiger für den Globalen Speicherblock

pszData  =  (char*)malloc(6);
strcpy(pszData, "Hallo!");             //unseren String erzeugen

OpenClipboard(NULL);                  /*          
die Zwischenablage öffnen. Hier kann ein Handle einer offnen Zwischenablage eines anderen Fensters übergeben werden. Übergeben wir NULL so wird eine Zwischenablage für den aktuellen Task geöffnet.
*/


EmptyClipboard();                       //die Zwischenablage leeren.

hData = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE,
        strlen(pszData) + 1);          /*
Den Globalen Speicherblock allokieren. Die Flags kann man der MSDN entnehmen. Als Para. 2 erwartet die Funktion die Größe des benötigten Speicher.
*/


pData  =  GlobalLock(hData);       /*
Den Zeiger auf den Globalen Speicherblock setzen und den Speicherblock für andere Progs sperren. Als Para. übergeben wir unseren Handle.
*/


strcpy((LPSTR)pData, pszData);  /*
unseren String in den Speicherblock kopieren.
*/


GlobalUnlock(hData);                 //Den Speicherblock wieder freigeben.

SetClipboardData(CF_TEXT, hData);            /*
Den Speicherblock in die Zwischenablage schieben. Flags aus der MSDN entnehmen.
*/


CloseClipboard();                        //die Zwischenablage wieder schließen.



Natürlich muss pszData wieder freigegeben werden!

Lesen:


C++:
char *pszData;                         // Zeiger für den String
HANDLE hData;                         // Handle für einen Globalen Speicherblock
LPVOID pData;                          // Zeiger für den Globalen Speicherblock

if (!IsClipboardFormatAvailable(CF_TEXT)) return;                   /*
Ist kein String in der Zwischenablage returnen.
*/


OpenClipboard(NULL);                       //siehe oben

hData = GetClipboardData(CF_TEXT);  // Handle des Globalen Speicherblock hollen

pData = GlobalLock(hData);               //siehe oben

pszData = malloc(strlen(pData) + 1);  //Speicher allokieren

strcpy(pszData, (LPSTR)pData);        /*
Den Speicherblock in unseren String kopieren
*/


GlobalUnlock(hData);                       //siehe oben

CloseClipboard();                            //siehe oben



Natürlich muss pszData wieder freigegeben werden!

Besser?

Ich hoffe das das alles so richtig ist!
Fehlt allerdings noch eine Fehler (Rückgabe) Auswertung!
--
Mfg

Andy

Dieser Post wurde am 22.03.2003 um 00:57 Uhr von Alf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ FAQ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: