MFC tabcontrol 贴图问题

allen_00 2015-07-16 05:39:44
imagelist.Create(115, 38, ILC_COLOR32 | ILC_MASK, 1, 4);
bmp.LoadBitmap(IDB_RED_SHARE );
bmp1.LoadBitmap(IDB_RED_CAM );
bmp2.LoadBitmap(IDB_RED_PIC);
bmp3.LoadBitmap(IDB_RED_VIDEO);
bmp4.LoadBitmap(IDB_SHARE);
bmp5.LoadBitmap(IDB_CAM);
bmp6.LoadBitmap(IDB_PIC);
bmp7.LoadBitmap(IDB_VIDEO);
imagelist.Add(&bmp, RGB(255, 255, 255));
imagelist.Add(&bmp1, RGB(255, 255, 255));
imagelist.Add(&bmp2, RGB(255, 255, 255));
imagelist.Add(&bmp3, RGB(255, 255, 255));
imagelist.Add(&bmp4, RGB(255, 255, 255));
imagelist.Add(&bmp5, RGB(255, 255, 255));
imagelist.Add(&bmp6, RGB(255, 255, 255));
imagelist.Add(&bmp7, RGB(255, 255, 255));

m_tab.InsertItem(0, _T(""));
m_tab.InsertItem(1, _T(""));
m_tab.InsertItem(2, _T(""));
m_tab.InsertItem(3, _T(""));

m_tab.SetImageList(&imagelist);
imagelist.Detach();
tcitem.mask = TCIF_IMAGE;
tcitem.iImage = 0;
m_tab.SetItem(0, &tcitem);
tcitem.iImage = 5;
m_tab.SetItem(1, &tcitem);
tcitem.iImage = 6;
m_tab.SetItem(2, &tcitem);
tcitem.iImage = 7;
m_tab.SetItem(3, &tcitem);


上面试贴图代码 ,下面是tabcontrol显示效果:

存在选项卡背景图片贴不满的情况 , 请问大神们怎么解决?? 或者怎么设置选项卡背景颜色为白色??
...全文
238 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
allen_00 2015-07-17
  • 打赏
  • 举报
回复
引用 5 楼 schlafenhamster 的回复:
DrawItem(LPDRAWITEMSTRUCT lpdis) 吧。
但是这样的话 我在点击每个标签的时候要切换位图,这样改怎么显示?
schlafenhamster 2015-07-17
  • 打赏
  • 举报
回复
DrawItem(LPDRAWITEMSTRUCT lpdis) 吧。
schlafenhamster 2015-07-17
  • 打赏
  • 举报
回复
m_tabCtrl.SetImageList(&m_Imagelist); // class CTabCtrl : public CWnd { DECLARE_DYNAMIC(CTabCtrl) // Constructors public: CTabCtrl(); BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID); // Attributes CImageList* GetImageList() const; CImageList* SetImageList(CImageList* pImageList); int GetItemCount() const; BOOL GetItem(int nItem, TCITEM* pTabCtrlItem) const; BOOL SetItem(int nItem, TCITEM* pTabCtrlItem); BOOL SetItemExtra(int nBytes); BOOL GetItemRect(int nItem, LPRECT lpRect) const; int GetCurSel() const; int SetCurSel(int nItem); void SetCurFocus(int nItem); CSize SetItemSize(CSize size); void SetPadding(CSize size); int GetRowCount() const; CToolTipCtrl* GetToolTips() const; void SetToolTips(CToolTipCtrl* pWndTip); int GetCurFocus() const; int SetMinTabWidth(int cx); DWORD GetExtendedStyle(); DWORD SetExtendedStyle(DWORD dwNewStyle, DWORD dwExMask = 0); DWORD GetItemState(int nItem, DWORD dwMask) const; BOOL SetItemState(int nItem, DWORD dwMask, DWORD dwState); // Operations BOOL InsertItem(int nItem, TCITEM* pTabCtrlItem); BOOL InsertItem(int nItem, LPCTSTR lpszItem); BOOL InsertItem(int nItem, LPCTSTR lpszItem, int nImage); BOOL InsertItem(UINT nMask, int nItem, LPCTSTR lpszItem, int nImage, LPARAM lParam); BOOL InsertItem(UINT nMask, int nItem, LPCTSTR lpszItem, int nImage, LPARAM lParam, DWORD dwState, DWORD dwStateMask); BOOL DeleteItem(int nItem); BOOL DeleteAllItems(); void AdjustRect(BOOL bLarger, LPRECT lpRect); void RemoveImage(int nImage); int HitTest(TCHITTESTINFO* pHitTestInfo) const; void DeselectAll(BOOL fExcludeFocus); BOOL HighlightItem(int idItem, BOOL fHighlight = TRUE); // Overridables virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); // Implementation public: virtual ~CTabCtrl(); protected: virtual BOOL OnChildNotify(UINT, WPARAM, LPARAM, LRESULT*); //{{AFX_MSG(CTabCtrl) afx_msg void OnDestroy(); //}}AFX_MSG DECLARE_MESSAGE_MAP() };
allen_00 2015-07-17
  • 打赏
  • 举报
