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

            山寨:不是最好的,是最適合我們的!歡迎體驗山寨 中文版MSDN

            Blog @ Blog

            當華美的葉片落盡,生命的脈絡才歷歷可見。 -- 聶魯達

            常用鏈接

            統計

            積分與排名

            BBS

            Blog

            Web

            最新評論

            vc picture控件使用

            vc picture控件的分類進行總結,
            (
            ) 非動態顯示圖片(即圖片先通過資源管理器載入,有一個固定ID)
            (
            ) 動態載入圖片(即只需要在程序中指定圖片的路徑即可載入)
            為方便說明,我們已經建好一個基于對話框的工程,名為Ttest.
            對話框類為CTestDlg
            (
            )   vc picture控件非動態載入圖片.
            方法1.先從最簡單的開始,picture 控件來實現.
            步驟:
            先在資源里Import一張圖片,IDIDB_BITMAP2
            然后在對話框上添加一個picture控件,右鍵點擊打開屬性,
            type下拉框選擇BITMAP,緊跟著下面就出現一個Image下拉框,
            拉開就會看到所有已經載入好的圖片,
            選擇你要的圖片.運行程序即可看到.

             

            方法2vc picture控件.通過背景圖
            同樣如上,先載入一張圖片,IDIDB_BITMAP2
            TestDlg.h
            CBrush m_brBk;//在public中定義
            TestDlg.cpp
            在初始化函數OnInitDialog()中加入:
            BOOL CTestDlg::OnInitDialog()
            {
                CDialog::OnInitDialog();
                CBitmap bmp;
                bmp.LoadBitmap(IDB_BITMAP2);
                m_brBk.CreatePatternBrush(
            &bmp);
                bmp.DeleteObject();
                
            return TRUE;   // return TRUE   unless you set the focus to a control
            }


            在打開類向導,找到WM_CTLCOLOR消息,重載得對應函數OnCtlColor(),添加如下:
            HBRUSH   CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
            {
                HBRUSH hbr 
            = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
                
            if (pWnd == this)
                
            {
                    
            return m_brBk;
                }

                
            return hbr;
            }

            ()   vc picture控件動態載入圖片.
            方法3 圖像控件(本例用KoDak 圖像編輯控件)
            1.  
            首先應該保證系統中有這個控件。注意,它不能單獨使用,必須和其他幾個控件(特別是Imgcmn.dll)一同使用。如果沒有,從別的機器上copy過來即可。這幾個文件是Imgadmin.ocxImgcmn.dllImgedit.ocxImgscan.ocxImgshl.dll Imgthumb.ocxImgutil.dll,把它們copywindows\system目錄下,然后用regsvr32.exe將它們分別注冊。
            2.  
            打開工程,進入資源管理器,在對話框上單擊右鍵,單擊Insert Activex control… 選擇Kodak圖象編輯控件,大小任意。
            3.  
            在對話框上選中該控件,為其添加變量:m_ctrlPicture。。
            4.  
            BOOL CTestDlg::OnInitDialog()添加如下:

            BOOL CTestDlg::OnInitDialog()
            {
                CDialog::OnInitDialog();
                m_ctrlPicture.SetImage(
            "aa.jpg");   //保證圖像在工程目錄下,也可以寫絕對路徑
                m_ctrlPicture.Display();
                
            return TRUE;   // return TRUE unless you set the focus to a control
                
            // EXCEPTION: OCX Property Pages should return FALSE
            }

            編譯運行就OK,此種方法的好處就是可能針對多種圖像格式.

             

            方法4 vc picture控件通過CBitmap,HBITMAP,直接用OnPaint()繪制
            首先在CTestDlg類中聲明一個變量:   CBitmap   m_bmp;
            然后我們在對話框中加入一個picture 標簽,名為IDC_STATIC1
            然后:
            BOOL CDisplayPic::OnInitDialog()
            {
                CDialog::OnInitDialog();
                
            if( m_bmp.m_hObject != NULL )//判斷
                    m_bmp.DeleteObject();
                
            /////////載入圖片
                HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
                    
            "c:\\aaa.bmp", IMAGE_BITMAP, 00, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
                
            if( hbmp == NULL )
                    
            return FALSE;
                
            ///////////////////////該斷程序用來取得加載的BMP的信息////////////////////////
                m_bmp.Attach( hbmp );
                DIBSECTION ds;
                BITMAPINFOHEADER 
            &bminfo = ds.dsBmih;
                m_bmp.GetObject( 
            sizeof(ds), &ds );
                
            int cx=bminfo.biWidth;   //得到圖像寬度
                int cy=bminfo.biHeight; //得到圖像高度
                //////////////////////////////////////////////////
                
            /////////////得到了圖像的寬度和高度后,我們就可以對圖像大小進行適應,即調整控件的大小,讓它正好顯示一張圖片///////////////////////////

                CRect rect;
                GetDlgItem(IDC_STATIC1)
            ->GetWindowRect(&rect);
                ScreenToClient(
            &rect);
                GetDlgItem(IDC_STATIC1)
            ->MoveWindow(rect.left,rect.top,cx,cy,true);//調整大小
                return TRUE;   // return TRUE unless you set the focus to a control
                
            // EXCEPTION: OCX Property Pages should return FALSE
            }
            圖片加載成功了,標簽大小也適應了,下面就是繪制繪制圖像了,打開類向導,重載WM_PAINT消息
            void CDisplayPic::OnPaint()
            {
                
            //////////////以下三種情況任選一種會是不同效果(只能一種存在)///////////
                //CPaintDC dc(this);     //若用此句,得到的是對話框的DC,圖片將被繪制在對話框上.
                CPaintDC dc(GetDlgItem(IDC_STATIC1)); //用此句,得到picture控件的DC,圖像將被繪制在控件上 
                
            //   CDC dc;
                
            //   dc.m_hDC=::GetDC(NULL);   //若用此兩句,得到的是屏幕的DC,圖片將被繪制在屏幕上///////////////////////////////////////////////////////
                CRect rcclient;
                GetDlgItem(IDC_STATIC1)
            ->GetClientRect(&rcclient);
                CDC memdc;
                memdc.CreateCompatibleDC(
            &dc); 
                CBitmap bitmap;
                bitmap.CreateCompatibleBitmap(
            &dc, rcclient.Width(), rcclient.Height());
                memdc.SelectObject( 
            &bitmap );
                CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 
            0);
                CDC maskdc;
                maskdc.CreateCompatibleDC(
            &dc);
                CBitmap maskbitmap;
                maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 
            11, NULL);
                maskdc.SelectObject( 
            &maskbitmap );
                maskdc.BitBlt( 
            00, rcclient.Width(), rcclient.Height(), &memdc,
                    rcclient.left, rcclient.top, SRCCOPY);
                CBrush brush;
                brush.CreatePatternBrush(
            &m_bmp);
                dc.FillRect(rcclient, 
            &brush); 
                dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
                    
            &memdc, rcclient.left, rcclient.top,SRCPAINT);
                brush.DeleteObject();
                
            // Do not call CDialog::OnPaint() for painting messages
            }

            以上四種方法唯有KoDak可以支持多種圖像,其它的只支持BMP


            posted on 2008-06-16 15:08 isabc 閱讀(1837) 評論(3)  編輯 收藏 引用 所屬分類: 控件操作

            評論

            # re: vc picture控件使用 2008-06-16 16:08 isabc

            在以前版本的Windows 98/2000中,集成了柯達公司的圖像處理程序,但從Windows XP開始微軟將其丟了出去,換成了“Windows圖片和傳真查看器”,如果你想找回原來的圖像處理程序,那么首先要準備Windows 2000安裝光盤,然后從中復制以下文件:OCKODAK.DLL、OIENG400.DLL、OIPRT400.DLL、OISLB400.DLL、OISSQ400.DLL、OITWA400.DLL、OIUI400.DLL、IMGCMN.DLL、IMGADMIN.OCX、IMGEDIT.OCX、IMGSCAN.OCX、IMGTHUMB.OCX,需要注意的是,這些文件可能被壓縮為“**_”格式,你可以使用WinZip進行解壓縮。
            如果只有Windows 98安裝光盤,那么除復制上述文件外,還要復制OIADM400.DLL、OICOM400.DLL、OIDIS400.DLL、OIFIL400.DLL、 OIGFS400.DLL、IMGSHL.DLL、IMGOCXD.HLP,并將它們放置到Windows\System32文件夾中。
            接下來就要注冊那些OCX文件,按下Win+R組合鍵打開“運行”窗口,輸入:regsvr32 imgadmin.ocx,同樣方法注冊imgedit.ocx、imgscan.ocx和imgthumb.ocx,接下來就可以運行柯達圖像處理工具。  回復  更多評論   

            # re: vc picture控件使用 2008-07-18 11:31 xidechuan

            這們朋友,你寫的很好,我現在正在用VC做幼兒軟件,
            能交個朋友嗎,QQ695555872  回復  更多評論   

            # re: vc picture控件使用 2008-08-27 17:43 劉卓嶺

            挺好!  回復  更多評論   

            廣告信息(免費廣告聯系)

            中文版MSDN:
            歡迎體驗

            久久99久久成人免费播放| 亚洲AV无码一区东京热久久| 亚洲午夜久久久影院伊人| 国产69精品久久久久APP下载| 亚洲精品NV久久久久久久久久| 久久精品免费一区二区| 婷婷久久香蕉五月综合加勒比| 99精品伊人久久久大香线蕉| 性高朝久久久久久久久久| 97精品依人久久久大香线蕉97| 99久久无色码中文字幕| 久久中文精品无码中文字幕| 久久精品99久久香蕉国产色戒| 久久夜色精品国产www| 久久狠狠高潮亚洲精品| 欧美激情一区二区久久久| 性高朝久久久久久久久久| 日日狠狠久久偷偷色综合0| 精品国产一区二区三区久久久狼 | 国内精品久久人妻互换| 久久久久亚洲av成人无码电影| 久久青青草原亚洲av无码app| 欧美麻豆久久久久久中文| 久久99精品综合国产首页| 欧洲人妻丰满av无码久久不卡| 色综合久久88色综合天天 | 99国内精品久久久久久久| 久久777国产线看观看精品| 精品国产青草久久久久福利| 久久只这里是精品66| 一极黄色视频久久网站| 久久这里的只有是精品23| 一极黄色视频久久网站| 香蕉99久久国产综合精品宅男自 | 久久精品国产免费观看| 久久精品国产亚洲一区二区三区| 一级做a爱片久久毛片| 亚洲国产精品婷婷久久| 成人精品一区二区久久 | 亚洲精品无码久久不卡| 日韩AV毛片精品久久久|