⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downloadbmp.c

📁 brew 用IWEB接口来实现下载图片的一个列子
💻 C
📖 第 1 页 / 共 3 页
字号:
FUNCTION: WebAction_Stop

DESCRIPTION:
   Halts a web transaction, wrapped/represented by a WebAction

PARAMETERS:
   pwa: the WebAction

DEPENDENCIES:
   None

RETURN VALUE:
   None

SIDE EFFECTS:
   None
===========================================================================*/
//停止
static void WebAction_Stop(WebAction *pwa)
{
   // this cancels any pending web transaction, or readable on the 
   // response body.  if nothing is pending, this has no effect
   CALLBACK_Cancel(&pwa->cb);
   // then clean up, if necessary
   if ((char *)0 != pwa->pszPostData) {
      *pwa->pszPostData = 1; // write delimiter back in, if any
      pwa->pszPostData = 0;
   }

   ReleaseObj((void **)&pwa->pipPostData);
   ReleaseObj((void **)&pwa->piGetLine);  // let body go
   ReleaseObj((void **)&pwa->piWResp);    // let response go
}


/*===========================================================================

FUNCTION: WebAction_ReadLines

DESCRIPTION:
   consumes the body of a web response, line by line, is called when the
   IGetLine that represents the body is readable.

PARAMETERS:
   pwa: wrapper for the web transaction
   pszUrl: the URL to go GET/POST

DEPENDENCIES:
   None

RETURN VALUE:
   None

SIDE EFFECTS:
   None
===========================================================================*/
//从服务器读取文件信息
static void WebAction_ReadLines(void *p)
{
   int        rv;
   GetLine    gl;
   WebAction *pwa = (WebAction *)p;
   CDBApp * pApp = pwa->pParent;

   // read a line
   rv = IGETLINE_GetLine(pwa->piGetLine, &gl, IGETLINE_LF);
   if (rv == IGETLINE_WAIT) {
      CALLBACK_Init(&pwa->cb, WebAction_ReadLines, pwa);
      IGETLINE_Peekable(pwa->piGetLine, &pwa->cb);
      return;
   }

   // process line

   pwa->nBytes += gl.nLen + IGETLINE_EOLSize(rv);
   DB_WriteFile(pApp,gl.psz,gl.nLen,pwa->nBytes-gl.nLen-IGETLINE_EOLSize(rv));
   //ND_Print(pApp, "%s\n", gl.psz, NULL, TRUE);
   /*if (pApp->m_bRS) {
      // show all data
      ND_Print(pApp, "%s\n", gl.psz, NULL, TRUE);
   } else {
      // show one hash mark per line (truncated or otherwise)
      ND_Print(pApp, "#");
   }*/

   // if stream has not reached EOF or ERROR
   if (!IGETLINE_Exhausted(rv)) {
      // 等待更多的数据
      CALLBACK_Init(&pwa->cb, WebAction_ReadLines, pwa);
      IGETLINE_Readable(pwa->piGetLine, &pwa->cb);
      return;
   }

   // no more data
   
   if (rv == IGETLINE_ERROR) {
      ND_Print(pApp, "\n** error\n");
   } else {
	   ISHELL_LoadResString(pApp->a.m_pIShell,DOWNLOADBMP_RES_FILE,IDC_END,pApp->m_AnimalTitle,sizeof(pApp->m_AnimalTitle));
      //ND_Print(pApp, "\n** end\n");
   }
   
  /* if (pApp->m_bRT) {
      uint32 uNow = GETUPTIMEMS();
      ND_Print(pApp,
               "** %d bytes\n"
               "** %dB/s\n"
               "** %dms et (recv)\n"
               "** %dms et (total)\n",
               pwa->nBytes, 
               pwa->nBytes * 1000 / MAX(1,uNow - pwa->uRecvStart),
               uNow - pwa->uRecvStart,
               uNow - pwa->uStart);
   }*/

   // am done, _Stop cleans up
   //显示下在的图象
   DB_LoadBMPFromBMPFile(pApp);
   WebAction_Stop(pwa);
}
static void ReleaseObj(void ** ppObj)
{
   if (*ppObj) {
      (void)IBASE_Release(((IBase *)*ppObj));
      *ppObj = NULL;
   }
}
static void ND_Print(CDBApp *pApp, char *pszFmt, ...)
{
   char buf[100];
   va_list argptr;
   va_start(argptr, pszFmt);

   if( pApp->m_pIStatic )
   {
      if (VSNPRINTF(buf, sizeof(buf), pszFmt, argptr) >= 0) {
         ISTATIC_SetTextEx(pApp->m_pIStatic, (byte*)buf, NULL, TRUE);
         ISTATIC_Redraw(pApp->m_pIStatic);
      }
   }
   va_end(argptr);
}
//得到网页信息
static void ND_StartTest(CDBApp* pApp, const char* pszSubmit)
{
	AEERect rc;
    IStatic * pStatic = NULL;
    char *pszIter;
	pApp->m_pszHost = "";
   pApp->m_pszURL = "";
   pApp->m_pszMsg = "";
   // Duplicte form data so we can write over it
   
   StrReplace(&pApp->m_pszFormData, pszSubmit);

   // Locate, decode, and process form fields
   
   pszIter = pApp->m_pszFormData;

   if (!pszIter) {
      return;
   }

   pszIter = STRCHREND(pszIter, '?');
   if (*pszIter) {
      ++pszIter;
   }

   {
      IWebUtil     *piwu;
      WebFormField  wff;

      // go get me a gosh-darn parsin' machine
      if (SUCCESS != ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_WEBUTIL,
                                           (void **)&piwu)) {
         return;
      }
      
      // all pointers into a string we STRDUP'ed, all NULL terminated
      // by IWebUtil in place for me
      
      // IWebUtil can parse a bunch at a time, but we'll just iterate here

      while (0 != IWEBUTIL_ParseFormFields(piwu,&pszIter,&wff,1,0)) {
         boolean bOn = STREQ(wff.pcValue, "on");
         if (STREQ(wff.pcName, "HOST")) {
            pApp->m_pszHost = wff.pcValue;
         } else if (STREQ(wff.pcName, "URL")) {
            pApp->m_pszURL = wff.pcValue;
         } else if (STREQ(wff.pcName, "MSG")) {
            pApp->m_pszMsg = wff.pcValue;
         }/* else if (STREQ(wff.pcName, "RS")) {
            pApp->m_bRS = bOn;
         } else if (STREQ(wff.pcName, "RT")) {
            pApp->m_bRT = bOn;
         } else if (STREQ(wff.pcName, "PROTOCOL")) {
            if (STREQ(wff.pcValue, "1")) {
               pApp->m_bTCP = 1;
            }
         }*/
      }
      IWEBUTIL_Release(piwu);
      piwu = 0;
   }

   pApp->m_nDataLength = STRLEN(pApp->m_pszMsg);
   
   // Create Static Control to Display Messages
   if (ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_STATIC,(void**)&pApp->m_pIStatic) == AEE_SUCCESS)
      pStatic = pApp->m_pIStatic;   // Cache Pointer
   else
      return;

   ISTATIC_SetRect(pStatic, &pApp->m_nScreenRect);
   ISTATIC_SetProperties(pStatic, ST_ASCII|ST_NOSCROLL);
   ISTATIC_SetActive(pStatic, 1);

   // Disable Browser
   SETAEERECT(&rc, 0, 0, 0, 0);
   IHTMLVIEWER_SetRect(pApp->m_pHTMLViewer, &rc);

   // Clear Screen
   IDISPLAY_ClearScreen(pApp->a.m_pIDisplay);
   ISHELL_LoadResString(pApp->a.m_pIShell,DOWNLOADBMP_RES_FILE,IDC_START,pApp->m_AnimalTitle,sizeof(pApp->m_AnimalTitle));
   //显示动画
   pApp->m_bSuspended=FALSE;
   StartProgressDisplay(pApp);

  // ND_Print(pApp, "** starting...\n");
   FOR_ALL_WEBACTIONS(pApp, p, WebAction_Start(p, pApp->m_pszHost) );
   /*if (STRBEGINS(JUMP_ECHOTEST, pszSubmit)) {

      // Make note of type of cleanup to be performed when we exit this state   
      //pApp->m_pfnViewCleanup = ND_EchoCleanup;
      
      // Start Echo Test
     // Echoer_Start(pApp);

   } else {
      // Make note of type of cleanup to be performed when we exit this state   
      //pApp->m_pfnViewCleanup = ND_HTTPCleanup;

      // Start HTTP test(s)
      FOR_ALL_WEBACTIONS(pApp, p, WebAction_Start(p, pApp->m_pszURL) );
   }*/
}
//将从服务器得到的文件信息写入文件
static DB_WriteFile(CDBApp * pApp,char *buffer, int32 bufferlength,int32 length)
{
	IFile *pf;

    if(length>0)
	{
		pf = IFILEMGR_OpenFile(pApp->m_pFileMgr, "aa.bmp", _OFM_READWRITE);
		IFILE_Seek(pf,_SEEK_START,length);
		
	}else
	{
		if(IFILEMGR_Test(pApp->m_pFileMgr, "aa.bmp")!=SUCCESS)
		{
			pf=IFILEMGR_OpenFile(pApp->m_pFileMgr, "aa.bmp", _OFM_CREATE);
		}
		else
		{
			pf = IFILEMGR_OpenFile(pApp->m_pFileMgr, "aa.bmp", _OFM_READWRITE);
		}
	}


	IFILE_Write(pf,buffer,bufferlength);
	IFILE_Release(pf);

}
static boolean DB_LoadBMPFromBMPFile (CDBApp*pApp)
{
	IImage *pImage = NULL;
    //AECHAR* pImageFile = NULL;
  char pImageFile[]="aa.bmp";
  //Update Screen
  //DB_Reset(pApp);
  pApp->m_bIsProgressDisp = FALSE;
  ISHELL_CancelTimer(pApp->a.m_pIShell,(PFNNOTIFY)(StartProgressDisplay),pApp);
  IIMAGE_Stop(pApp->m_pProgressImages[PROG_ANIM]);
  //IDISPLAY_ClearScreen(pApp->a.m_pIDisplay);
 pImage = ISHELL_LoadImage(pApp->a.m_pIShell, pImageFile);

 if( !pImage )
 return EFAILED; // load failed

 // draw picture at (0,0)
 IIMAGE_Draw(pImage, 0, 0);

 // Upadte Screen
 IDISPLAY_Update(pApp->a.m_pIDisplay);

 // Release IIMAGE 
 IIMAGE_Release( pImage );

 return SUCCESS;

}
//显示动画
static void StartProgressDisplay(CDBApp *pApp)
{
	AEERect r;
	AECHAR  title[60];

	if (!pApp->m_bSuspended)
	{
		pApp->m_bIsProgressDisp = TRUE;

		SETAEERECT(&r, (pApp->m_nScreenRect.dx - CX_PROG_DISPLAY)/2, (pApp->m_nScreenRect.dy - CY_PROG_DISPLAY)/2, 
															CX_PROG_DISPLAY, CY_PROG_DISPLAY);
		IDISPLAY_EraseRect(pApp->a.m_pIDisplay, &r);
		IDISPLAY_FrameRect(pApp->a.m_pIDisplay, &r);
		ISHELL_LoadResString(pApp->a.m_pIShell,DOWNLOADBMP_RES_FILE,IDB_DOWNLOAD,title,sizeof(title));
		
		IDISPLAY_DrawText(pApp->a.m_pIDisplay,AEE_FONT_BOLD,title,-1,0,0,NULL,IDF_ALIGN_CENTER);
		IDISPLAY_DrawText(pApp->a.m_pIDisplay,AEE_FONT_BOLD,pApp->m_AnimalTitle,-1,(pApp->m_nScreenRect.dx - CX_PROG_DISPLAY)/2+3,
			(pApp->m_nScreenRect.dy - CY_PROG_DISPLAY)/2+3,&r,IDF_ALIGN_CENTER);

		IIMAGE_Draw(pApp->m_pProgressImages[PROG_PHONE], r.x + 20, r.y + 32);
		IIMAGE_Draw(pApp->m_pProgressImages[PROG_FILE],  r.x + 62, r.y + 44);
		IIMAGE_Start(pApp->m_pProgressImages[PROG_ANIM], r.x + 38, r.y + 48);
		ISHELL_SetTimer(pApp->a.m_pIShell, 1000, (PFNNOTIFY)(StartProgressDisplay), pApp);
	}
	pApp->m_nTotleTimes++;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -