自绘ctabctrl后添加子页面不显示,哪位有自绘控件经验的帮忙看一下
时间:2011-12-23
来源:互联网
这里是我的自绘代码:
#include "StdAfx.h"
#include "TabCtrlStyle.h"
CTabCtrlStyle::CTabCtrlStyle(void)
{
}
CTabCtrlStyle::~CTabCtrlStyle(void)
{
}
void CTabCtrlStyle::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC* pDc=CDC::FromHandle(lpDrawItemStruct->hDC);
RECT rect;
TCITEM tcItem;
DWORD count=GetItemCount();
for(DWORD i=0;i<count;i++)
{
GetItemRect(i,&rect);
CBrush br(RGB(220, 240, 230)); //TAB标签背景颜色
pDc->FillRect(&rect,&br);
wchar_t buffer[256] = {0};
tcItem.pszText = buffer;
tcItem.cchTextMax = 256;
tcItem.mask = TCIF_TEXT;
GetItem(i, &tcItem);
pDc->SetTextColor(RGB(57,117,157));
pDc->DrawText(buffer,&rect,DT_CENTER); //TAB在上面
}
}
void CTabCtrlStyle::InsertItem(int nItem,LPCTSTR lpszItem, CDialog *pDialog)
{
m_pageList.push_back(pDialog);
if(m_pageList.size() == 1)
{
m_curSel = 0;
SetCurSel(m_curSel);
m_pageList.at(m_curSel)->ShowWindow(SW_SHOW);
}
CTabCtrl::InsertItem(nItem, lpszItem);
}
BEGIN_MESSAGE_MAP(CTabCtrlStyle, CTabCtrl)
ON_WM_ERASEBKGND()
ON_NOTIFY_REFLECT(TCN_SELCHANGE, &CTabCtrlStyle::OnTcnSelchange)
END_MESSAGE_MAP()
BOOL CTabCtrlStyle::OnEraseBkgnd(CDC* pDC)
{
RECT rect;
GetClientRect(&rect);
CBrush br(RGB(197, 235, 251));
pDC->SetBkMode(TRANSPARENT);
pDC->FillRect(&rect,&br);
return TRUE;
}
void CTabCtrlStyle::OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult)
{
m_pageList.at(m_curSel)->ShowWindow(SW_HIDE);
m_curSel = GetCurSel();
m_pageList.at(m_curSel)->ShowWindow(SW_SHOW);
*pResult = 0;
}
使用代码如下:
void CMobileClientDlg::InitTabCtrl()
{
m_tab.Create(TCS_TABS|TCS_OWNERDRAWFIXED | TCS_FIXEDWIDTH | WS_CHILD | WS_VISIBLE,rect, this, 1234); //创建TAB控件
m_inboxPage.Create(IDD_INBOX_DIALOG, &m_tab);
m_outboxPage.Create(IDD_OUTBOX_DIALOG, &m_tab);
m_tab.GetClientRect(&rect);
rect.top += 24;
m_inboxPage.MoveWindow(&rect);
m_outboxPage.MoveWindow(&rect);
m_tab.InsertItem(0, _T("收件箱"), &m_inboxPage);
m_tab.InsertItem(1, _T("已发送"), &m_outboxPage);
}
之前自绘成功,效果都有,包括背景和item字体背景切换标签都可以看到效果,后来不知道修改了什么地方导致子对话框添加之后不显示,切换也不显示,但是通过跟踪我发现InsertItem和OnTcnSelchange都能调用到,不知道为什么看不到效果,哪位有空请不吝赐教,在此拜谢了
#include "StdAfx.h"
#include "TabCtrlStyle.h"
CTabCtrlStyle::CTabCtrlStyle(void)
{
}
CTabCtrlStyle::~CTabCtrlStyle(void)
{
}
void CTabCtrlStyle::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC* pDc=CDC::FromHandle(lpDrawItemStruct->hDC);
RECT rect;
TCITEM tcItem;
DWORD count=GetItemCount();
for(DWORD i=0;i<count;i++)
{
GetItemRect(i,&rect);
CBrush br(RGB(220, 240, 230)); //TAB标签背景颜色
pDc->FillRect(&rect,&br);
wchar_t buffer[256] = {0};
tcItem.pszText = buffer;
tcItem.cchTextMax = 256;
tcItem.mask = TCIF_TEXT;
GetItem(i, &tcItem);
pDc->SetTextColor(RGB(57,117,157));
pDc->DrawText(buffer,&rect,DT_CENTER); //TAB在上面
}
}
void CTabCtrlStyle::InsertItem(int nItem,LPCTSTR lpszItem, CDialog *pDialog)
{
m_pageList.push_back(pDialog);
if(m_pageList.size() == 1)
{
m_curSel = 0;
SetCurSel(m_curSel);
m_pageList.at(m_curSel)->ShowWindow(SW_SHOW);
}
CTabCtrl::InsertItem(nItem, lpszItem);
}
BEGIN_MESSAGE_MAP(CTabCtrlStyle, CTabCtrl)
ON_WM_ERASEBKGND()
ON_NOTIFY_REFLECT(TCN_SELCHANGE, &CTabCtrlStyle::OnTcnSelchange)
END_MESSAGE_MAP()
BOOL CTabCtrlStyle::OnEraseBkgnd(CDC* pDC)
{
RECT rect;
GetClientRect(&rect);
CBrush br(RGB(197, 235, 251));
pDC->SetBkMode(TRANSPARENT);
pDC->FillRect(&rect,&br);
return TRUE;
}
void CTabCtrlStyle::OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult)
{
m_pageList.at(m_curSel)->ShowWindow(SW_HIDE);
m_curSel = GetCurSel();
m_pageList.at(m_curSel)->ShowWindow(SW_SHOW);
*pResult = 0;
}
使用代码如下:
void CMobileClientDlg::InitTabCtrl()
{
m_tab.Create(TCS_TABS|TCS_OWNERDRAWFIXED | TCS_FIXEDWIDTH | WS_CHILD | WS_VISIBLE,rect, this, 1234); //创建TAB控件
m_inboxPage.Create(IDD_INBOX_DIALOG, &m_tab);
m_outboxPage.Create(IDD_OUTBOX_DIALOG, &m_tab);
m_tab.GetClientRect(&rect);
rect.top += 24;
m_inboxPage.MoveWindow(&rect);
m_outboxPage.MoveWindow(&rect);
m_tab.InsertItem(0, _T("收件箱"), &m_inboxPage);
m_tab.InsertItem(1, _T("已发送"), &m_outboxPage);
}
之前自绘成功,效果都有,包括背景和item字体背景切换标签都可以看到效果,后来不知道修改了什么地方导致子对话框添加之后不显示,切换也不显示,但是通过跟踪我发现InsertItem和OnTcnSelchange都能调用到,不知道为什么看不到效果,哪位有空请不吝赐教,在此拜谢了
作者: ligan0302 发布时间: 2011-12-23
先查看m_pageList里边是不是又对话框句柄,如果有还不显示,
就在初始化中直接加载对话框资源试试
就在初始化中直接加载对话框资源试试
作者: hezhe1008 发布时间: 2011-12-23
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28