回复
CImageList *pImg=GetImageList(); 这个GetImageList();是哪里来得?
allen_00 2015-07-17
  • 打赏
  • 举报
回复
if(tci.iImage > -1) { CImageList *pImg=GetImageList(); HICON hicon=pImg->ExtractIcon(lpdis->itemID); DrawIconEx(lpdis->hDC,rc.left,rc.top,hicon,0,0,0,0,DI_NORMAL); rc.left += 20; } 在绘图的时候 imagelist是怎么把资源图片导入进去的?tab和imagelist如何关联起来?
schlafenhamster 2015-07-17
  • 打赏
  • 举报
回复
TabCtrlItem.iImage=3;// the new image 当选择项改变时 OnSelchangeTabctrl 重置 nImage
schlafenhamster 2015-07-17
  • 打赏
  • 举报
回复
void CDynViewsDlg::OnSelchangeTabctrl(NMHDR* pNMHDR, LRESULT* pResult) { int nID=m_tabCtrl.GetCurSel(); // TCITEM TabCtrlItem; memset(&TabCtrlItem,0,sizeof(TabCtrlItem)); TabCtrlItem.mask= TCIF_IMAGE ; TabCtrlItem.iImage=3;// the new image m_tabCtrl.SetItem(nID, &TabCtrlItem); // SelectTab(nID); *pResult = 0; }
allen_00 2015-07-16
  • 打赏
  • 举报
回复
引用 2 楼 schlafenhamster 的回复:
BOOL GetItemRect(int nItem, LPRECT lpRect) const; 看看 大小 是不是 115, 38
不管我的图片大小设置为多大 选项卡两边都会有多余,且会随着图片的放大而放大
schlafenhamster 2015-07-16
  • 打赏
  • 举报
回复
// CMyTabCtrl message handlers void CMyTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpdis) { char szTabText[100]; memset(szTabText, '\0', sizeof(szTabText)); TC_ITEM tci; memset(&tci, 0, sizeof(tci)); tci.mask = TCIF_TEXT | TCIF_IMAGE; tci.pszText = szTabText; tci.cchTextMax = sizeof(szTabText)-1; // get item GetItem(lpdis->itemID, &tci); // CDC *pdc = CDC::FromHandle(lpdis->hDC); // light green CRect rc=lpdis->rcItem; rc.DeflateRect(3,3); pdc->FillSolidRect(&rc, RGB(180,255,255)); pdc->SetBkMode(TRANSPARENT); // pdc->SetBkColor(RGB(180,255,255)); pdc->SetTextColor(RGB(255,0,0)); // draw img if(tci.iImage > -1) { CImageList *pImg=GetImageList(); HICON hicon=pImg->ExtractIcon(lpdis->itemID); DrawIconEx(lpdis->hDC,rc.left,rc.top,hicon,0,0,0,0,DI_NORMAL); rc.left += 20; } // TextOut(lpdis->hDC,rc.left,rc.top,tci.pszText,lstrlen(tci.pszText)); }
schlafenhamster 2015-07-16
  • 打赏
  • 举报
回复
BOOL GetItemRect(int nItem, LPRECT lpRect) const; 看看 大小 是不是 115, 38
allen_00 2015-07-16
  • 打赏
  • 举报
回复
UP。。。。。。。。。。。。。

15,976

社区成员

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

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