问题标签 [ctabctrl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
207 浏览

c++ - 创建从 CTabCtrl 派生的类

我正在关注使用 CTabCtrl 的教程。本教程要求我创建一个派生自 CTabCtrl 的类。我不确定我是否正确执行此操作。这是我的自定义类的标题。

我正在使用 Visual Studio 2010 并且正在关注本教程。我的问题是教程要求我在类向导中创建一个 CTabbyControl 变量。我只能选择使用 CTabCtrl。这让我觉得我推导不正确。我从来没有派生过一个类。我这样做的方式是正确的推导方法吗?

0 投票
1 回答
1672 浏览

c++ - 在 MFC 中将选项卡添加到 CTabCtrl

我正在尝试将 CTabCtrl 添加到我的 MFC 应用程序中。我正在尝试直接关注 MSDN。

MSDN 添加选项卡

* MSDN:将选项卡添加到选项卡控件

这是我尝试过的:

DDX_Control(pDX, TAB1, m_TabCtrl);

我收到以下错误消息: 断言失败

如果我点击忽略,我的 CTabCtrl 会显示,但没有任何选项卡(只是一个灰色方块)。如果我点击重试,我会在以下位置获得断点:

我尝试添加标题#include "afxcmn.h",但它没有改变任何东西。

作为第一步,我只是试图让命名选项卡显示在我的应用程序上。最终我希望标签显示无模式对话框。有人可以告诉我我做错了什么吗?有没有更好的方法在 MFC 中使用选项卡?

0 投票
1 回答
261 浏览

c++ - MFC 的 CTabCtrl::HitTest 函数为单击的任何选项卡返回“1”

嗨(虽然问候语通常会被删除),

我正在使用 MFC 的 CTabCtrl 控件并尝试确定单击了哪个选项卡(稍后拖放它)。我认为应该很容易 - 无论如何都会被 HitTest 函数卡住,该函数会为单击的任何选项卡返回“1”。

当我最近开始这个项目时,它实际上只是几行代码。提到的 HitTest 函数用于 CHlavniOkno::CTdi::OnLButtonDown 函数的 Tdi.cpp 文件中(完整源代码位于http://nestorovic.hyperlink.cz/cpp_mfc.zip):

我肯定遗漏了一些微小的东西,几乎总是如此......

感谢您花时间查看问题。

托马斯

0 投票
1 回答
287 浏览

visual-c++ - 最小化还原后不出现 MFC CListCtrl

首先让我说,按照今天的标准,我正在使用旧技术!这发生在 Visual Studio 2005 上的 MFC 中并在 WinXP 下运行。(如果它没有坏掉...... ;-))

我有一个基于对话框的应用程序,它有一个带有两个选项卡的 CTabCtrl。每个都包含一个 CListCtrl。这些在正常情况下工作得很好。它们正确填充并按应有的方式显示和隐藏。当我第一次打开应用程序时,显示选择是正确的。如果我然后最小化对话框并恢复,CList Ctrl 不显示,选项卡为空白。它是唯一存在此问题的控件。CTabCtrl 之外的另一个 CListCtrl 确实显示正确。如果我然后交换选项卡并再次返回,则显示另一个选项卡,然后第一个选项卡正常显示。

如果我在最小化之前访问对话框的任何其他部分,则不会发生这种情况,只有当最小化是我采取的绝对第一个操作时。如果我在设置 CTabCtrl 的 OnInitDialog 中将此选项卡设置为在启动时选中,那么我在另一个选项卡中的 CListCtrl 也会发生这种情况。

我实际上已经通过在我的 OnSysCommand(...) 中添加以下内容来解决这个问题的效果:

但它让我感到困扰,我正在添加代码来解决仅在这种奇怪情况下发生的问题。我不禁想到我在设置中遗漏了一些导致这种行为的东西。任何人都可以首先解释是什么原因造成的吗?

0 投票
1 回答
76 浏览

c++ - 我正在扩展 CTabCtrl 但无法插入任何选项卡

我正在扩展,CTabCtrl但是当我调用InsertItem我的扩展对象时,没有插入任何选项卡。谁知道这是为什么。我做错了什么?

如果我从消息映射中删除 ON_WM_CREATE() 宏,那么我可以添加选项卡。OnCreate 函数的实现包含 m_listCtrl.Create() 函数调用,如果列表控件创建成功则返回 0。这有什么问题?

0 投票
1 回答
885 浏览

c++ - CTabCtrl MFC 中的控件处理

我有一个 MFC 应用程序,它有一个从 CTabCtrl 继承的类,在我的 Main Dialog::OnInit() 方法上。

tabCtrl 是一个从 CTabCtrl 继承的类的变量,方法 InitDialogs 是:

m_Dialog* 包含我从资源类中提取的两个对话框类。

我在运行程序时看到两个选项卡,但是当我执行类似的操作时

我收到一个断言失败错误。我的 DoDataExchange 被调用,它看起来像:

我已经为此苦苦挣扎了好几天,而且我只能找到其中没有任何控件的虚拟选项卡的示例。有没有我遗漏的步骤?

更新:断言错误显示这个

Microsoft Visual C++ 运行时库 --------------- 调试断言失败!程序:C:\Windows\SYSTEM32\mfc140d.dll 文件:f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp 行:4355 有关您的程序如何导致断言失败的信息,请参阅关于断言的 Visual C++ 文档

并且它无法 UpdateData(TRUE) 语句

0 投票
0 回答
655 浏览

c++ - 使用 MFC 使用 CTabCtrl 绘制所有者

使用 VS 2015。我有一个基于对话框的应用程序(不是 PropertySheet),并且有一个 CTabCtrl 派生对象,我想在其中禁用特定选项卡。从我用谷歌搜索的内容来看,所有者绘制是要走的路。很好,可以这么理解。

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

所以我基本上调用了未修改的 CTabCtrl 为完成绘图所做的一切。即使是最简单的起点也会有所帮助。我需要覆盖或拦截哪些例程才能做到这一点?

我在 PreSubclassWindow() 中设置 TCS_OWNERDRAWFIXED 并执行我上面显示的操作以及其他一两件事,但结果肯定看起来不一样。一方面,标签中没有文字。

如果我能得到一些关于从哪里开始的指示,我会非常喜欢它。顺便说一句,我正在以编程方式创建控件(无对话框资源),如下所示(CTabControl 继承自 CTabCtrl):

0 投票
0 回答
93 浏览

mfc - 将 CTabCtrl 的栏设置为透明

我有一个CTabCtrl并且我正在使用WindowsBlinds为我的计算机 GUI 设置皮肤。

选项卡控件

这是一个MFC CDialog对象。

我可以在代码中做些什么让灰色区域呈现透明吗?

我尝试设置透明资源属性,但它不起作用。

0 投票
1 回答
756 浏览

visual-c++ - 如何从 MFC 选项卡控件 (TabCtrl) 获取额外数据?

我创建了一个基于 MFC 对话框的应用程序来研究选项卡控件。在选项卡控件中,可以为每个选项卡设置特定于应用程序的数据。我试图了解如何设置/检索选项卡控件的各个选项卡的数据。

这是我正在创建的示例应用程序。控件的每个选项卡都应该存储一些 GPU 信息。

选项卡控件

据我了解,添加应用程序特定数据有 3 个步骤。

  1. 创建一个用户定义的结构,其第一个成员应该是 type TCITEMHEADER

    /li>
  2. 告诉选项卡控件额外的字节,用户定义的结构将采用。这是我正在做的DoDataExchange()

    /li>
  3. 在添加选项卡时设置用户定义的数据。

    /li>

现在要获取数据,我们只需调用TabCtrl_GetItem().

但正如我们在下图中看到的那样。我确实得到了选项卡文本(pszText 成员 - 图像中的数据项 1),但没有获得我之前与之关联的额外数据(图像中的数据项 2 和 3)。

选项卡控件获取项目

我错过了哪一步?
为什么与应用程序定义的数据相关的结构没有被填充?

附加信息

这是应用程序的完整代码。

CPP 文件:


头文件:


解决方案总结

Barmak Shemirani 的回答来看,这是我的代码无法正常工作的 3 个原因。必须阅读他的答案才能更好地理解。

  1. TCIF_PARAM必须在掩码中设置,同时执行TCM_INSERTITEMTCM_GETITEM
  2. 我正在使用在堆栈上创建的局部变量(tabData td2;对象)。一旦超出范围,对该变量的引用就会变得无效。
  3. 在用于的结构中使用 std::wstring TCM_INSERTITEM。最好使用可以准确确定大小的数据类型(如普通的旧数据类型。)。

正如 Barmak Shemirani 在评论中指出的那样,文档TCITEMHEADER很少。他的回答提供了详尽的解释。

0 投票
1 回答
3232 浏览

c++ - 如何更改 CTabCtrl 选项卡颜色?

你好,新年快乐,(直到星期四才可以说)

我正在尝试更改 CTabCtrl 类中选项卡的颜色。我正在尝试创建自己的 ReskinCTablCtrl 以便我可以在单独的类中调用它并在整个程序中轻松使用它。

目前我可以更改 CTabCtrl 的背景颜色,但我无法修改选项卡本身。

我用来ON_WM_ERASEBKGND()画背景,它没有问题:

但是,我在更改标签颜色方面一直没有成功。它们仍然是默认的 MFC 颜色。我试图实施ON_WM_PAINT()ON_WM_DRAWITEM()没有任何成功。我想我可以使用 OnDraw 和 DrawItem 来访问特定的选项卡矩形,类似于我在这个问题末尾发布的第二个链接示例。

我真的很感激至少有一些解决这个问题的方向,也许还有更多的例子或者我应该专注于使用什么方法。我不需要标签是不同的颜色,也许有一种简单的方法可以做到这一点?

我一直在尝试遵循以下链接之类的示例,但我仍然无法找到正确的方法。

https://support.microsoft.com/en-us/help/179909/how-to-change-the-background-color-of-a-tab-control

https://www.codeproject.com/Articles/1786/Ownerdraw-Tab-Controls-Borders-and-All