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

yehao's Blog

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

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

/************************************************************/
VC IPicture
顯示網(wǎng)絡(luò)圖片 顯示遠(yuǎn)程圖片 顯示URL指定的圖片 
通過(guò)HTTP下載顯示圖片 顯示網(wǎng)上廣告圖片
上面是我羅列的關(guān)鍵字,我找這個(gè)文章?lián)Q了好幾種關(guān)鍵字寫法,才找到,
為了方便它人,我把關(guān)鍵字全部寫上。
/************************************************************/
文章很不錯(cuò),正好解決了我的問(wèn)題。感謝作者。這是個(gè)用SDK(沒(méi)有使用MFC)開發(fā)的程序。
如果對(duì)SDK開發(fā)方式不是很熟,只看ShowPic函數(shù)就以了。
  1. #include <windows.h>  // Windows SDK 要用到的   
  2. #include <commdlg.h>  // 打開文件的窗口要包含這個(gè)頭文件   
  3.   
  4. //用到了 IPicture 接口,要包含下面兩個(gè) 頭文件   
  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;   //實(shí)例句酚   
  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); //使用預(yù)定義圖標(biāo)   
  38.     windclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); //使用預(yù)定義類的小圖標(biāo)   
  39.     windclass.hCursor = LoadCursor (NULL, IDC_ARROW); //使用預(yù)定義光標(biāo)   
  40.     windclass.lpszMenuName = NULL;                 //不指定主菜單   
  41.     windclass.cbClsExtra = 0;                      //沒(méi)有額外的類內(nèi)存   
  42.     windclass.cbWndExtra = 0;                      //沒(méi)有額外的窗口內(nèi)存   
  43.        
  44.     windclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND; //使用預(yù)定義背景畫刷   
  45.        
  46.     //注冊(cè)這個(gè)窗口類,如果失敗直接退出程序    
  47.     if (!RegisterClassEx (&windclass))   
  48.         return 0;   
  49.        
  50.     //創(chuàng)建主窗口   
  51.     HWND hWnd = CreateWindowEx (   
  52.         0,                   //dwExStyle, 擴(kuò)展樣式   
  53.         szClassName,         //lpClassName, 類名   
  54.         "顯示圖片 -- 鼠標(biāo)雙擊瀏覽圖片文件      -- Author:Unmi", //lpWindowName, 標(biāo)題   
  55.         WS_OVERLAPPEDWINDOW, //dwStyle, 窗口風(fēng)格   
  56.         CW_USEDEFAULT,       //X, 初始 X 坐標(biāo)   
  57.         CW_USEDEFAULT,       //Y, 初始 YX 坐標(biāo)   
  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.     // 從消息隊(duì)列中取出消息,交給窗口函數(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.         //向消息隊(duì)列投遞一個(gè) 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 = "請(qǐng)選擇一個(gè)圖片文件";   
  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.                 //清除原來(lái)的圖像   
  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) 做默認(rèn)處理   
  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)頁(yè)上圖片文件,實(shí)際是個(gè)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.     //分配全局存儲(chǔ)空間       
  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; //圖片的真實(shí)寬度, 單位為英寸      
  179.     OLE_YSIZE_HIMETRIC hmHeight; //圖片的真實(shí)高度, 單位為英寸      
  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.     //將圖形輸出到屏幕上(有點(diǎn)像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. }   

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

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

導(dǎo)航

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

統(tǒng)計(jì)

常用鏈接

留言簿

隨筆分類

文章分類

文章檔案

搜索

