问题标签 [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 投票
0 回答
437 浏览

visual-c++ - 为什么CTabCtrl背景是白色的,而不是对话框的颜色

在 Visual Studio 2017 中,我从头开始创建了一个基于 MFC 对话框的应用程序。在对话框编辑器中,我放置了一个 Tab Control,然后使用 Add Variable... 创建 CTabCtrl 类型的数据成员,并在 OnInitDialog() 中添加了几行以创建一些空选项卡。结果在这里:

选项卡控件白色

当我将内容(对话框)添加到选项卡时,对话框比选项卡控件小,白色背景看起来特别难看。

如果我在 Visual Studio 2008 中做同样的事情,背景是灰色的,就像对话框一样。

我的问题是:

  1. 为什么从 VS2008 变成 VS2017?
  2. 我该怎么做才能使背景与对话框相同?我目前的解决方法是从 CTabCtrl 派生,并处理 WM_ERASEBKGND 和 WM_PAINT(如此所述),这比我想要支持的代码要多得多。
0 投票
0 回答
953 浏览

c++ - CTabCtrl,启用和禁用选项卡

使用 Visual C++ MFC。

我有一个对话框页面,其中包含一个选项卡控件对象。我创建了自己的选项卡控件类,它派生自CTabCtrl,我在其中创建了包含在数组中的所有选项卡页,如下所示:

在我的初始对话框页面中,我有一堆复选框。根据这些复选框的状态,我添加/删除标签页(但不是底层的 TabPage 类!)。

这样做是这样的。我跟踪在 m_fTabEnabled 中启用/禁用了哪些选项卡。选项卡的状态通过复选框进行切换。这用于确定需要插入哪个选项卡。

使用这种方法,我有一个问题,如果我启用了三个选项卡,并且我删除了第二个选项卡,那么包含来自第二个选项卡的数据的对话框将显示在第三个选项卡上。例如:

当我从选项卡中检索数据时,这会导致问题,因为我在选项卡 3 中填写的内容会丢失到以前在选项卡 2 中的数据。

有人对管理此问题的方法有任何建议吗?

0 投票
0 回答
218 浏览

c++ - ChildWindowFromPoint 无法在选项卡对话框中获取按钮/文本 hwnd - MFC

我正在研究如何通过使用鼠标光标指向窗口来获取窗口句柄。问题是我无法获取选项卡对话框内的按钮/文本。我使用 Spy++ 来获取层次结构,有 3 层可以到达所需的按钮。主窗口 (#32770) - Tab1 (#32770) - Btn1(按钮)。

而不是得到 Btn1,我总是得到 SysTabControl32 的窗口,它与 Tab1 具有相同的层次结构级别,这意味着我只能到达 SysTabControl32(不是我想要的)而无法到达 Tab1。

如果我使用 WindowFromPoint 并将鼠标指向 Btn1,我将获得 SysTabControl32;使用 ChildWindowFromPoint,我会得到 0 作为返回值;使用 RealChildWindowFromPoint,我会得到 SysTabControl32。

Spy++ 只能检测 MainWindow、SysTabControl32 和 Tab1,但不能检测 Btn1。我可以使用 EnumChildWindow 获取所有子窗口,但它只是表明这些子窗口存在,而 ...FromPoint 函数仍然找不到 Tab1 和那些子窗口。

有谁知道这种情况的原因是什么?似乎 SysTabControl32 (TabCtrl) 阻止了 Tab1 (TabDialog),是吗?还是开发者创建的tab结构?

请帮忙..谢谢

0 投票
1 回答
73 浏览

winapi - MFC:当没有选项卡存在时,如何绘制 CTabView 背景?

我要显示一些文本,可能在不存在选项卡时使用DrawText()CTabView客户区来解释它们不存在的原因。但是,CTabView::OnPaint()除了在应用程序启动时调用一次。此外,当所有选项卡隐藏时,CTabView::OnDraw()也不会调用。我想CMFCTabCtrl可能是得到OnPaint()回调的那个?但是尽管如此,当所有选项卡都未显示(通过隐藏)时,如何将某些内容输出到 aCSplitterWnd占用的行/列。??CTabViewCMFCTabCtrl::ShowTab()

蒂亚!!

0 投票
0 回答
21 浏览

c++ - CTabCtrl DeleteItem 并非在所有情况下都有效

我有一个循环遍历地图的功能(地图包含我的 CTabCtrl-Tab 的索引和选项卡中显示的文档的 ID),如果当前选定选项卡的 ID 与当前的 ID 不相似循环标签,标签应该被删除。

问题是:有些标签被删除,有些没有。DeleteItem 的返回码始终为“1”。

有任何想法吗?

0 投票
1 回答
29 浏览

mfc - MFC:根据请求将 CListView 选项卡添加到 CTabView (CBCGPTabView) 不会调用 CMyListView::OnInitialUpdate()

我有一个CMyTabView派生自CBCGPTabView( CTabView) ,我想动态添加选项卡。添加的选项卡将CMyListView派生自CListView. 如果我在它的过程中添加标签CMyTabView::OnCreate()工作正常。如果我尝试通过自定义消息执行此操作,它会添加选项卡,但它是空白的(CMyListView::OnInitialUpdate()从不调用)。

我需要做什么才能让它工作?

这是有效的(测试选项卡):

这不会(除了添加带有空白窗口的选项卡)。

0 投票
0 回答
65 浏览

c++ - 如何在 MFC TabControl 中将焦点边框绘制到特定选项卡

我试图手动将焦点边框设置为使用SetCurSel()API 选择的选项卡。但是在这样做的同时,我还想设置键盘焦点(如图所示的选项卡周围的虚线边框焦点)。我所能实现的只是使用SetCurSel().

处于键盘焦点时应用于选项卡控件的焦点边框 在我的项目中,我不希望TCN_SELCHANGING发送,这就是我使用SetCurSel()而不是SetCurFocus()调用TCN_SELCHANGINGTCN_SELCHANGE通知消息的原因。

目前在我的代码中,我正在覆盖LBUTTON消息以控制选项卡选择,并且我会SetCurSel()从那里调用。

上面代码的问题是它会改变选项卡选择,但没有改变焦点。我不能SetCurFocus()在这里使用,因为我不想干扰TCN_SELCHANGING. 是否有任何直接消息调用或函数调用将焦点设置到特定选项卡?