Article View: pl.comp.lang.c
Article #268122WM_COPYDATA i bcb
From: artmode
Date: Sat, 03 Nov 2007 11:48
Date: Sat, 03 Nov 2007 11:48
98 lines
3587 bytes
3587 bytes
jak przekazać struktórę przez ten komunikat
zwykły string mi chula ale gdy chcę przesłać
strukturę to odczytuję wartości tylko pierwszych
czterech bajtów.
Przykład kodu:
typedef struct tagDANE
{
char s1[12];
char s2[12];
int Tag;
int len;
DWORD n;
} DANE;
// wysyłanie
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonWMCOPYDATAstringClick(TObject *Sender)
{
WM_DANE_COPY = Edit2->Text;
ZeroMemory(&dane, sizeof(DANE));
COPYDATASTRUCT *CD;
CD.dwData = 2; // id danych kopiowanych (np którą
strukturę przesyłamy)
CD.cbData = WM_DANE_COPY.Length(); // rozmiar danych do przesyłu
CD.lpData = (LPVOID &)WM_DANE_COPY; // wskażnik na moją strukturę
SendMessage((HWND) Handle, // handle to destination control
(UINT) WM_COPYDATA, // message ID
(WPARAM) Handle, // Handle to the window passing the
data
(LPARAM) &CD); // Pointer to a COPYDATASTRUCT
structure that contains the data to be passed
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonWM_COPYDATEstructClick(TObject *Sender)
{
ZeroMemory(&dane, sizeof(DANE));
strcpy(dane.s1, "12345678");
strcpy(dane.s2, "dana");
dane.Tag = 2486;
dane.len = sizeof(DANE);
dane.n = 12;
COPYDATASTRUCT *CD;
CD.dwData = 1;
CD.cbData = sizeof(DANE);
CD.lpData = (LPVOID &) dane;
SendMessage(Handle, WM_COPYDATA, (WPARAM) Handle, (LPARAM) &CD);
}
//---------------------------------------------------------------------------
// ODBIÓR
case WM_COPYDATA: // Msg == 74
{
COPYDATASTRUCT *cd = (PCOPYDATASTRUCT )Msg.LParam;
switch(cd->dwData)
{
case 2:
{
char *pszData;
pszData = (char *)malloc(cd->cbData); //
strcpy(pszData, (LPSTR)cd->lpData);
String str = pszData;
free(pszData);
Caption = str;
Memo1->Lines->Add(str);
break;
}
case 1:
{
DANE d;
ZeroMemory(&d, sizeof(DANE));
DANE *ptr;
ptr = (DANE *)&cd->lpData;
d = *ptr;
d.len = cd->cbData;
(DWORD) ((DANE *)(cd->lpData))->n;
Memo1->Lines->Add(d.s1);
Memo1->Lines->Add(d.s2);
Memo1->Lines->Add(IntToStr(d.Tag));
Memo1->Lines->Add(IntToStr(d.n));
Memo1->Lines->Add("Length: " + IntToStr(d.len));
break;
}
}
Msg.Result = 1;
break;
}
Technical Details
Message-ID:
<fghn09$4kv$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: "artmode" <artmode@gazeta.pl> Newsgroups: pl.comp.lang.c Subject: WM_COPYDATA i bcb Date: Sat, 3 Nov 2007 12:48:05 +0100 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 100 Message-ID: <fghn09$4kv$1@inews.gazeta.pl> NNTP-Posting-Host: static-ip-193-151-96-187.promax.media.pl X-Trace: inews.gazeta.pl 1194090314 4767 193.151.96.187 (3 Nov 2007 11:45:14 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Sat, 3 Nov 2007 11:45:14 +0000 (UTC) X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 X-Priority: 3 X-RFC2646: Format=Flowed; Original X-Newsreader: Microsoft Outlook Express 6.00.2900.3138 X-User: artmode X-MSMail-Priority: Normal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit