home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / wint1_92 / shaw / ddeclnt.cpp < prev    next >
C/C++ Source or Header  |  1991-11-04  |  5KB  |  172 lines

  1. // ddeclnt.cpp RHS 10/15/91
  2.  
  3. #include"stdwin.h"
  4. #include"dialog.h"
  5. #include"msgbox.h"
  6. #pragma hdrstop
  7.  
  8. #include"ddeclnt.h"
  9. #include"dde.h"
  10.  
  11. WinDialog MainDlg;
  12. void StartRequest(HWND hDlg);
  13.  
  14. class MyApp : public WinAppStdWindow
  15.     {
  16. public:
  17.     static long far pascal WndProc(HWND, unsigned, WORD, LONG);
  18.  
  19.     MyApp(char *name) : WinAppStdWindow(name)
  20.         {
  21.         SetClassWinProc(MyApp::WndProc);
  22.         SetWinStyle(0L);
  23.         SetWinHeight(0);
  24.         SetWinWidth(0);
  25.         SetClassIcon("DDECLNT");
  26.         }
  27.     };
  28.  
  29. BOOL FAR PASCAL DialogProc(HWND hDlg, WORD message, WORD wParam, 
  30.     LONG lParam)
  31.     {
  32.     switch(message)
  33.         {
  34.         case WM_INITDIALOG:
  35.             SetDlgItemText(hDlg,RESULT_TOPIC,"");
  36.             SetDlgItemText(hDlg,RESULT_SERVER,"");
  37.             SetDlgItemText(hDlg,RESULT_ITEM,"");
  38.             SetDlgItemText(hDlg,REQUEST_SERVER,"");
  39.             SetDlgItemText(hDlg,REQUEST_TOPIC,"");
  40.             SetDlgItemText(hDlg,REQUEST_ITEM,"");
  41.             SetFocus(GetDlgItem(hDlg, REQUEST_SERVER));
  42.             MsgBox::myhWnd = hDlg;
  43.             MainDlg.WHandle = hDlg;
  44.             MainDlg.SetDlgIcon(
  45.                 GetClassWord(MainDlg.GetParent(),GCW_HICON));
  46.             break;
  47.  
  48.         case WM_COMMAND:
  49.             switch(wParam)
  50.                 {
  51.                 case BUTTON_REQUEST:
  52.                     StartRequest(hDlg);
  53.                     break;
  54.                 case BUTTON_ADVISE:
  55.                     MsgBox("Advise not yet implemented!");
  56.                     break;
  57.                 case BUTTON_UNADVISE:
  58.                     MsgBox("UnAdvise not yet implemented!");
  59.                     break;
  60.                 case BUTTON_TERMINATE:
  61.                     MsgBox("Terminate not yet implemented!");
  62.                     break;
  63.                 default:
  64.                     return FALSE;
  65.                 }
  66.             break;
  67.         case WM_SYSCOMMAND:
  68.             switch(wParam)
  69.                 {
  70.                 case SC_CLOSE:
  71.                     EndDialog(hDlg, TRUE);
  72.                     break;
  73.                 default:
  74.                     return FALSE;
  75.                 }
  76.             break;
  77.         default:
  78.             return FALSE;
  79.         }
  80.     return TRUE;
  81.     }
  82.  
  83. HDDEDATA EXPENTRY DDEClientCallBack(
  84.     WORD    trans,
  85.     WORD    clipformat,
  86.     HCONV   hConv,
  87.     HSZ     hstr1,
  88.     HSZ     hstr2,
  89.     HDDEDATA    data,
  90.     DWORD   transdata1,
  91.     DWORD   transdata2)
  92.     {
  93.     switch(trans)
  94.         {
  95.         
  96.         default:
  97.             return (HDDEDATA)NULL;
  98.         }
  99.     }
  100.  
  101. void StartRequest(HWND hDlg)
  102.     {
  103.     int i;
  104.     char buf0[80],buf1[80],buf2[80];
  105.  
  106.     struct _buffers
  107.         {
  108.         char    *buffer;
  109.         int     field;
  110.         } Bufs[3] = 
  111.         {
  112.         { buf0, REQUEST_SERVER },
  113.         { buf1, REQUEST_TOPIC  },
  114.         { buf2, REQUEST_ITEM   }
  115.         };
  116.     int results[3] = { RESULT_SERVER, RESULT_TOPIC, RESULT_ITEM };
  117.  
  118.     for(i = 0; i < 3; i++)
  119.         if(GetDlgItemText(hDlg,Bufs[i].field,Bufs[i].buffer,80) == 0)
  120.             {
  121.             MsgBox("You must specify server, topic AND item!",hDlg);
  122.             return;
  123.             }
  124.     DDEClient newClient(Bufs[0].buffer, Bufs[1].buffer, 
  125.         (FARPROC)DDEClientCallBack);
  126.     newClient.Request(Bufs[2].buffer);
  127.  
  128.     if(newClient.GetResult())
  129.         {
  130.         for(i = 0; i < 3; i++)
  131.             SetDlgItemText(hDlg,results[i],Bufs[i].buffer);
  132.         SetDlgItemText(hDlg,RESULT_DATA,(LPSTR)newClient.GetData());
  133.         }
  134.     else
  135.         MsgBox("No Data To Retrieve!");
  136.     }
  137.  
  138. #define WM_USER1    (WM_USER+1)
  139.  
  140. long FAR PASCAL _export MyApp::WndProc(HWND hWnd, unsigned message, 
  141.     WORD wParam, LONG lParam)
  142.     {
  143.     MyApp *pMyApp = (MyApp *)GetPointer(hWnd);
  144.  
  145.     switch(message)
  146.         {
  147.         case WM_CREATE:
  148.             MainDlg.Init("DDECLNT",(FARPROC)DialogProc,hWnd);
  149. //            PostMessage(hWnd,WM_USER1,0,0L);
  150. //            break;
  151. //        case WM_USER1:
  152.             MainDlg.Run();
  153.             DestroyWindow(hWnd);
  154.             break;
  155.         case WM_SIZE:
  156.         default:
  157.             return DefWindowProc(hWnd, message, wParam, lParam);
  158.         }
  159.     return 0L;
  160.     }
  161.  
  162. int PASCAL WinMain(HANDLE, HANDLE, LPSTR, int)
  163.     {
  164.     MyApp DDEApp("DDEClient");
  165.  
  166.     DDEApp.Hide();               // create hidden window
  167.  
  168.     return DDEApp.Run();         // process any messages
  169.     }
  170.  
  171.  
  172.