C++ 使用MFC使用CTabCtrl绘制所有者图纸
使用VS 2015。我有一个基于对话框的应用程序(不是属性表),还有一个CTabCtrl派生的对象,我想在其中禁用特定的选项卡。从我在谷歌上搜索到的情况来看,业主抽签是一条路要走。好吧,我能理解 我想做的是从一个所有者绘制的版本开始,它的行为与非所有者绘制的版本完全相同,然后开始对其进行各种调整以进行实验。例如,我想使用C++ 使用MFC使用CTabCtrl绘制所有者图纸,c++,mfc,ownerdrawn,ctabctrl,C++,Mfc,Ownerdrawn,Ctabctrl,使用VS 2015。我有一个基于对话框的应用程序(不是属性表),还有一个CTabCtrl派生的对象,我想在其中禁用特定的选项卡。从我在谷歌上搜索到的情况来看,业主抽签是一条路要走。好吧,我能理解 我想做的是从一个所有者绘制的版本开始,它的行为与非所有者绘制的版本完全相同,然后开始对其进行各种调整以进行实验。例如,我想使用 void CTabControl::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ) { CTabCtrl::DrawItem
void CTabControl::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )
{
CTabCtrl::DrawItem( lpDrawItemStruct ); // do exactly what unmodified does
}
因此,我基本上调用了未修改的CTabCtrl为完成绘图所做的一切。即使是最简单的起点也会有所帮助。我需要重写或截取哪些例程来执行此操作
我正在PreSubclassWindow()中设置TCS_OWNERDRAWFIXED,并执行上面显示的操作,以及其他一两件事情,但结果显然不一样。首先,选项卡中没有文本
我真的很想知道从哪里开始。顺便说一句,我以编程方式创建控件(无对话框资源),如下所示(CTabControl继承自CTabCtrl):
使用所有者绘制的选项卡控件,需要处理绘图的是父级(我相信,除非您使用的是消息反射)。您是否确实验证了调用了您的
CTabControl::DrawItem
类成员?@IInspectable:我确实验证了调用了该成员。我只想更改类本身,所以我想使用消息反射,但是这需要完成。我主要担心的是,我没有处理一些会自动处理的消息,或者正如您指出的那样,家长通常会以不可见的方式处理。我不知道是否有办法让您的场景更容易工作,但我发现使用CMFCTabCtrl
@sergiol做事情更容易。谢谢您的提示,我会调查的。不知道那门课,看起来很有前途+1给你。
MyDlg::OnInitDialog()
{
...
m_tabctrl = new CTabControl();
m_tabctrl->Create( TCS_TABS | TCS_BOTTOM | TCS_HOTTRACK | TCS_FIXEDWIDTH | WS_CHILD | WS_VISIBLE, dummyRect, this, ID_TABCTRL );
...
}