青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

yehao's Blog

VC使用IPicture顯示網上圖片(通過URL指定)

轉自http://blog.csdn.net/wallimn/article/details/3068643

/************************************************************/
VC IPicture
顯示網絡圖片 顯示遠程圖片 顯示URL指定的圖片 
通過HTTP下載顯示圖片 顯示網上廣告圖片
上面是我羅列的關鍵字,我找這個文章換了好幾種關鍵字寫法,才找到,
為了方便它人,我把關鍵字全部寫上。
/************************************************************/
文章很不錯,正好解決了我的問題。感謝作者。這是個用SDK(沒有使用MFC)開發的程序。
如果對SDK開發方式不是很熟,只看ShowPic函數就以了。
  1. #include <windows.h>  // Windows SDK 要用到的   
  2. #include <commdlg.h>  // 打開文件的窗口要包含這個頭文件   
  3.   
  4. //用到了 IPicture 接口,要包含下面兩個 頭文件   
  5. #include <ocidl.h>    
  6. #include <olectl.h>    
  7.   
  8. // 聲明窗口函數的原型   
  9. LRESULT CALLBACK MainWndProc (HWND, UINT, WPARAM, LPARAM);   
  10.   
  11. // 聲明顯示圖片的函數原型   
  12. HRESULT ShowPic(char *lpstrFile,HWND hWnd) ;   
  13.   
  14. //圖片文件名   
  15. char lpstrFile[MAX_PATH]="";   
  16.   
  17.   
  18. int WINAPI WinMain (HINSTANCE hThisInstance,   
  19.                     HINSTANCE hPrevInstance,   
  20.                     LPSTR lpszArgument,   
  21.                     int nFunsterStil)   
  22.                        
  23. {   
  24.     // 窗口類名   
  25.     char szClassName[ ] = "ShowPicture";   
  26.        
  27.     WNDCLASSEX windclass;   
  28.        
  29.     //用描述主窗口的參數填充 WNDCLASSEX 結構   
  30.     windclass.cbSize = sizeof(windclass);  //結構大小   
  31.     windclass.hInstance = hThisInstance;   //實例句酚   
  32.     windclass.lpszClassName = szClassName;   
  33.     windclass.lpfnWndProc = MainWndProc;   //窗口函數指針   
  34.     windclass.style = CS_DBLCLKS;          //捕獲雙擊事件   
  35.     windclass.cbSize = sizeof (WNDCLASSEX);   
  36.        
  37.     windclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); //使用預定義圖標   
  38.     windclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); //使用預定義類的小圖標   
  39.     windclass.hCursor = LoadCursor (NULL, IDC_ARROW); //使用預定義光標   
  40.     windclass.lpszMenuName = NULL;                 //不指定主菜單   
  41.     windclass.cbClsExtra = 0;                      //沒有額外的類內存   
  42.     windclass.cbWndExtra = 0;                      //沒有額外的窗口內存   
  43.        
  44.     windclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND; //使用預定義背景畫刷   
  45.        
  46.     //注冊這個窗口類,如果失敗直接退出程序    
  47.     if (!RegisterClassEx (&windclass))   
  48.         return 0;   
  49.        
  50.     //創建主窗口   
  51.     HWND hWnd = CreateWindowEx (   
  52.         0,                   //dwExStyle, 擴展樣式   
  53.         szClassName,         //lpClassName, 類名   
  54.         "顯示圖片 -- 鼠標雙擊瀏覽圖片文件      -- Author:Unmi", //lpWindowName, 標題   
  55.         WS_OVERLAPPEDWINDOW, //dwStyle, 窗口風格   
  56.         CW_USEDEFAULT,       //X, 初始 X 坐標   
  57.         CW_USEDEFAULT,       //Y, 初始 YX 坐標   
  58.         640,                 //nWidth, 寬度   
  59.         480,                 //nHeight, 高度   
  60.         HWND_DESKTOP,        //hWndParent, 父窗口句柄   
  61.         NULL,                //hMenu, 菜單句柄   
  62.         hThisInstance,       //hInstance, 程序實例句柄   
  63.         NULL                 //lpParam, 用戶數據   
  64.         );   
  65.        
  66.     //顯示窗口,刷新窗口客戶區   
  67.     ShowWindow (hWnd, nFunsterStil);   
  68.        
  69.     // 從消息隊列中取出消息,交給窗口函數處理   
  70.     // 直到 GetMessage 取出的消息是 WM_QUIT,即FALSE,則結束消息循環   
  71.     MSG messages;       
  72.     while (GetMessage (&messages, NULL, 0, 0))   
  73.     {   
  74.         //轉換鍵盤消息,把虛擬鍵轉換為字符消息   
  75.         TranslateMessage(&messages);   
  76.            
  77.         //將消息發送到相應的窗口函數   
  78.         DispatchMessage(&messages);   
  79.     }   
  80.        
  81.     // GetMessage 返回 FALSE,程序結束 PostQuitMessage() 發出這一消息   
  82.     return messages.wParam;   
  83. }   
  84.   
  85.   
  86. // 窗口函數,消息由 DispatchMessage 派發   
  87. LRESULT CALLBACK MainWndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)   
  88. {   
  89.     switch (message) //處理消息   
  90.     {   
  91.     case WM_DESTROY:   
  92.         //向消息隊列投遞一個 WM_QUIT 消息,促使 GetMessage 函數返回0,結束消息循環   
  93.         PostQuitMessage (0);   
  94.         break;   
  95.     case WM_LBUTTONDBLCLK:   
  96.         {   
  97.             OPENFILENAME file = {0};   
  98.             file.lStructSize = sizeof(file);   
  99.             file.lpstrTitle = "請選擇一個圖片文件";   
  100.             file.lpstrFile = lpstrFile;   
  101.             file.nMaxFile = MAX_PATH;   
  102.             file.lpstrFilter = "Pictures(*.jpg,*.gif,*.bmp)/0*.jpg;*.gif;*.bmp/0/0";   
  103.             if(::GetOpenFileName(&file))   
  104.             {          
  105.                 //清除原來的圖像   
  106.                 HDC hdc=GetDC(hWnd);    
  107.                 RECT rect;   
  108.                 ::GetWindowRect(hWnd,&rect);   
  109.                 ::FillRect(hdc,&rect,(HBRUSH) COLOR_BACKGROUND);   
  110.                    
  111.                 ::SendMessage(hWnd,WM_PAINT,NULL,NULL);   
  112.             }   
  113.         }   
  114.         break;   
  115.     case WM_PAINT:   
  116.         ShowPic(lpstrFile,hWnd);   
  117.         break;   
  118.     default:   
  119.            
  120.         //將我們不處理的消息交給系統 做默認處理   
  121.         return DefWindowProc (hWnd, message, wParam, lParam);   
  122.     }   
  123.        
  124.     return 0;   
  125. }   
  126. // 顯示圖片, lpstrImgUrl 為圖片URL地址,hWnd 為窗口句柄      
  127. HRESULT Utils::ShowPic(char *lpstrImgUrl,HWND hWnd)       
  128. {       
  129.     HDC hDC_Temp=GetDC(hWnd);       
  130.        
  131.     IPicture *pPic;       
  132.     IStream *pStm;       
  133.        
  134.     BOOL bResult;       
  135.        
  136.     DWORD dwFileSize,dwByteRead;       
  137.        
  138.     //讀取網頁上圖片文件,實際是個CHttpFile指針   
  139.     CInternetSession session("HttpClient");   
  140.     CFile* httpFile = (CFile*)session.OpenURL(lpstrImgUrl);   
  141.        
  142.     if (httpFile!=INVALID_HANDLE_VALUE)       
  143.     {       
  144.         dwFileSize=  httpFile->GetLength();//獲取文件字節數       
  145.            
  146.         if (dwFileSize==0xFFFFFFFF)       
  147.             return E_FAIL;       
  148.     }       
  149.     else       
  150.     {       
  151.         return E_FAIL;       
  152.     }       
  153.        
  154.        
  155.     //分配全局存儲空間       
  156.     HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);       
  157.     LPVOID pvData = NULL;       
  158.        
  159.     if (hGlobal == NULL)       
  160.         return E_FAIL;       
  161.        
  162.     if ((pvData = GlobalLock(hGlobal)) == NULL)//鎖定分配內存塊       
  163.         return E_FAIL;       
  164.        
  165.     //把文件讀入內存緩沖區       
  166.     dwByteRead = httpFile->Read(pvData,dwFileSize);   
  167.        
  168.     GlobalUnlock(hGlobal);       
  169.        
  170.     CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);       
  171.        
  172.     //裝入圖形文件       
  173.     bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);       
  174.        
  175.     if(FAILED(bResult))       
  176.         return E_FAIL;       
  177.        
  178.     OLE_XSIZE_HIMETRIC hmWidth; //圖片的真實寬度, 單位為英寸      
  179.     OLE_YSIZE_HIMETRIC hmHeight; //圖片的真實高度, 單位為英寸      
  180.     pPic->get_Width(&hmWidth);       
  181.     pPic->get_Height(&hmHeight);       
  182.        
  183.     //轉換hmWidth和hmHeight為pixels距離,1英寸=25.4毫米      
  184.     int nWidth = MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540);      
  185.     int nHeight = MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540);      
  186.        
  187.     //將圖形輸出到屏幕上(有點像BitBlt)       
  188.     bResult=pPic->Render(hDC_Temp,0,0,nWidth,nHeight,       
  189.         0,hmHeight,hmWidth,-hmHeight,NULL);       
  190.        
  191.     pPic->Release();       
  192.        
  193.     httpFile->Close();//關閉打開的文件       
  194.        
  195.     if (SUCCEEDED(bResult))       
  196.     {       
  197.         return S_OK;       
  198.     }       
  199.     else       
  200.     {       
  201.         return E_FAIL;       
  202.     }       
  203. }   

