日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC实现在ListBox中选择背景位图

發(fā)布時間:2025/3/15 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC实现在ListBox中选择背景位图 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

VC實現(xiàn)在ListBox中選擇背景位圖
本文介紹如何在ListBox中添加更換背景位圖,并提供源代碼供參考。本文源代碼運行效果圖如下:

?

  一、基本原理:

  構(gòu)造一個LISTBOX的子類CMYLISTBOX,在刷新背底的時候,選擇背景位圖。此時需要設置背景模式為透明,當你在其上寫入文字的時候,文字背底就不會變白色,而是背景色;刷子也必須是空的,這樣每次刷新的后,背景就不會改變。

  其中特別需要注意的是,當你的LISTBOX出現(xiàn)了滾動條的時候需要重新設置背底位圖的尺寸的大小,減去相應的滾動條區(qū)域,否則,底圖會把滾動條覆蓋。

  二、實現(xiàn)代碼

  下面把CMYLISTBOX類幾個重載函數(shù)再說明一下:

//當你選擇的ITEM變化時刷新;

void CMyListBox::OnSelchange()
{
iSelectChange = TRUE;
}

void CMyListBox::OnLButtonDown(UINT nFlags, CPoint point)
{
if(iSelectChange)
{
iSelectChange= FALSE;
Invalidate();
}
CListBox::OnLButtonDown(nFlags, point);
}

//設置畫刷,背景模式,文字顏色HBRUSH CMyListBox::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT); //設置背景模式透明
pDC->SetTextColor(RGB(64,32,0));//設置文字顏色;
return m_brHollow; //設置空心畫刷;
}
//在垂直滾動時刷新;void CMyListBox::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
Invalidate();
CListBox::OnVScroll(nSBCode, nPos, pScrollBar);
}
//在水平滾動時刷新;void CMyListBox::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
Invalidate();
CListBox::OnHScroll(nSBCode, nPos, pScrollBar);
}

//將背景位圖畫出來; BOOL CMyListBox::OnEraseBkgnd(CDC* pDC)
{
BITMAP bm;
m_bmp.GetBitmap(&bm);
m_pbmCurrent = &m_bmp;
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dcMem.SelectObject(m_pbmCurrent);
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pOldBitmap);
return CListBox::OnEraseBkgnd(pDC);
}

  對于背景位圖的大小,我們事先先判斷一下區(qū)域大小;

m_listbox.GetClientRect(LPRECT);

  然后判斷如果需要更改背景位圖大小的話,可以調(diào)用HBITMAP CMylistboxDlg::GetSizeBITMAP(HBITMAP hBitmap, int w, int h)函數(shù),這個函數(shù)可以根據(jù)把你的HBITMAP減切至適當大小(w,h)。具體一些其它函數(shù)就不一一介紹。

  說明,可能有人通過對LISTBOX的DRAWITEM函數(shù)進行重載,實現(xiàn)的方法與此方法原理不同,每個ITEM都是畫出來的,不是作為一個整體,所以其在刷新的時候可能會慢一點,但或許程序界面的抖動會少些。

  代碼我已經(jīng)整理了一遍,可能還可以部分優(yōu)化,如果有興趣可以可以在下面留言探討。

總結(jié)

以上是生活随笔為你收集整理的VC实现在ListBox中选择背景位图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。