最新評(pí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>
            国产精品99久久99久久久二8| 欧美日本在线观看| 欧美电影专区| 久久久国产一区二区三区| 午夜精品久久久久久久99热浪潮| 一区二区三区久久网| 亚洲欧美精品在线观看| 久久成人在线| 欧美成人精品一区| 亚洲福利精品| 欧美激情在线| 亚洲精品日韩一| 亚洲一区免费视频| 久久女同互慰一区二区三区| 欧美激情1区2区3区| 国产精品av免费在线观看| 国产精品午夜电影| 激情成人av在线| 亚洲精品免费在线观看| 亚洲欧美日韩精品久久奇米色影视| 欧美在线综合视频| 亚洲激情婷婷| 欧美一区二区三区喷汁尤物| 欧美精品成人91久久久久久久| 国产乱码精品一区二区三| 亚洲国产精品电影| 香蕉久久精品日日躁夜夜躁| 欧美激情欧美激情在线五月| 亚洲免费在线视频| 欧美片在线播放| 一区久久精品| 欧美一区影院| 亚洲精品在线免费| 久久久久国产精品人| 国产精品美女视频网站| 最新成人在线| 久久久久久久综合狠狠综合| 亚洲婷婷综合色高清在线| 久久久精彩视频| 欧美日韩国产区| 樱桃视频在线观看一区| 亚洲免费视频在线观看| 欧美18av| 欧美在线观看一区二区三区| 欧美系列电影免费观看| 亚洲精品在线一区二区| 蜜臀久久99精品久久久画质超高清 | 亚洲一区久久久| 欧美成人tv| 在线不卡欧美| 久久久久久久久久久成人| 一本色道久久88综合亚洲精品ⅰ| 暖暖成人免费视频| 国产一区二区看久久| 欧美综合国产| 欧美在线一二三区| 国产一区二区三区在线观看网站| 欧美亚洲一区二区在线| 亚洲性色视频| 国产精品久久久久久亚洲毛片 | 久久一区视频| 黄色一区二区在线| 久久野战av| 久久久久成人精品| 亚洲国产精品嫩草影院| 欧美第十八页| 麻豆精品传媒视频| 91久久久在线| 亚洲全部视频| 欧美日韩精品三区| 亚洲少妇自拍| 亚洲免费一在线| 国模精品一区二区三区色天香| 久久久国产精品一区二区三区| 久久激情一区| 亚洲第一网站| 亚洲精选在线观看| 国产精品九九| 性欧美video另类hd性玩具| 亚洲免费视频一区二区| 国产日韩一区欧美| 免费在线欧美视频| 欧美黑人一区二区三区| 亚洲一区二区三区视频播放| 一区二区精品| 国产一区二区三区在线观看免费视频| 久久久久久亚洲精品中文字幕| 久久久久九九九九| 在线亚洲自拍| 午夜视频一区二区| 亚洲电影免费观看高清完整版在线观看 | 欧美日韩亚洲国产精品| 一区二区三区毛片| 午夜精品久久久久久久久久久久| 影音先锋久久| 一区二区三区高清| 在线观看欧美日韩国产| 亚洲欧洲日本专区| 国产美女扒开尿口久久久| 欧美粗暴jizz性欧美20| 欧美日韩综合| 欧美福利视频网站| 国产亚洲第一区| 亚洲精品乱码久久久久| 国产一区二区黄| 一区二区三区视频观看| 亚洲福利视频一区| 亚洲一区二区三区精品在线| 亚洲高清三级视频| 亚洲影院色在线观看免费| 亚洲激情国产| 欧美一区二粉嫩精品国产一线天| 亚洲精品中文字| 久久久久99| 久久成人免费电影| 欧美日韩综合网| 欧美成人综合一区| 国产午夜精品在线| 亚洲欧美日韩国产一区二区三区| 亚洲美女诱惑| 久久久夜夜夜| 久久婷婷色综合| 国产精品久久中文| 一区二区av| 亚洲一区二区在线看| 欧美国内亚洲| 欧美成人一区二区在线| 亚洲成色www8888| 欧美在线一区二区三区| 亚洲自拍高清| 国产精品草草| 在线视频你懂得一区| 夜夜爽www精品| 欧美国产国产综合| 欧美国产一区二区| 最新国产精品拍自在线播放| 久久天堂av综合合色| 另类激情亚洲| 伊人精品视频| 久久久久天天天天| 免费不卡在线观看| 亚洲第一精品夜夜躁人人爽| 麻豆av一区二区三区久久| 蜜桃伊人久久| 亚洲国产精品久久久久秋霞不卡| 久久亚洲精品网站| 欧美大片一区| 一区二区高清在线| 国产精品福利在线| 亚洲男人的天堂在线| 久久久久久久一区二区| 伊人一区二区三区久久精品| 老鸭窝毛片一区二区三区| 欧美国产大片| 欧美激情亚洲自拍| 欧美精品色网| 一区二区三区免费网站| 在线亚洲自拍| 国产美女精品免费电影| 久久国产精品一区二区三区四区 | 亚洲国产精品传媒在线观看 | 国产农村妇女精品| 欧美亚洲综合另类| 久久久精品性| 亚洲国产色一区| 欧美日韩不卡| 亚洲欧美视频一区二区三区| 久久综合精品一区| 亚洲免费高清视频| 国产欧美三级| 免费在线欧美黄色| 亚洲一区二区高清| 欧美成人免费在线| 亚洲伊人色欲综合网| 精品电影一区| 欧美日韩一区视频| 久久精品免费| 正在播放欧美视频| 美女精品自拍一二三四| 亚洲一区二区三区免费观看| 伊人蜜桃色噜噜激情综合| 欧美理论在线播放| 欧美综合第一页| 99riav久久精品riav| 久久久亚洲精品一区二区三区| 99视频精品| 极品少妇一区二区三区| 欧美亚洲第一区| 嫩草国产精品入口| 欧美一级视频免费在线观看| 亚洲精品综合在线| 免费不卡欧美自拍视频| 欧美一区二区三区啪啪| 亚洲裸体视频| 影音先锋亚洲电影| 国产乱码精品一区二区三区五月婷 | 亚洲天堂av电影| 欧美国产一区视频在线观看| 久久高清福利视频| 午夜激情综合网|