補充說明:
  原文的程序是使用SDK方式開發的,可能會有些人不習慣,我使用MFC方式驗證調試了一下,效果還不錯。如需要源碼的,請到http://wallimn.ys168.com(我的網絡硬盤)下載。
  我的程序是個很簡單的程序,沒有考慮重繪、圖片大小的處理等問題,僅體現編程思想及方法。

posted on 2014-07-11 15:36 厚積薄發 閱讀(633) 評論(0)  編輯 收藏 引用 所屬分類: Windows編程

導航

<2025年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

統計

常用鏈接

留言簿

隨筆分類

文章分類

文章檔案

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品一区四区| 国产日韩一区二区三区| 午夜国产精品视频免费体验区| 欧美国产一区在线| 欧美va天堂| 免费一区二区三区| 麻豆av福利av久久av| 欧美电影美腿模特1979在线看| 久久久久久免费| 欧美大片免费观看| 亚洲人成在线观看一区二区| 欧美成人久久| 亚洲精品自在在线观看| 亚洲女人小视频在线观看| 欧美一二三区精品| 午夜亚洲性色视频| 先锋影音一区二区三区| 麻豆精品视频在线| 亚洲精品在线二区| 午夜视频一区在线观看| 久久在线免费观看视频| 欧美日韩福利视频| 国产日韩欧美精品在线| 一区二区三区在线高清| 一区二区三区四区五区精品| 欧美在线高清| 亚洲三级免费电影| 欧美专区在线观看一区| 欧美丰满少妇xxxbbb| 国产乱肥老妇国产一区二| 亚洲国产精品一区制服丝袜 | 欧美伊人久久久久久久久影院 | 国产精品免费福利| 亚洲国产精品视频| 欧美在线你懂的| 亚洲男人第一网站| 亚洲深夜av| 老司机精品导航| 亚洲午夜精品网| 欧美99久久| 国产一区二区三区在线观看免费视频| 亚洲国产一二三| 久久久久高清| 在线亚洲一区| 欧美精品一区二区三区久久久竹菊| 国产欧美韩日| 国产精品99久久久久久www| 久久久亚洲午夜电影| 一区二区三区欧美视频| 欧美精品一区二区视频| 又紧又大又爽精品一区二区| 欧美在线观看视频一区二区三区| 91久久久亚洲精品| 久久琪琪电影院| 国产综合精品| 久久精品在线播放| 欧美一区二区精品| 国产精品一区2区| 亚洲免费一级电影| 一区二区三区视频在线| 欧美日韩一区二区免费视频| 日韩一级黄色片| 亚洲三级影片| 欧美啪啪一区| 亚洲剧情一区二区| 91久久久久| 欧美连裤袜在线视频| 亚洲美女视频在线观看| 91久久精品国产91久久性色| 欧美国产精品v| 99综合在线| 一区二区久久久久久| 国产精品久久久久久久久久妞妞| 亚洲视频在线观看网站| 亚洲午夜激情免费视频| 国产精品欧美久久久久无广告| 亚洲免费视频中文字幕| 午夜精彩视频在线观看不卡| 狠狠色狠狠色综合日日五| 欧美大胆人体视频| 欧美久久成人| 香蕉av福利精品导航| 欧美在线视频二区| 亚洲欧洲日本一区二区三区| 亚洲精品欧美在线| 国产精品尤物福利片在线观看| 久久久91精品国产一区二区三区 | 亚洲一区日本| 国产视频一区在线观看| 久久综合色播五月| 欧美连裤袜在线视频| 欧美一区二区三区精品电影| 久久久福利视频| 亚洲精品影院| 国产亚洲一级高清| 最新日韩中文字幕| 99视频+国产日韩欧美| 国产欧美日韩一区二区三区| 美日韩精品视频| 欧美女同视频| 久久婷婷久久| 国产精品igao视频网网址不卡日韩| 欧美专区在线观看| 欧美精品久久天天躁| 久久精品一二三| 欧美日韩不卡| 蜜桃av久久久亚洲精品| 欧美视频一区二区在线观看| 噜噜噜在线观看免费视频日韩| 欧美日韩一区二区三区| 欧美大片va欧美在线播放| 国产精品专区h在线观看| 亚洲激情精品| …久久精品99久久香蕉国产| 亚洲先锋成人| 夜夜嗨网站十八久久| 久久亚洲精品一区| 久久精品国产999大香线蕉| 欧美成人精品| 久久午夜电影网| 国产精品日韩一区| 亚洲欧洲精品一区二区三区波多野1战4| 国产农村妇女精品一二区| 最近看过的日韩成人| 亚洲丶国产丶欧美一区二区三区 | 亚洲午夜精品久久| 欧美激情1区2区3区| 你懂的视频一区二区| 国产一区二区中文字幕免费看| 亚洲视频一区二区| 中文日韩在线视频| 欧美日韩国产页| 亚洲伦理在线免费看| 99精品欧美一区| 牛牛精品成人免费视频| 欧美成人激情视频| 在线观看一区视频| 久久这里只精品最新地址| 久久久久欧美精品| 国产午夜精品久久久久久久| 亚洲一区中文字幕在线观看| 亚洲永久免费精品| 国产精品青草久久久久福利99| 在线视频你懂得一区| 亚洲免费影视第一页| 国产精品嫩草99av在线| 亚洲一级免费视频| 欧美中文字幕第一页| 韩国成人福利片在线播放| 欧美在线观看视频一区二区三区 | 日韩亚洲欧美一区二区三区| 一区二区三区成人精品| 欧美日韩一区自拍| 亚洲无线一线二线三线区别av| 午夜精品久久久久久99热| 国产日韩在线播放| 久久香蕉国产线看观看网| 亚洲第一精品在线| 老司机精品导航| 亚洲欧美日韩国产一区| 国产区在线观看成人精品| 久久成人资源| 欧美阿v一级看视频| 亚洲精品日韩一| 欧美色图五月天| 欧美在线地址| 亚洲国产精品成人| 亚洲欧美日韩国产一区二区三区| 国产精品一香蕉国产线看观看 | 国产精品在线看| 老司机午夜精品视频在线观看| 91久久极品少妇xxxxⅹ软件| 午夜久久黄色| 亚洲国产精品一区二区第一页| 欧美日韩不卡在线| 先锋亚洲精品| 亚洲激情综合| 久久精品国内一区二区三区| 亚洲精品国产无天堂网2021| 国产精品久久久久久久9999 | 久久久噜噜噜久噜久久| 亚洲精品国产精品乱码不99| 国产精品久久中文| 欧美jizzhd精品欧美喷水 | 欧美日韩日韩| 欧美专区一区二区三区| 日韩视频精品| 蜜乳av另类精品一区二区| 亚洲午夜伦理| 亚洲激情社区| 国产亚洲精久久久久久| 欧美日韩免费一区二区三区视频| 久久精品天堂| 午夜一区不卡| 在线一区二区日韩| 亚洲精品日韩激情在线电影| 美女露胸一区二区三区| 欧美在线播放高清精品| 一本色道久久综合亚洲精品小说 | 日韩视频二区|