• <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>

            yehao's Blog

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

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

            /************************************************************/
            VC IPicture
            顯示網(wǎng)絡(luò)圖片 顯示遠(yuǎn)程圖片 顯示URL指定的圖片 
            通過HTTP下載顯示圖片 顯示網(wǎng)上廣告圖片
            上面是我羅列的關(guān)鍵字,我找這個文章?lián)Q了好幾種關(guān)鍵字寫法,才找到,
            為了方便它人,我把關(guān)鍵字全部寫上。
            /************************************************************/
            文章很不錯,正好解決了我的問題。感謝作者。這是個用SDK(沒有使用MFC)開發(fā)的程序。
            如果對SDK開發(fā)方式不是很熟,只看ShowPic函數(shù)就以了。
            轉(zhuǎn)載文章,原文地址:http://www.blogjava.net/Unmi/archive/2007/12/02/164605.html
            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;   //實(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;                      //沒有額外的類內(nèi)存   
            42.     windclass.cbWndExtra = 0;                      //沒有額外的窗口內(nèi)存   
            43.        
            44.     windclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND; //使用預(yù)定義背景畫刷   
            45.        
            46.     //注冊這個窗口類,如果失敗直接退出程序    
            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ì)列投遞一個 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) 做默認(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)頁上圖片文件,實(shí)際是個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; //圖片的真實(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ǔ)充說明:
              原文的程序是使用SDK方式開發(fā)的,可能會有些人不習(xí)慣,我使用MFC方式驗(yàn)證調(diào)試了一下,效果還不錯。如需要源碼的,請到http://wallimn.ys168.com(我的網(wǎng)絡(luò)硬盤)下載。
              我的程序是個很簡單的程序,沒有考慮重繪、圖片大小的處理等問題,僅體現(xiàn)編程思想及方法。

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

            導(dǎo)航

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            統(tǒng)計(jì)

            常用鏈接

            留言簿

            隨筆分類

            文章分類

            文章檔案

            搜索

            最新評論

            午夜精品久久久久9999高清| 99久久国产综合精品五月天喷水| 66精品综合久久久久久久| 熟妇人妻久久中文字幕| 国内精品伊人久久久久妇| 中文字幕久久精品| 亚洲香蕉网久久综合影视| 欧美熟妇另类久久久久久不卡| 色综合久久无码五十路人妻| 亚洲精品乱码久久久久久中文字幕| 精品一二三区久久aaa片| 97精品国产97久久久久久免费| 久久精品国产99久久久古代| 伊人热热久久原色播放www| 日韩久久无码免费毛片软件| 热久久最新网站获取| 久久久精品人妻一区二区三区蜜桃 | 久久国产精品久久国产精品| 九九99精品久久久久久| 国产免费久久精品丫丫| 99久久这里只精品国产免费| 无码人妻久久一区二区三区免费丨 | 一本色综合久久| 久久精品午夜一区二区福利| 久久国产乱子精品免费女| 久久精品国产色蜜蜜麻豆| 亚洲人成伊人成综合网久久久| 久久国产色AV免费观看| 久久国产成人精品国产成人亚洲| 狠狠色丁香婷婷久久综合五月| 精品久久一区二区| 性高湖久久久久久久久AAAAA| 久久精品aⅴ无码中文字字幕重口| 伊人久久大香线焦综合四虎| 久久精品免费一区二区| 亚洲国产精品久久久久| 亚洲AV乱码久久精品蜜桃| 久久亚洲中文字幕精品一区| 久久精品国产91久久麻豆自制| 久久久久久久91精品免费观看| 免费观看成人久久网免费观看|