自绘窗口标题条问题,以及自绘TAB控件问题 我自己绘的标题条的高度是和系统的高度一样,为什么用一些界面库绘制的标题条就高很多,而且不闪烁。我自绘了一个TAB控件,但是周围的系统色的边框一直去存在,不知道怎么去掉,我是重载DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)这个函数来绘制的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个tab能给我一份吗,[email protected] 在OnPaint函数里自绘,OnEraseBkgnd函数里绘边框和非客户区域我随手写的代码如下:void CBaseTabCtrl::OnPaint() { CPaintDC dc(this); // device context for painting HBRUSH hr; int iSave; char szLable[64]; TC_ITEM tci; CRect rc; //DRAWITEMSTRUCT信息 LPDRAWITEMSTRUCT lpDrawItemStruct=new DRAWITEMSTRUCT; //填充DRAWITEMSTRUCT信息 lpDrawItemStruct->CtlID=GetDlgCtrlID(); lpDrawItemStruct->CtlType=ODT_TAB; lpDrawItemStruct->hwndItem=GetSafeHwnd(); lpDrawItemStruct->hDC=dc.GetSafeHdc(); lpDrawItemStruct->itemAction=ODA_DRAWENTIRE; //得到总页数和当前页码 int iTab=GetItemCount(); int iSel=GetCurSel(); if (!iTab) return; //循环画同每个页 while (iTab--) { //得到指定页面的信息 tci.mask = TCIF_TEXT|TCIF_IMAGE; tci.pszText = szLable; tci.cchTextMax = 63; if (!GetItem(iTab, &tci )) return; //绘非当前页 if (iTab != iSel) { lpDrawItemStruct->itemID = iTab; lpDrawItemStruct->itemState = 0; VERIFY(GetItemRect(iTab, &lpDrawItemStruct->rcItem)); lpDrawItemStruct->rcItem.bottom += 2; lpDrawItemStruct->rcItem.top -= 2; HBRUSH hr=CreateSolidBrush(RGB(255,0,0)); int iSave=dc.SaveDC(); dc.SelectObject(hr); dc.RoundRect(&lpDrawItemStruct->rcItem, CPoint(10,10)); dc.SetBkMode(TRANSPARENT); rc=lpDrawItemStruct->rcItem; rc.top+=4; dc.SetTextColor(RGB(0,255,0)); dc.DrawText(szLable, rc, DT_SINGLELINE|DT_BOTTOM|DT_CENTER|DT_VCENTER); dc.RestoreDC(iSave); DeleteObject(hr); m_pPages[iTab]->ShowWindow(SW_HIDE); } else { lpDrawItemStruct->itemID = iSel; lpDrawItemStruct->itemState = ODS_SELECTED; VERIFY(GetItemRect(iSel, &lpDrawItemStruct->rcItem)); lpDrawItemStruct->rcItem.bottom += 2; lpDrawItemStruct->rcItem.top -= 2; rc=lpDrawItemStruct->rcItem; rc.top+=4; hr=CreateSolidBrush(RGB(255,255,0)); iSave=dc.SaveDC(); dc.SelectObject(hr); dc.RoundRect(&lpDrawItemStruct->rcItem, CPoint(10,10)); dc.SetBkMode(TRANSPARENT); dc.SetTextColor(RGB(0,255,255)); dc.DrawText(szLable, rc, DT_SINGLELINE|DT_BOTTOM|DT_CENTER|DT_VCENTER); dc.RestoreDC(iSave); DeleteObject(hr); m_pPages[iSel]->ShowWindow(SW_SHOW); } //画ICON CImageList* pImageList = GetImageList(); //HIMAGELIST hilTabs = (HIMAGELIST)TabCtrl_GetImageList(GetSafeHwnd()); if (pImageList && tci.iImage >= 0) { rc.left += dc.GetTextExtent(_T(" ")).cx; //得到ICON的高度 IMAGEINFO info; pImageList->GetImageInfo(tci.iImage, &info); CRect ImageRect(info.rcImage); int nYpos = rc.top; //画ICON pImageList->Draw(&dc, tci.iImage, CPoint(rc.left, nYpos), ILD_TRANSPARENT); //ImageList_Draw(hilTabs, tci.iImage, dc.m_hDC, rcPage.left, rcPage.top, ILD_TRANSPARENT); rc.left += ImageRect.Width(); } }}BOOL CBaseTabCtrl::OnEraseBkgnd(CDC* pDC) { //return CTabCtrl::OnEraseBkgnd(pDC); CRect rcClient; GetClientRect(&rcClient); pDC->Rectangle(&rcClient); return TRUE;} 请教使用VC设计试卷自动生成系统的思路? 极度郁闷,EVC(wince 基于MFC开发)中,为什么这样也会内存溢出! 分享一篇文章,关于工作和生活,希望和正在经历以及即将经历的朋友共鸣。 今天被愚弄了! VC 位图合并 error LNK2001: unresolved external symbol " 求高人指点迷津 有个问题需要各位帮忙! 求一treeview控件!!! 大侠帮忙 如何从视图得到主框架的指针? CSDN的广告转帖,号称送积分 有没有做过STATIC TEXT中显示越南文朋友啊?请进来指点一下!
void CBaseTabCtrl::OnPaint()
{
CPaintDC dc(this); // device context for painting
HBRUSH hr;
int iSave;
char szLable[64];
TC_ITEM tci;
CRect rc;
//DRAWITEMSTRUCT信息
LPDRAWITEMSTRUCT lpDrawItemStruct=new DRAWITEMSTRUCT;
//填充DRAWITEMSTRUCT信息
lpDrawItemStruct->CtlID=GetDlgCtrlID();
lpDrawItemStruct->CtlType=ODT_TAB;
lpDrawItemStruct->hwndItem=GetSafeHwnd();
lpDrawItemStruct->hDC=dc.GetSafeHdc();
lpDrawItemStruct->itemAction=ODA_DRAWENTIRE;
//得到总页数和当前页码
int iTab=GetItemCount();
int iSel=GetCurSel();
if (!iTab)
return;
//循环画同每个页
while (iTab--)
{
//得到指定页面的信息
tci.mask = TCIF_TEXT|TCIF_IMAGE;
tci.pszText = szLable;
tci.cchTextMax = 63;
if (!GetItem(iTab, &tci ))
return;
//绘非当前页
if (iTab != iSel)
{
lpDrawItemStruct->itemID = iTab;
lpDrawItemStruct->itemState = 0;
VERIFY(GetItemRect(iTab, &lpDrawItemStruct->rcItem));
lpDrawItemStruct->rcItem.bottom += 2;
lpDrawItemStruct->rcItem.top -= 2;
HBRUSH hr=CreateSolidBrush(RGB(255,0,0));
int iSave=dc.SaveDC();
dc.SelectObject(hr);
dc.RoundRect(&lpDrawItemStruct->rcItem, CPoint(10,10));
dc.SetBkMode(TRANSPARENT); rc=lpDrawItemStruct->rcItem; rc.top+=4;
dc.SetTextColor(RGB(0,255,0));
dc.DrawText(szLable, rc, DT_SINGLELINE|DT_BOTTOM|DT_CENTER|DT_VCENTER);
dc.RestoreDC(iSave);
DeleteObject(hr); m_pPages[iTab]->ShowWindow(SW_HIDE);
}
else
{
lpDrawItemStruct->itemID = iSel;
lpDrawItemStruct->itemState = ODS_SELECTED;
VERIFY(GetItemRect(iSel, &lpDrawItemStruct->rcItem)); lpDrawItemStruct->rcItem.bottom += 2;
lpDrawItemStruct->rcItem.top -= 2; rc=lpDrawItemStruct->rcItem;
rc.top+=4;
hr=CreateSolidBrush(RGB(255,255,0));
iSave=dc.SaveDC();
dc.SelectObject(hr);
dc.RoundRect(&lpDrawItemStruct->rcItem, CPoint(10,10)); dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(0,255,255));
dc.DrawText(szLable, rc, DT_SINGLELINE|DT_BOTTOM|DT_CENTER|DT_VCENTER); dc.RestoreDC(iSave);
DeleteObject(hr); m_pPages[iSel]->ShowWindow(SW_SHOW); }
//画ICON
CImageList* pImageList = GetImageList();
//HIMAGELIST hilTabs = (HIMAGELIST)TabCtrl_GetImageList(GetSafeHwnd());
if (pImageList && tci.iImage >= 0)
{ rc.left += dc.GetTextExtent(_T(" ")).cx; //得到ICON的高度
IMAGEINFO info;
pImageList->GetImageInfo(tci.iImage, &info);
CRect ImageRect(info.rcImage);
int nYpos = rc.top;
//画ICON
pImageList->Draw(&dc, tci.iImage, CPoint(rc.left, nYpos), ILD_TRANSPARENT);
//ImageList_Draw(hilTabs, tci.iImage, dc.m_hDC, rcPage.left, rcPage.top, ILD_TRANSPARENT);
rc.left += ImageRect.Width();
}
}
}BOOL CBaseTabCtrl::OnEraseBkgnd(CDC* pDC)
{
//return CTabCtrl::OnEraseBkgnd(pDC);
CRect rcClient;
GetClientRect(&rcClient);
pDC->Rectangle(&rcClient);
return TRUE;
}