🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #268122

WM_COPYDATA i bcb

#268122
From: artmode
Date: Sat, 03 Nov 2007 11:48
98 lines
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-mail

Show 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