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

yehao's Blog

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

轉(zhuǎn)自http://blog.csdn.net/wallimn/article/details/3068643

/************************************************************/
VC IPicture
顯示網(wǎng)絡(luò)圖片 顯示遠程圖片 顯示URL指定的圖片 
通過HTTP下載顯示圖片 顯示網(wǎng)上廣告圖片
上面是我羅列的關(guān)鍵字,我找這個文章?lián)Q了好幾種關(guān)鍵字寫法,才找到,
為了方便它人,我把關(guān)鍵字全部寫上。
/************************************************************/
文章很不錯,正好解決了我的問題。感謝作者。這是個用SDK(沒有使用MFC)開發(fā)的程序。
如果對SDK開發(fā)方式不是很熟,只看ShowPic函數(shù)就以了。
  1. #include <windows.h>  // Windows SDK 要用到的   
  2. #include <commdlg.h>  // 打開文件的窗口要包含這個頭文件   
  3.   
  4. //用到了 IPicture 接口,要包含下面兩個 頭文件   
  5. #include <ocidl.h>    
  6. #include <olectl.h>    
  7.   
  8. // 聲明窗口函數(shù)的原型   
  9. LRESULT CALLBACK MainWndProc (HWND, UINT, WPARAM, LPARAM);   
  10.   
  11. // 聲明顯示圖片的函數(shù)原型   
  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.     //用描述主窗口的參數(shù)填充 WNDCLASSEX 結(jié)構(gòu)   
  30.     windclass.cbSize = sizeof(windclass);  //結(jié)構(gòu)大小   
  31.     windclass.hInstance = hThisInstance;   //實例句酚   
  32.     windclass.lpszClassName = szClassName;   
  33.     windclass.lpfnWndProc = MainWndProc;   //窗口函數(shù)指針   
  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;                      //沒有額外的類內(nèi)存   
  42.     windclass.cbWndExtra = 0;                      //沒有額外的窗口內(nèi)存   
  43.        
  44.     windclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND; //使用預定義背景畫刷   
  45.        
  46.     //注冊這個窗口類,如果失敗直接退出程序    
  47.     if (!RegisterClassEx (&windclass))   
  48.         return 0;   
  49.        
  50.     //創(chuàng)建主窗口   
  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, 程序?qū)嵗浔?nbsp;  
  63.         NULL                 //lpParam, 用戶數(shù)據(jù)   
  64.         );   
  65.        
  66.     //顯示窗口,刷新窗口客戶區(qū)   
  67.     ShowWindow (hWnd, nFunsterStil);   
  68.        
  69.     // 從消息隊列中取出消息,交給窗口函數(shù)處理   
  70.     // 直到 GetMessage 取出的消息是 WM_QUIT,即FALSE,則結(jié)束消息循環(huán)   
  71.     MSG messages;       
  72.     while (GetMessage (&messages, NULL, 0, 0))   
  73.     {   
  74.         //轉(zhuǎn)換鍵盤消息,把虛擬鍵轉(zhuǎn)換為字符消息   
  75.         TranslateMessage(&messages);   
  76.            
  77.         //將消息發(fā)送到相應(yīng)的窗口函數(shù)   
  78.         DispatchMessage(&messages);   
  79.     }   
  80.        
  81.     // GetMessage 返回 FALSE,程序結(jié)束 PostQuitMessage() 發(fā)出這一消息   
  82.     return messages.wParam;   
  83. }   
  84.   
  85.   
  86. // 窗口函數(shù),消息由 DispatchMessage 派發(fā)   
  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 函數(shù)返回0,結(jié)束消息循環(huán)   
  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.         //將我們不處理的消息交給系統(tǒng) 做默認處理   
  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.     //讀取網(wǎng)頁上圖片文件,實際是個CHttpFile指針   
  139.     CInternetSession session("HttpClient");   
  140.     CFile* httpFile = (CFile*)session.OpenURL(lpstrImgUrl);   
  141.        
  142.     if (httpFile!=INVALID_HANDLE_VALUE)       
  143.     {       
  144.         dwFileSize=  httpFile->GetLength();//獲取文件字節(jié)數(shù)       
  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)//鎖定分配內(nèi)存塊       
  163.         return E_FAIL;       
  164.        
  165.     //把文件讀入內(nèi)存緩沖區(qū)       
  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.     //轉(zhuǎn)換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();//關(guān)閉打開的文件       
  194.        
  195.     if (SUCCEEDED(bResult))       
  196.     {       
  197.         return S_OK;       
  198.     }       
  199.     else       
  200.     {       
  201.         return E_FAIL;       
  202.     }       
  203. }   

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

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

導航

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統(tǒng)計

常用鏈接

留言簿

隨筆分類

文章分類

