



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、MFC 中 picture 控件顯示圖片 .docPictureBox控件的主要作用是為用戶顯示圖片。實(shí)際顯示圖片由Picture屬性決定。 Picture 屬性包括被顯示的圖片的文件名(及可選的路徑名)。注意窗體對(duì)象也具有Picture屬性,通過設(shè)置該屬性可直接在窗體背景上顯示圖片。要在運(yùn)行時(shí)顯示或替換圖片,可利用函數(shù)LoadPicture來設(shè)置Picture屬性。提供圖片文件名和可選路徑名,由LoadPicture函數(shù)處理加載和顯示圖片的細(xì)節(jié)。picMain.Picture = LoadPicture(VANGOGH.BMP)PictureBox控件具有AutoSize屬性,當(dāng)該屬性設(shè)置為
2、True時(shí), PictureBox能自動(dòng)調(diào)整大小與顯示的圖片匹配。如果要用AutoSize 屬性設(shè)置為True 的 PictureBox,設(shè)計(jì)窗體時(shí)就需要特別小心。圖片將不考慮窗體上的其它控件而調(diào)整大小,這可能導(dǎo)致意想不到的后果,如覆蓋其它控件。設(shè)計(jì)時(shí)應(yīng)通過加載每一幅圖片來檢查是否有這種現(xiàn)象發(fā)生。vc picture 控件的分類進(jìn)行拉總結(jié) ,( 一 )非動(dòng)態(tài)顯示圖片 ( 即圖片先通過資源管理器載入, 有一個(gè)固定 ID)( 二 )動(dòng)態(tài)載入圖片 ( 即只需要在程序中指定圖片的路徑即可載入)為方便說明 , 我們已經(jīng)建好一個(gè)基于對(duì)話框的工程, 名為 Ttest.對(duì)話框類為 CTestDlg( 一 )
3、vc picture控件非動(dòng)態(tài)載入圖片 .方法 1. 先從最簡單的開始, 用 picture 控件來實(shí)現(xiàn) .步驟 :先在資源里 Import一張圖片 ,ID 為 IDB_BITMAP2,然后在對(duì)話框上添加一個(gè)picture 控件 , 右鍵點(diǎn)擊打開屬性 , 將 type 下拉框選擇 BITMAP,緊跟著 Image 下面就出現(xiàn)一個(gè)下拉框, 拉開就會(huì)看到所有已經(jīng)載入好的圖片 , 選擇你要的圖片 . 運(yùn)行程序即可看到 .方法 2vc picture控件 . 通過背景圖同樣如上 , 先載入一張圖片,ID 為 IDB_BITMAP2TestDlg.h中CBrush m_brBk;/在 public中定義
4、TestDlg.cpp中在初始化函數(shù)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在打開類向?qū)? 找到 WM_CTLCOLOR消息 , 重載得對(duì)應(yīng)函數(shù)OnCtlColor(),添加如下 :HBRU
5、SH CTestDlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)HBRUSH hbr = CDialog:OnCtlColor(pDC, pWnd, nCtlColor);if (pWnd = this)return m_brBk;return hbr;第1頁共5頁MFC 中 picture 控件顯示圖片 .doc( 二 ) vc picture控件動(dòng)態(tài)載入圖片.方法 3 圖像控件 ( 本例用 KoDak 圖像編輯控件)1.首先應(yīng)該保證系統(tǒng)中有這個(gè)控件。注意,它不能單獨(dú)使用,必須和其他幾個(gè)控件(特別是Imgcmn.dll)一同使用。如果沒
6、有,從別的機(jī)器上 copy 過來即可。這幾個(gè)文件是 Imgadmin.ocx ,Imgcmn.dll ,Imgedit.ocx , Imgscan.ocx , Imgshl.dll , Imgthumb.ocx , Imgutil.dll ,把它們 copy 到 windows/system 目錄下,然后用 regsvr32.exe 將它們分別注冊(cè)。2.打開工程 , 進(jìn)入資源管理器 , 在對(duì)話框上單擊右鍵,單擊Insert Activex control選擇 Kodak 圖象編輯控件,大小任意。3.在對(duì)話框上選中該控件,為其添加變量:m_ctrlPicture。4.在 BOOL CTestDl
7、g:OnInitDialog()添加如下 :BOOL CTestDlg:OnInitDialog()CDialog:OnInitDialog();m_ctrlPicture.SetImage(aa.jpg); / 保證圖像在工程目錄下 , 也可以寫絕對(duì)路徑 m_ctrlPicture.Display();return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE編譯運(yùn)行就OK了 , 此種方法的好處就是可能針對(duì)多種圖像格式.
8、方法 4 vc picture 控件通過 CBitmap,HBITMAP, 直接用 OnPaint() 繪制首先在 CTestDlg 類中聲明一個(gè)變量 : CBitmap m_bmp;然后我們?cè)趯?duì)話框中加入一個(gè) picture 標(biāo)簽 , 名為 IDC_STATIC1 然后 :BOOL CDisplayPic:OnInitDialog()CDialog:OnInitDialog();if( m_bmp.m_hObject != NULL )/判斷m_bmp.DeleteObject();/載入圖片HBITMAP hbmp = (HBITMAP):LoadImage(AfxGetInstanceH
9、andle(),c:/aaa.bmp, IMAGE_BITMAP, 0, 0, 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; /得到圖像高度/ /得
10、到了圖像的寬度和高度后, 我們就可以對(duì)圖像大小進(jìn)行適應(yīng), 即調(diào)整控件的大小, 讓它正好顯示一張圖片/CRect rect;GetDlgItem(IDC_STATIC1)-GetWindowRect(&rect);ScreenToClient(&rect);第2頁共5頁MFC 中 picture 控件顯示圖片 .docGetDlgItem(IDC_STATIC1)-MoveWindow(rect.left,rect.top,cx,cy,true);/調(diào)整大小return TRUE; / return TRUE unless you set the focus to a control / EXC
11、EPTION: OCX Property Pages should return FALSE圖片加載成功了, 標(biāo)簽大小也適應(yīng)了, 下面就是繪制繪制圖像了, 打開類向?qū)?, 重載 WM_PAINT消息void CDisplayPic:OnPaint()/以下三種情況任選一種會(huì)是不同效果( 只能一種存在 )/CPaintDC dc(this); /若用此句 , 得到的是對(duì)話框的DC,圖片將被繪制在對(duì)話框上.CPaintDC dc(GetDlgItem(IDC_STATIC1); /用此句 , 得到 picture控件的 DC,圖像將被繪制在控件上/ CDC dc;/ dc.m_hDC=:GetDC
12、(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
13、.m_hDC , 0);CDC maskdc;maskdc.CreateCompatibleDC(&dc);CBitmap maskbitmap;maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);maskdc.SelectObject( &maskbitmap );maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc, rcclient.left, rcclient.top, SRCCOPY);CBrush brush;br
14、ush.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基于 MFC控件 STATIC 顯示圖片數(shù)據(jù)1. 在 OnInitDialog中加入
15、 GetDlgItem(IDC_MY_PIC)-ModifyStyle ( SS_TYPEMASK, SS_OWNERDRAW );2. 在 butto 按鈕中加入以下,可以顯示多中類型的圖片資源void CDlgpicDlg:OnTest()/ TODO: Add your command handler code here CFileDialog fileDlg(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT,_T(Picture Files (*.bmp *.ico *.jpg)|*bmp;*.ico;*jpg|All Files (*.*)|*.*|), Afx
16、GetMainWnd();第3頁共5頁MFC 中 picture 控件顯示圖片 .docCString pathName;if(fileDlg.DoModal ()=IDOK)POSITION mPos=fileDlg.GetStartPosition();while(mPos!=NULL)pathName=fileDlg.GetNextPathName(mPos);if(m_pict.LoadPicture(pathName.GetBuffer(pathName.GetLength()/ 防止有透明圖片,消除已有的圖片信息CPaintDC dc(this); / device context
17、 for paintingCRect rc;GetDlgItem(IDC_MY_PIC)-GetWindowRect(&rc);dc.FillSolidRect(rc, RGB(0, 0, 0);Invalidate();3. 給父窗口增加ON_WM_DRAWITEM消息映射函數(shù)在 OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCTlpDrawItemStruct)消息映射函數(shù)里面繪制控件void CDlgpicDlg:OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)/ TODO: Add your
18、message handler code here and/or call default if(nIDCtl = IDC_MY_PIC)if ( m_pict.m_pic)RECT rect;TRACE(-hell- test-);HWND hwnd = :GetDlgItem(this-GetSafeHwnd(), IDC_MY_PIC);HDC hDC = :GetDC(:GetDlgItem(this-GetSafeHwnd(),IDC_MY_PIC);/Get the DC for the CPicture Box:GetClientRect(:GetDlgItem(this-Get
19、SafeHwnd(), IDC_MY_PIC), &rect);/Get dimensions of itm_pict.DrawPicture(hDC, 0, 0, rect.right - rect.left ,rect.bottom - rect.top ); :ReleaseDC(:GetDlgItem(this-GetSafeHwnd(),IDC_MY_PIC), hDC);CDialog:OnDrawItem(nIDCtl, lpDrawItemStruct);總結(jié):如果在static中需要顯示圖片,在ONPAINT 中繪畫沒有效果,需要這么畫:1)給 static控件增加 SS_OWNERDRAW屬性 GetDlgItem(IDC_MY_PIC)-ModifyStyle ( SS_TYPEMASK,SS_OWNERDRAW );2)給父窗口增加ON_WM_DRAWITEM消息映射函數(shù)3)在 OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemSt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司用員工合同范例
- 共同買房協(xié)議合同范例
- 教育生態(tài)學(xué)視角下的摩爾多瓦中學(xué)生漢語課堂問題行為及對(duì)策研究
- 作物秸稈加工銷售合同范例
- 個(gè)人聘請(qǐng)會(huì)計(jì)合同范例
- 書代理出版合同范例
- 個(gè)體店面員工合同范例
- 公司月結(jié)協(xié)議合同范例
- 會(huì)務(wù)承辦合同范例
- 倉庫貸款合同范例
- 《短視頻拍攝與制作》課件-4.短視頻后期制作- 剪輯技巧
- 中考英語不規(guī)則動(dòng)詞變化表
- 事業(yè)單位工作人員調(diào)動(dòng)申報(bào)表
- 小學(xué)科學(xué)教師培訓(xùn)講座
- 電子陶瓷材料與器件制備
- 老年患者出院準(zhǔn)備服務(wù)專家共識(shí)
- 巖腳煤礦智能化綜采工作面匯報(bào)材料2020.11.10.11.10
- 四川省廣安市2021年中考地理真題(含答案)
- 大貨車安全駕駛技巧
- 高考小說閱讀強(qiáng)化訓(xùn)練:孫犁小說專題(附答案解析)
- 互聯(lián)網(wǎng)汽車金融外文文獻(xiàn)翻譯
評(píng)論
0/150
提交評(píng)論