home *** CD-ROM | disk | FTP | other *** search
/ Chip Hitware 9 / Chip_Hitware_Vol_09.iso / chiphit9 / tools / 95katced / _setup.1 / CLIENT.C < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-17  |  5.9 KB  |  164 lines

  1. #include <windows.h>
  2. #include <ddeml.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <time.h>
  6.  
  7. #define WM_USER_INITIATE    (WM_USER+1)
  8.  
  9. char    szAppName[] = "KatCeDe2" ;
  10. char    szBuffer[64];
  11. DWORD   idInst ;
  12. HCONV   hConv ;
  13. HWND    hwnd ;
  14.  
  15. //Unterprogramm um n Milisekunden zu warten.
  16. void my_delay(int wert){
  17. clock_t     start, stop;
  18.  
  19.     wert=wert*(int)CLK_TCK;
  20.     start=clock();
  21.     stop=clock();
  22.     while ((long)(stop-start)<wert){
  23.         stop=clock();
  24.     }
  25. }
  26.  
  27. //warten bis Messageloop leer ist
  28. void    WarteNoMessage(void){
  29. MSG             msg;
  30.  
  31.         while (PeekMessage((LPMSG)&msg, NULL, 0, 0, PM_REMOVE)){                        //warten bis Kommando komplett bearbeitet wurde
  32.                 TranslateMessage ((LPMSG)&msg) ;
  33.                 DispatchMessage ((LPMSG)&msg) ;
  34.         }
  35. }
  36.  
  37. HDDEDATA CALLBACK DdeCallback (UINT iType, UINT iFmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA hData, DWORD dwData1, DWORD dwData2){
  38.  
  39.     switch (iType){
  40.         case XTYP_DISCONNECT :
  41.             hConv = NULL ;
  42.             MessageBox (hwnd, "Der Server hat Verbindung getrennt.", szAppName, MB_ICONASTERISK | MB_OK) ;
  43.             return NULL ;
  44.     }
  45.     return NULL ;
  46. }
  47.  
  48. LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam){
  49. static char     szService[] = "KatCeDe2";
  50. HDC             hdc ;
  51. HSZ             hszService, hszTopic, hszItem ;
  52. PAINTSTRUCT     ps ;
  53. HDDEDATA        hData;
  54. int             i, gesamt_cds;
  55.  
  56.     switch (iMsg){
  57.         case WM_USER_INITIATE :
  58.             gesamt_cds=-1;
  59.             hszService = DdeCreateStringHandle (idInst, szService, 0) ;
  60.             hszTopic   = DdeCreateStringHandle (idInst, "AnzahlCDs",   0) ;
  61.             hConv = DdeConnect (idInst, hszService, hszTopic, NULL) ;
  62.             if (hConv == NULL){
  63.                 WinExec (szService, SW_SHOWMINNOACTIVE) ;
  64.                 hConv = DdeConnect (idInst, hszService, hszTopic, NULL) ;
  65.             }
  66.             DdeFreeStringHandle (idInst, hszTopic) ;
  67.             if (hConv == NULL) {
  68.                 MessageBox (hwnd, "Keine Verbindung zu KatCeDe2!", szAppName, MB_ICONEXCLAMATION | MB_OK) ;
  69.                 DdeFreeStringHandle (idInst, hszService) ;
  70.                 return 0 ;
  71.             }
  72.             hszItem = DdeCreateStringHandle (idInst, "-1", 0) ;
  73.             hData=DdeClientTransaction (NULL, 0, hConv, hszItem, CF_TEXT, XTYP_REQUEST, 1000, NULL) ;
  74.             if (hData){
  75.                 DdeGetData(hData, (BYTE *)szBuffer, sizeof(szBuffer), 0);
  76.                 sscanf(szBuffer,"%d",&gesamt_cds);
  77.             }
  78.             DdeFreeStringHandle (idInst, hszItem) ;
  79.             DdeDisconnect (hConv) ;
  80.             if (gesamt_cds!=-1){
  81.                 hszTopic   = DdeCreateStringHandle (idInst, "CDName",   0) ;
  82.                 hConv = DdeConnect (idInst, hszService, hszTopic, NULL) ;
  83.                 if (hConv == NULL){
  84.                     WinExec (szService, SW_SHOWMINNOACTIVE) ;
  85.                     hConv = DdeConnect (idInst, hszService, hszTopic, NULL) ;
  86.                 }
  87.                 DdeFreeStringHandle (idInst, hszService) ;
  88.                 DdeFreeStringHandle (idInst, hszTopic) ;
  89.                 if (hConv == NULL) {
  90.                     MessageBox (hwnd, "Keine Verbindung zu KatCeDe2!", szAppName, MB_ICONEXCLAMATION | MB_OK) ;
  91.                     return 0 ;
  92.                 }
  93.                 for (i=0;i<gesamt_cds;i++){
  94.                     sprintf(szBuffer,"%d",i);
  95.                     hszItem = DdeCreateStringHandle (idInst, szBuffer, 0) ;
  96.                     hData=DdeClientTransaction (NULL, 0, hConv, hszItem, CF_TEXT, XTYP_REQUEST, 1000, NULL) ;
  97.                     if (hData){
  98.                         DdeGetData(hData, (BYTE *)szBuffer, sizeof(szBuffer), 0);
  99.                     }
  100.                     DdeFreeStringHandle (idInst, hszItem) ;
  101.                     InvalidateRect(hwnd, NULL, TRUE);
  102.                     WarteNoMessage();
  103.                     my_delay(1);
  104.                 }
  105.                 DdeDisconnect (hConv) ;
  106.             }
  107.             return 0 ;
  108.  
  109.         case WM_PAINT :
  110.             hdc = BeginPaint (hwnd, &ps) ;
  111.             TextOut (hdc, 10, 10, szBuffer, strlen(szBuffer)) ;
  112.             EndPaint (hwnd, &ps) ;
  113.             return 0 ;
  114.  
  115.         case WM_CLOSE :
  116.             if (hConv == NULL) break ;
  117.             break ;
  118.  
  119.         case WM_DESTROY :
  120.             PostQuitMessage (0) ;
  121.             return 0 ;
  122.     }
  123.     return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
  124. }
  125.  
  126. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){
  127. MSG         msg ;
  128. WNDCLASSEX  wndclass ;
  129.  
  130.     wndclass.cbSize        = sizeof (wndclass) ;
  131.     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
  132.     wndclass.lpfnWndProc   = WndProc ;
  133.     wndclass.cbClsExtra    = 0 ;
  134.     wndclass.cbWndExtra    = 0 ;
  135.     wndclass.hInstance     = hInstance ;
  136.     wndclass.hIcon         = LoadIcon (hInstance, szAppName) ;
  137.     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  138.     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
  139.     wndclass.lpszMenuName  = NULL ;
  140.     wndclass.lpszClassName = szAppName ;
  141.     wndclass.hIconSm       = LoadIcon (hInstance, szAppName) ;
  142.  
  143.     RegisterClassEx (&wndclass) ;
  144.  
  145.     hwnd = CreateWindow (szAppName, "DDEML Client - Kat-CeDe", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 200, 100, NULL, NULL, hInstance, NULL) ;
  146.     ShowWindow (hwnd, iCmdShow) ;
  147.     UpdateWindow (hwnd) ;
  148.     if (DdeInitialize (&idInst, (PFNCALLBACK) DdeCallback, APPCLASS_STANDARD | APPCMD_CLIENTONLY, 0L)){
  149.         MessageBox (hwnd, "DDE kann nicht initialisiert werden!", szAppName, MB_ICONEXCLAMATION | MB_OK) ;
  150.         DestroyWindow (hwnd) ;
  151.         return FALSE ;
  152.     }
  153.  
  154.     SendMessage (hwnd, WM_USER_INITIATE, 0, 0L) ;
  155.     while (GetMessage (&msg, NULL, 0, 0)){
  156.         TranslateMessage (&msg) ;
  157.         DispatchMessage (&msg) ;
  158.     }
  159.     DdeUninitialize (idInst) ;
  160.     return msg.wParam ;
  161. }
  162.  
  163.  
  164.