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

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 厚積薄發 閱讀(636) 評論(0)  編輯 收藏 引用 所屬分類: Windows編程

導航

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

統計

常用鏈接

留言簿

隨筆分類

文章分類

文章檔案

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲国产精品美女| 久久一区中文字幕| 亚洲欧美日韩精品久久亚洲区| 亚洲午夜激情免费视频| 亚洲综合电影一区二区三区| 久久精品国产综合| 欧美日韩国产在线观看| 亚洲经典三级| 一二三区精品| 性欧美超级视频| 欧美xx69| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美在线关看| 国产精品捆绑调教| 亚洲人成77777在线观看网| 午夜精品999| 亚洲人成高清| 亚洲中午字幕| 亚洲成在人线av| 亚洲一区二区免费视频| 国产麻豆午夜三级精品| 一区二区三区国产精华| 免费成人网www| 久久精品99无色码中文字幕| 欧美天堂在线观看| 亚洲精品黄色| 亚洲国产cao| 老司机精品视频网站| 国产一区二区三区在线观看视频| 亚洲一区二区四区| 日韩视频免费观看高清完整版| 久久精品亚洲一区| 亚洲午夜精品一区二区三区他趣| 欧美一级大片在线免费观看| 国产精品久久久久久久一区探花| 免费久久精品视频| 国产精品久久久久久久免费软件 | 国产精品尤物| 亚洲人成网站在线观看播放| 国产日产欧产精品推荐色| 午夜精品久久久久久久99热浪潮| 久久天堂国产精品| 久久精品亚洲热| 最新亚洲视频| 欧美日韩一区二区精品| 亚洲一区精彩视频| 欧美极品欧美精品欧美视频| 亚洲毛片网站| 亚洲网站啪啪| 一区二区三区久久久| 玖玖玖国产精品| 久久这里有精品视频| 久久九九免费视频| 欧美一区二区三区免费观看视频 | 午夜精品久久久久影视| 99成人在线| 亚洲小少妇裸体bbw| 99视频精品全国免费| 麻豆亚洲精品| 亚洲一区中文| 国产精品第13页| 久久久久**毛片大全| 国产美女一区二区| 午夜视频在线观看一区| 在线观看日韩av先锋影音电影院| 欧美高清在线视频| 欧美精品日韩三级| 亚洲精品日韩一| 国产午夜精品一区理论片飘花| 久久青青草综合| 欧美精品一区在线观看| 久久av最新网址| 欧美屁股在线| 99精品视频免费观看| 国产毛片久久| 久久精品国产第一区二区三区| 欧美一区二区免费观在线| 国产人妖伪娘一区91| 久久精品亚洲乱码伦伦中文| 免费成人高清视频| 亚洲卡通欧美制服中文| 欧美视频导航| 欧美一区二区观看视频| 免费亚洲一区二区| 在线视频欧美日韩| 国产精品热久久久久夜色精品三区| 久久综合一区| 国产精品视频不卡| 久久国产一区| 亚洲日本免费| 久久成人av少妇免费| 精品成人国产在线观看男人呻吟| 日韩亚洲欧美一区二区三区| 亚洲欧美综合精品久久成人| 国产私拍一区| 欧美激情免费观看| 午夜国产精品视频| 免费亚洲婷婷| 午夜精品久久久久久久久久久久久 | 玖玖玖国产精品| av成人毛片| 国模吧视频一区| 亚洲欧美日韩一区在线观看| 免费日韩av片| 性感少妇一区| 亚洲日本aⅴ片在线观看香蕉| 国产精品h在线观看| 妖精成人www高清在线观看| 久久久久久久久久久久久女国产乱 | 欧美色欧美亚洲另类二区| 欧美中文字幕久久| 99热在线精品观看| 欧美二区在线| 欧美自拍丝袜亚洲| 一区二区三区视频在线| 尤物精品在线| 国产欧美一二三区| 欧美视频在线观看 亚洲欧| 久久亚洲综合网| 午夜日韩电影| 亚洲午夜精品国产| 亚洲精品少妇30p| 欧美激情第9页| 亚洲人体影院| 国内精品视频666| 国产精品亚洲综合天堂夜夜| 欧美精品成人一区二区在线观看| 久久精品国产一区二区三区免费看| 9i看片成人免费高清| 亚洲经典在线| 亚洲第一毛片| 欧美高清视频一区| 久热精品视频在线观看一区| 久久精品99久久香蕉国产色戒| 在线视频亚洲一区| 一区二区三区回区在观看免费视频| 在线观看亚洲视频| 久久久夜色精品亚洲| 欧美 日韩 国产 一区| 久久动漫亚洲| 久久久久久久久综合| 欧美一区二区| 久久精品国产77777蜜臀| 亚洲欧美视频一区二区三区| 亚洲午夜久久久久久久久电影网| 一本色道久久88综合日韩精品| 91久久在线播放| 亚洲狼人综合| 在线亚洲一区二区| 亚洲欧美日韩综合| 在线观看91精品国产麻豆| 狠狠色香婷婷久久亚洲精品| 欧美日韩伦理在线免费| 欧美日本不卡| 国产精品久久久久久久久久直播 | 欧美另类变人与禽xxxxx| 欧美电影免费观看高清| 亚洲男人第一av网站| 亚洲欧美日韩国产精品| 欧美一区二区三区免费在线看| 欧美在线国产精品| 久久最新视频| 欧美精品一区视频| 国产精品久久久久影院色老大 | 国产精品久久看| 国产日韩久久| 在线观看一区视频| 99精品黄色片免费大全| 欧美一级理论片| 老司机久久99久久精品播放免费| 欧美大片在线观看| 这里只有视频精品| 亚洲黄色片网站| 亚洲一二三区视频在线观看| 欧美在线你懂的| 欧美精品亚洲二区| 国产欧美日韩在线视频| 亚洲区在线播放| 欧美伊人久久| 亚洲国产成人在线视频| 亚洲一级黄色av| 免费成人黄色| 国产嫩草影院久久久久| 亚洲人成网站777色婷婷| 欧美怡红院视频| 亚洲国产综合在线| 亚洲破处大片| 欧美在线免费| 欧美视频一区二区三区…| 伊人影院久久| 欧美一区二区三区四区在线观看| 欧美顶级艳妇交换群宴| 亚洲欧美日韩在线一区| 欧美精品性视频| 1000部国产精品成人观看| 亚洲欧美日韩中文视频| 亚洲人体1000| 久久综合电影| 红桃视频欧美| 久久精品国产欧美激情|