自绘Tabctrl标签的位图问题

jsqf1014 2008-07-07 05:13:30
tab是自绘的,现在我想在tab标签上加位图
发现之前的方法不管用了
只出现一个16*16的空位置。

int i = 0;
int i_count = 3;
HICON m_icon[4];

m_icon[0] = AfxGetApp()->LoadIcon(IDI_ICON6);
m_icon[1] = AfxGetApp()->LoadIcon(IDI_ICON7);

CImageList* m_imagelist = new CImageList;
m_imagelist->Create(16,16,0,7,7);
m_imagelist->SetBkColor (RGB(255,255,255));

for(int n=0;n<i_count;n++)
{
m_imagelist->Add(m_icon[n]); //把图标载入图像列表控件
}
m_tab.SetImageList(m_imagelist);

m_tab.InsertItem(0,"tab1",0);
m_tab.InsertItem(1,"tab2",1);


是重画的时候让背景覆盖掉了吗?
不知道要怎么去实现这个位图的功能呢
请达人指点撒

亿分感谢!!
...全文
171 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
rocker9527 2008-07-07
  • 打赏
  • 举报
回复
你这个m_tab类是继承CTabCtrl的吗?
在DrawItem那里
CRect rect = lpDrawItemStruct->rcItem;
int nTabIndex = lpDrawItemStruct->itemID;
if (nTabIndex < 0) return;
BOOL bSelected = (nTabIndex == GetCurSel());

char label[64];
TC_ITEM tci;
tci.mask = TCIF_TEXT|TCIF_IMAGE;
tci.pszText = label;
tci.cchTextMax = 63;
if (!GetItem(nTabIndex, &tci )) return;

CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
if (!pDC) return;
int nSavedDC = pDC->SaveDC();

// For some bizarre reason the rcItem you get extends above the actual
// drawing area. We have to workaround this "feature".
pDC->FillSolidRect(rect, RGB(170, 190, 230));
//GradientFillFast(pDC, rect, RGB(255,255,255), RGB(179,199,232));
rect.top += ::GetSystemMetrics(SM_CYEDGE);

pDC->SetBkMode(TRANSPARENT);
//pDC->FillSolidRect(rect, ::GetSysColor(COLOR_BTNFACE));
//pDC->FillSolidRect(rect, RGB(170,190,230));


// Draw image
CImageList* pImageList = GetImageList();
if (pImageList && tci.iImage >= 0)
{
rect.left += pDC->GetTextExtent(_T(" ")).cx; // Margin

// Get height of image so we
IMAGEINFO info;
pImageList->GetImageInfo(tci.iImage, &info);
CRect ImageRect(info.rcImage);
//int nYpos = rect.top;

pImageList->Draw(pDC, tci.iImage, CPoint(rect.left, rect.top), ILD_TRANSPARENT);
rect.left += ImageRect.Width();
}

pDC->RestoreDC(nSavedDC);
}
jsqf1014 2008-07-07
  • 打赏
  • 举报
回复
int i = 0;
int i_count = 2;
HICON m_icon[2];

m_icon[0] = AfxGetApp()->LoadIcon(IDI_ICON6);
m_icon[1] = AfxGetApp()->LoadIcon(IDI_ICON7);

CImageList* m_imagelist = new CImageList;
m_imagelist->Create(16,16,0,7,7);
m_imagelist->SetBkColor (RGB(255,255,255));

for(int n=0;n<i_count;n++)
{
m_imagelist->Add(m_icon[n]); //把图标载入图像列表控件
}
m_tab.SetImageList(m_imagelist);

m_tab.InsertItem(0,"tab1",0);
m_tab.InsertItem(1,"tab2",1);

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