WS_PAINT.C
上传用户:dansui
上传日期:2007-01-04
资源大小:71k
文件大小:5k
源码类别:

Ftp客户端

开发平台:

WINDOWS

  1. /*
  2.   MODULE: WS_PAINT.C  (main window (debug) display routines)
  3. */
  4. #include "ws_glob.h"
  5. #include "winftp.h"
  6. #include <stdarg.h>
  7. int nLineHeight=5;
  8. int nScreenRows=10;
  9. #define  MAX_SIZE   100
  10. #define  MAX_MSG    100
  11. LPSTR lpDebugMsg=NULL;
  12. LPSTR lpMem[MAX_MSG+1];
  13. #define LPDBG(x) (lpDebugMsg+(x*MAX_SIZE))
  14. extern HWND hWndDbg;
  15. //*************************************************************************
  16. //*************************************************************************
  17. int GetLocalInfo()
  18. {
  19.   int nRc;
  20.   struct hostent FAR *hostptr;
  21.   struct in_addr FAR *iptr;
  22.   DoPrintf("Using %s",(LPSTR)WSAData.szDescription);
  23.   if (lstrlen (WSAData.szSystemStatus)>0)
  24.       DoPrintf("System Status: %s", (LPSTR)WSAData.szSystemStatus);
  25.   if ((nRc=gethostname ((LPSTR) szString, MAXHOSTNAMELEN))==SOCKET_ERROR)
  26.     ReportWSError("GetHostName",WSAGetLastError());
  27.   else
  28.     DoPrintf("Local Host: %s",szString);
  29.   if(!nRc)
  30.   {
  31.     if((hostptr=gethostbyname(szString))==NULL) 
  32.     {
  33.       ReportWSError("gethostbyname",WSAGetLastError());
  34.     } 
  35.     else 
  36.     {
  37.       while ( (iptr = (struct in_addr *) *(hostptr->h_addr_list)) != NULL) 
  38.       {
  39.         DoPrintf("Local Address: %s", inet_ntoa (*iptr));
  40.         hostptr->h_addr_list++;
  41.       }
  42.     }
  43.   }
  44.   DoAddLine("WinFTP written by Santanu Lahiri");
  45.   return(TRUE);
  46. }
  47. //*************************************************************************
  48. //*************************************************************************
  49. void ReleaseDisplayMem()
  50. {
  51. //  int nIndex;
  52. //  for (nIndex=0; nIndex<ptrhGMem; nIndex++)  GlobalFree (hGMem[nIndex]);
  53.   
  54.   if (lpDebugMsg!=NULL) GlobalFreePtr (lpDebugMsg);
  55.   ptrhGMem=0;
  56. }
  57. //*************************************************************************
  58. //*************************************************************************
  59. void AddLineToLog (LPSTR lpStr)
  60. {
  61.   FILE *fp;
  62.   
  63.   if ((fp=fopen (szLogFile, "at"))!=NULL)
  64.   {
  65.     fprintf (fp, "%sn", lpStr);
  66.     fclose (fp);
  67.   }
  68. }
  69. //*************************************************************************
  70. //*************************************************************************
  71. void DoAddLine (LPSTR szString)
  72. {
  73.   int nLen;
  74.   RECT rect;
  75.   if (lstrlen (szString)==0) return;
  76.   if (!(bVerbose) && szString[0]=='[') return;
  77.   if (nLogFlag==MF_CHECKED) AddLineToLog (szString);
  78.   if (szString[0]!='[') SetStatus (hWndMain, (LPSTR) szString);
  79.   // added in some error checking to try to eliminate GPFs
  80.   if (szString) 
  81.   {
  82.     if (lpDebugMsg==NULL)
  83.     {
  84.       int nI;
  85.       
  86.       lpDebugMsg = GlobalAllocPtr (GHND, (MAX_MSG+1)*MAX_SIZE);
  87.       for (nI=0; nI<MAX_MSG; nI++) lpMem[nI] = LPDBG(nI);
  88.     }
  89.     nLen = lstrlen(szString);
  90.     if (nLen>0) 
  91.     {
  92.       if (ptrhGMem<(MAX_MSG-1)) ptrhGMem++;
  93.       else 
  94.       {
  95.         LPSTR lp = lpMem[0];
  96.         memmove (lpMem, lpMem+1, MAX_MSG*sizeof (LPSTR));
  97.         lpMem[MAX_MSG-1] = lp;
  98.       }
  99.       strncpy (lpMem[ptrhGMem], szString, MAX_SIZE-1);
  100.     }
  101.   }
  102.   GetClientRect(hWndDbg,&rect);
  103.   rect.top=min(0,(ptrhGMem-sVPos-1))*nLineHeight;
  104.   if((UINT) ptrhGMem > (UINT) (sVPos+nScreenRows))
  105.     PostMessage(hWndDbg,WM_VSCROLL,SB_LINEDOWN,0L);
  106.   else
  107.     InvalidateRect(hWndDbg,&rect,TRUE);
  108.   UpdateWindow(hWndDbg);
  109. }
  110. //*************************************************************************
  111. //*************************************************************************
  112. void DoPrintf(char *szFormat,...)
  113. {
  114.    va_list vaArgs;
  115.    static char szBuf[256];
  116.    va_start(vaArgs,szFormat);
  117.    if (vsprintf (szBuf,szFormat,vaArgs)!=EOF) DoAddLine (szBuf);
  118.    va_end(vaArgs);
  119. }
  120. //*************************************************************************
  121. //*************************************************************************
  122. void DoPaint(HWND hWnd)
  123. {
  124.   HDC         hDC;   // handle for the display device
  125.   PAINTSTRUCT ps;    // holds PAINT information
  126.   UINT        nI;
  127.   RECT rRect;
  128.   TEXTMETRIC tm;
  129.   memset(&ps, 0x00, sizeof(PAINTSTRUCT));
  130.   hDC = BeginPaint(hWnd, &ps);
  131.   // Included as the background is not a pure color
  132.   SetBkMode(hDC, TRANSPARENT);
  133.   GetTextMetrics(hDC,&tm);
  134.   nLineHeight=tm.tmHeight+tm.tmExternalLeading;
  135.   GetClientRect(hWnd,&rRect);
  136.   nScreenRows = rRect.bottom/nLineHeight;
  137.   ShowScrollBar (hWnd, SB_VERT, (nScreenRows<ptrhGMem));
  138.   for (nI=0; (nI+sVPos) < (UINT) ptrhGMem; nI++) 
  139.   {
  140.     TextOut (hDC, 20, nI*nLineHeight, lpMem[nI+sVPos], lstrlen (lpMem[nI+sVPos]));
  141.   }
  142.   // Inform Windows painting is complete
  143.   EndPaint(hWnd, &ps);
  144. }