关于TabCtrl标签显示一个比较怪异的问题(急等大侠帮忙!!!)

opposeeee 2010-07-16 11:04:57
我的一个工程中用了一个现成类A,这个类继承了CtabCtrl。A类中onPaint方法写了绘制标签头背景和标签文本的代码。
代码如下:
OnPaint()
{
CPaintDC dc(this);

CRect rcClient;
GetClientRect(&rcClient);

CDC dcMemory;
dcMemory.CreateCompatibleDC(&dc);
CBitmap bmp;
bmp.CreateCompatibleBitmap(&dc,rcClient.Width(),30);
dcMemory.SelectObject(&bmp);

//画背景
Graphics _g(dcMemory.m_hDC);
_g.SetTextRenderingHint(TextRenderingHintClearTypeGridFit);
_g.DrawImage(_pTabImageBG,0,0,rcClient.Width()+100,30);

CRect itemRect;
for (int i=0;i<GetItemCount();i++)
{
GetItemRect(i,&itemRect);
if (_buttonState==stateMouseNormal)
{
if (i==GetCurSel())
{
_g.DrawImage(_pTabImageItem3,itemRect.left,0,
itemRect.Width(),itemRect.Height());
_g.DrawImage(_pTabImageClose1,
itemRect.right-17-5,
7,
17,
16);
}
else
{
_g.DrawImage(_pTabImageItem1,itemRect.left,0,
itemRect.Width(),itemRect.Height());
}
}
else if (_buttonState==stateMouseHover)
{
CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
if (i==GetCurSel())
{
_g.DrawImage(_pTabImageItem3,itemRect.left,0,
itemRect.Width(),itemRect.Height());

CRect rcClose(
itemRect.right-17-5,
7,
itemRect.right-5,
7+16);
_rcClose=rcClose;

if (rcClose.PtInRect(pt))
{
_g.DrawImage(_pTabImageClose2,
itemRect.right-17-5,
7,
17,
16);
}
else
{
_g.DrawImage(_pTabImageClose1,
itemRect.right-17-5,
7,
17,
16);
}
}
else
{
if (itemRect.PtInRect(pt))
{
_g.DrawImage(_pTabImageItem2,itemRect.left,0,
itemRect.Width(),itemRect.Height());
}
else
{
_g.DrawImage(_pTabImageItem1,itemRect.left,0,
itemRect.Width(),itemRect.Height());
}
}
_bMouseWatch=TRUE;
}
else if (_buttonState==stateMouseDown)
{
if (i==GetCurSel())
{
_g.DrawImage(_pTabImageItem3,itemRect.left,0,
itemRect.Width(),itemRect.Height());

CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt);

CRect rcClose(
itemRect.right-17-5,
7,
itemRect.right-5,
7+16);
_rcClose=rcClose;

if (rcClose.PtInRect(pt))
{
_g.DrawImage(_pTabImageClose3,
itemRect.right-17-5,
7,
17,
16);
_nCurrentItem=i;
//点到关闭按钮上了
}
else
{
_g.DrawImage(_pTabImageClose1,
itemRect.right-17-5,
7,
17,
16);
}
}
else
{
_g.DrawImage(_pTabImageItem1,itemRect.left,0,
itemRect.Width(),itemRect.Height());
}
}

//_g.DrawImage(_pTabImageIcon,itemRect.left+4,6,16,16);

/* 显示选项卡标签*******************************************/
TCHAR TempBuf[255];
TCITEM itemCurrent;
itemCurrent.mask = TCIF_TEXT;
itemCurrent.pszText = TempBuf;
itemCurrent.cchTextMax = sizeof(TempBuf);
GetItem(i, &itemCurrent);
//FontFamily fontFamily(L"宋体");//选择一种字体
//Font myFont(&fontFamily,10,FontStyleRegular,UnitInch);

//Font myFont(L"宋体", 10.5F);
//Font myFont(L"",8.0F);
//Gdiplus::Font myFont(L"Arial", 15, FontStyleRegular,UnitPixel);
Font myFont(L"宋体", 10.5F);
PointF origin((REAL)itemRect.left+22.0F,8.0F);
SolidBrush blackBrush(Color(200, 0, 0, 0));
USES_CONVERSION;
_g.DrawString(
A2W(itemCurrent.pszText),
(INT)wcslen(A2W(itemCurrent.pszText)),
&myFont,
origin,
&blackBrush);
/* end of 显示选项卡标签**********************************/

}//end for

dc.BitBlt(0,0,rcClient.Width(),rcClient.Height(),&dcMemory,0,0,SRCCOPY);

_g.ReleaseHDC(dcMemory.m_hDC);
dcMemory.DeleteDC();
bmp.DeleteObject();
}

其中每个标签头关联了一个对话窗口,当对话窗口中数据发生变化时,比如接收到来自服务器的消息时,我想把这个窗口对应的Tab标签换另外一种背景,像QQ那样来信息时,任务栏中的聊天窗口变成黄色高亮显示.
于是我把onpaint方法稍微修改了下,当tab标签关联的窗口中数据发生变化时,与之相关联的tab标签绘制上另外一张图片,结果发现换绘制另外一张图片的代码执行了,tab标签还是原来的样子,并没有换上我想换的图片(说明:图片路径都对,并且存在这张图片),请问这是怎么回事呢,如何解决呢
...全文
70 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gameslq 2010-08-19
  • 打赏
  • 举报
回复
这里有个列子,应该对你有帮助
建议lz看看:
http://www.vckbase.com/code/viewcode.asp?id=2995
向立天 2010-08-19
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
Eleven 2010-07-22
  • 打赏
  • 举报
回复
当tab标签关联的窗口中数据发生变化时,与之相关联的tab标签绘制上另外一张图片,结果发现换绘制另外一张图片的代码执行了,tab标签还是原来的样子,并没有换上我想换的图片
----------------------------------------------------------------
那你要看看为什么图片没有贴上去,Debug下调试
向立天 2010-07-22
  • 打赏
  • 举报
回复
这个TabCtrl你还没完成呢
opposeeee 2010-07-16
  • 打赏
  • 举报
回复
自己顶!!!

15,979

社区成员

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

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