對話框設(shè)置位圖背景并透明控件.doc_第1頁
對話框設(shè)置位圖背景并透明控件.doc_第2頁
對話框設(shè)置位圖背景并透明控件.doc_第3頁
對話框設(shè)置位圖背景并透明控件.doc_第4頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、使用OnEraseBkgnd函數(shù)實(shí)現(xiàn)對話框位圖背景(CABoutDialog_WM_ERASEBKGN_MDI Child Frame)BOOL CDisplayBmpBackGroundDlg:OnEraseBkgnd(CDC *pDC)CRect rect;GetClientRect(&rect); CBitmap m_pBmp;BITMAP bm;CDC dcMem;m_pBmp.LoadBitmap(IDB_BITMAP1);m_pBmp.GetBitmap(&bm);/得到位圖尺寸dcMem.CreateCompatibleDC(pDC);CBitmap* pOldBitmap = dcMem.SelectObject(&m_pBmp);pDC-SetStretchBltMode(COLORONCOLOR);/這個(gè)模式不設(shè)置的話會導(dǎo)致圖片嚴(yán)重失真pDC-StretchBlt(0,0,rect.Width() ,rect.Height(),&dcMem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);dcMem.SelectObject(pOldBitmap); return TRUE;到這里就可以實(shí)現(xiàn)位圖了,但STATIC控件背景不透明,顯得很難看。2、來我們讓STATIC控件透明吧HBRUSH CDisplayBmpBackGroundDlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) if(nCtlColor = CTLCOLOR_DLG | nCtlColor = CTLCOLOR_BTN | nCtlColor = CTLCOLOR_STATIC) pDC-SetBkMode(TRANSPARENT); return HBRUSH(GetStockObject(HOLLOW_BRUSH);到這里其實(shí)就可以了,BMP的圖片背景實(shí)現(xiàn)了,文本框的透明也實(shí)現(xiàn)了。3、補(bǔ)充說明:如果程序運(yùn)行過程中,需要設(shè)置文本框的字體的話,會出現(xiàn)顯示字體重疊不刷新的問題4、這就要對該控件或者對話框處理了,要刷出新字體來。CWnd* pWnd = GetDlgItem(IDC_STATIC1);pWnd-SetWindowText();/需要修改的控件標(biāo)題/這里可以刷整個(gè)對話框,但如果較頻繁的話,很明顯能看出來,就選擇刷顯示字體的那塊區(qū)域就可以了pWnd -GetParent()-InvalidateRect(CRect(0,0,100,50),TRUE); Static控件背景透明時(shí)文字覆蓋問題的解決方案HateMath引子: 我泡論壇的時(shí)間并不長,但印象中已經(jīng)有好多次在VC區(qū)看到類似這樣的問題,而且經(jīng)常議之未果:請問static控件設(shè)置透明后,再更改文字時(shí)會與之前的文字覆蓋,怎么解決 用pDC-SetBkMode(TRANSPARENT);設(shè)置透明后,要改變控件的文字就會發(fā)生文字重疊,如果不使用透明就不會,請問在透明狀態(tài)下改變文字如何不發(fā)生重疊?起初不以為意,閑暇時(shí)自己試了一下,發(fā)現(xiàn):文本確實(shí)有重疊。如下圖(為了更好的說明問題,我特意設(shè)置了背景和前景色): 初步探究其原因,猜想應(yīng)該是static控件的背景沒有得到及時(shí)刷新。那就好辦了,解決辦法:強(qiáng)制刷新。方法1:GetDlgItem(IDC_STATIC)-UpdateWindow();無效.方法2:GetDlgItem(IDC_STATIC)- RedrawWindow();無效.方法3:GetDlgItem(IDC_STATIC)- Invalidate ();無效.方法4:還不行?來點(diǎn)小技巧SetDlgItemText(IDC_STATIC, );/多用幾個(gè)空格,把原先的文本”沖”掉SetDlgItemText(IDC_STATIC, TEST);郁悶了.難道這么個(gè)小問題要用高級的方法搞?這個(gè)問題困擾了我好幾天,終于在一次上WC時(shí)突然頓悟:static的背景已經(jīng)是透明的了,那么殘留的文本應(yīng)該是畫在static的父窗口上的。頓悟之后就是感嘆:自己真笨啊。辦法有了:在給static設(shè)置新的文本之后(不是之前!)刷新父窗口。void CTestStaticDlg:OnTimer(UINTnIDEvent)CStringstrTime;CTime time =CTime:GetCurrentTime();strTime =time.Format(%y年%m月%d日%H:%M:%S);GetDlgItem(IDC_STATIC)-SetWindowText(str

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論