Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用MFC使用CTabCtrl绘制所有者图纸_C++_Mfc_Ownerdrawn_Ctabctrl - Fatal编程技术网

C++ 使用MFC使用CTabCtrl绘制所有者图纸

C++ 使用MFC使用CTabCtrl绘制所有者图纸,c++,mfc,ownerdrawn,ctabctrl,C++,Mfc,Ownerdrawn,Ctabctrl,使用VS 2015。我有一个基于对话框的应用程序(不是属性表),还有一个CTabCtrl派生的对象,我想在其中禁用特定的选项卡。从我在谷歌上搜索到的情况来看,业主抽签是一条路要走。好吧,我能理解 我想做的是从一个所有者绘制的版本开始,它的行为与非所有者绘制的版本完全相同,然后开始对其进行各种调整以进行实验。例如,我想使用 void CTabControl::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ) { CTabCtrl::DrawItem

使用VS 2015。我有一个基于对话框的应用程序(不是属性表),还有一个CTabCtrl派生的对象,我想在其中禁用特定的选项卡。从我在谷歌上搜索到的情况来看,业主抽签是一条路要走。好吧,我能理解

我想做的是从一个所有者绘制的版本开始,它的行为与非所有者绘制的版本完全相同,然后开始对其进行各种调整以进行实验。例如,我想使用

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 );
    ...
}