文章檔案

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            加勒比av一区二区| 亚洲高清久久| 亚洲综合成人婷婷小说| 亚洲理伦在线| 国产精品久久久久久影视| 亚洲欧美综合国产精品一区| 一区二区三区欧美亚洲| 国产乱码精品| 蜜桃av一区二区| 欧美sm视频| 亚洲尤物精选| 午夜电影亚洲| 亚洲国产一区在线| 亚洲人成在线观看一区二区| 欧美日韩免费视频| 欧美一级午夜免费电影| 久久精品国产免费| 亚洲免费观看在线视频| 亚洲一区二区网站| 一区二区在线免费观看| 亚洲免费电影在线| 国产一区99| 亚洲破处大片| 国产日韩精品一区二区浪潮av| 开心色5月久久精品| 欧美久久久久中文字幕| 久久成人精品| 欧美国产日韩精品免费观看| 亚洲欧美日韩综合一区| 狂野欧美一区| 欧美一区二区三区另类| 欧美成人首页| 久久久久久久久久久久久女国产乱| 久热国产精品| 欧美在线999| 欧美精品九九| 老司机久久99久久精品播放免费 | 在线亚洲精品| 久久精品一区二区三区不卡牛牛| 99国产麻豆精品| 久久久久青草大香线综合精品| 亚洲亚洲精品在线观看| 久久久精品一品道一区| 亚洲小说区图片区| 欧美大片va欧美在线播放| 久久国产精品99国产| 欧美日韩亚洲一区二区三区在线观看| 久久经典综合| 国产精品久久久久aaaa九色| 亚洲国产高潮在线观看| 国产一区二区三区久久悠悠色av | 欧美激情精品久久久久| 国产欧美一级| 亚洲一本视频| 亚洲一区二区三区四区五区午夜| 蜜桃av一区二区三区| 久久久国际精品| 国产精品一区二区久久精品| 99精品视频一区二区三区| 亚洲日本免费电影| 免费成人网www| 欧美成人免费网| 在线免费日韩片| 久久久av网站| 久久综合九色综合久99| 狠色狠色综合久久| 久久精品国产清高在天天线| 久久久久久久国产| 狠狠入ady亚洲精品经典电影| 亚洲欧美日韩久久精品| 篠田优中文在线播放第一区| 国产精品免费视频xxxx| 亚洲一区国产视频| 欧美在线关看| 国产一区二区成人久久免费影院| 欧美一级大片在线免费观看| 久久疯狂做爰流白浆xx| 黑人一区二区三区四区五区| 久久乐国产精品| 欧美大片在线看免费观看| 亚洲精品国产精品久久清纯直播| 欧美~级网站不卡| 亚洲精品影视在线观看| 亚洲一级电影| 国产日韩欧美在线| 久久婷婷一区| 最新国产の精品合集bt伙计| 中文亚洲免费| 国产日韩专区| 欧美大片国产精品| 一区二区三区日韩在线观看| 久久精品国产清自在天天线| 一区免费观看视频| 欧美日韩国产二区| 午夜视频一区| 亚洲国产精品免费| 午夜精品久久久久久久久久久久| 国产一区二区日韩精品| 欧美成人高清视频| 制服丝袜亚洲播放| 免费h精品视频在线播放| 一本久久a久久精品亚洲| 国产欧美日韩精品专区| 欧美激情精品久久久六区热门 | 这里只有精品丝袜| 久久人体大胆视频| 一本大道久久a久久精二百| 国产欧美欧美| 欧美激情一区二区三区蜜桃视频| 亚洲欧美国产一区二区三区| 亚洲国产成人av| 午夜在线不卡| 亚洲美女毛片| 禁久久精品乱码| 欧美性做爰猛烈叫床潮| 老牛嫩草一区二区三区日本| 亚洲一区亚洲二区| 亚洲国产一区二区a毛片| 久久riav二区三区| 亚洲一区二区三区精品在线观看 | 欧美日韩国产页| 久久精品夜夜夜夜久久| 亚洲天堂av电影| 亚洲精品国产精品国自产观看 | 亚洲精品国产品国语在线app| 国产精品视频观看| 欧美精品色网| 美国十次成人| 久久久噜噜噜| 欧美亚洲视频在线观看| 亚洲天堂激情| 一区二区三区日韩欧美精品| 亚洲国产一成人久久精品| 猛干欧美女孩| 久久亚洲国产成人| 久久国产手机看片| 亚洲欧美精品伊人久久| 在线亚洲免费| 正在播放亚洲一区| 一区二区电影免费在线观看| 亚洲电影在线播放| 在线观看av一区| 在线观看日韩www视频免费| 国产一区二区av| 国产有码一区二区| 国语精品中文字幕| 国内精品久久久久影院色| 国产日韩亚洲欧美综合| 国产亚洲精品7777| 国外成人网址| 在线国产欧美| 亚洲人成亚洲人成在线观看| 亚洲国产免费| 日韩亚洲精品电影| 一区二区精品在线观看| 亚洲一区二区三区精品视频| 亚洲资源av| 久久国产黑丝| 蜜臀99久久精品久久久久久软件| 米奇777超碰欧美日韩亚洲| 欧美黄色片免费观看| 欧美激情网站在线观看| 亚洲精品乱码久久久久久日本蜜臀 | 欧美成人午夜影院| 亚洲国产精品视频一区| 日韩视频免费观看高清完整版| 99视频在线观看一区三区| 亚洲一级二级在线| 久久精品男女| 欧美噜噜久久久xxx| 欧美午夜a级限制福利片| 国产精品综合久久久| 黄色成人91| 99热在这里有精品免费| 欧美亚洲免费高清在线观看| 久久综合狠狠综合久久综青草 | 欧美激情亚洲精品| 99在线|亚洲一区二区| 欧美一二区视频| 麻豆精品在线观看| 国产精品国产a级| 精品成人国产| 亚洲影视综合| 美女露胸一区二区三区| 日韩一区二区精品葵司在线| 久久国产精品第一页| 欧美日韩精品一区视频| 韩日精品视频| 亚洲欧美日韩一区二区三区在线| 久久综合狠狠综合久久综青草| 亚洲美女少妇无套啪啪呻吟| 久久av一区| 国产精品久久久久久亚洲毛片 | 国产一区二区精品久久| 99日韩精品| 美女精品网站| 午夜在线成人av| 欧美午夜a级限制福利片| 亚洲国产精品一区二区www在线| 翔田千里一区二区|