问题标签 [cbutton]

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 投票
2 回答
78 浏览

c++ - 如何检查窗口中Row的长度或宽度是否大于其父窗口C ++的宽度

如果行的宽度超过其父窗口的宽度,我想将复选框的现有文本包装成多行。我不确定该怎么做。

我要显示复选框字符串的图像

裁剪字符串的图像,仅在调整窗口大小或最大化时显示

0 投票
2 回答
383 浏览

mfc - On Update 命令不适用于 MFC 中动态创建的按钮

在我的代码中,我在 OnCreate() 的视图类中添加了按钮。我包括了 On Command 和 On Update COMmand 功能。当我单击按钮时,这里的命令功能正在工作。但是 On Update COMmand 不起作用。我使用此 OnUpdateCommand() 更新按钮的按下状态。

在 OnCreate()

这些按钮的消息映射。

On 命令和 OnUpdatecommand 函数:

在 Zoomin 和 Zoomout 功能中,OnUpdateCommnad 都不起作用。

0 投票
2 回答
92 浏览

c++ - MFC 计算控件的高光、阴影等的算法或函数是什么?

我已经创建了一个ColorButton子类CButton,在样式中设置BS_OWNERDRAW标志。

它工作正常:我可以设置它的文本、背景等。

但是我不想手动设置次要颜色(高光、阴影等)。我有一个启发式方法,可以根据背景为文本选择白色或黑色。我可以对其他次要颜色做同样的事情,但我的公式会与 Windows 所做的不同,因为背景颜色相同,因此看起来很奇怪。所以:

问题:有什么方法可以找出 WindowsGetSysColor(COLOR_BTNSHADOW)在给定背景颜色的情况下会返回什么?

为了预期我看到的答案CMFCButton允许自定义颜色而不创建整个子类。我再次看到的允许设置每种颜色的微观管理,但不是我正在寻找的高级能力。我可能宁愿坚持我的解决方案,因为它已经在运行,并且适用于 XP 及更高版本。(这是一个免费软件实用程序,所以谁知道旧操作系统用户可能拥有什么。)也就是说,如果有一个CMFCButton解决方案也会引起人们的兴趣。

0 投票
1 回答
106 浏览

mfc - MFC:未调用 OnNcCreate();需要为 CButton 子类设置 BS_OWNERDRAW 标志

我不是 MFC 方面的专家,但在过去 15 年多的时间里,我做了十几个自定义控件。我刚刚CButton用自定义图形制作了一个。

问题是:我当然需要BS_OWNERDRAW被设置。我有一个OnNcCreate()方法,我已经剪切和粘贴了 15 年以上,它一直在我的自定义控件中工作,但由于某种原因,它现在没有被调用。

除了我第一次尝试编写自定义控件时OnNcCreate()最终设置的地方之外,我没有兴趣甚至不了解。BS_OWNERDRAW

问题:什么会阻止OnNcCreate()被调用?或者,我可以或应该设置另一个地方BS_OWNERDRAW吗?

工人阶级定义为:

非工作的定义为:

因此,他们都对方法进行了原型设计:

该方法的编写方式相同(类名除外):

该对话框使用 Visual Studio 2017 对话框编辑器作为 CustomControl 的好类和坏类。好类和坏类都有扩展样式 0x0 和样式 0x50010000。er Disabled=False、Help ID=False、Visible=True、Class=Good 或 Bad(根据需要)。

运行应用程序时调用每个类的RegisterControlClass()方法:

(有趣的是:我注意到CGood,派生自CStatic,错误地在那里有“按钮”并且工作正常;如果我更改为“静态”,它就会停止工作。我稍后会调查。坏类有“按钮”,确实是CButton子类。)

我为确认问题所做的事情:当我从 中删除 时BS_OWNERDRAWCGood::OnNcCreate()它停止调用DrawItem(). 所以我确定这就是设置这个标志的地方。

放置一个断点CGood::OnNcCreate()并且CBad::OnNcCreate(),CBad 根本不会被调用。

我在互联网上找到了设置 、 和 的示例BS_OWNERDRAW,但PreSubclassWindow()这些都不起作用,在某些情况下,出于我认为我理解的原因。(例如,您不能只在 OnCreate() 中设置标志并调用超类方法,因为它最终不是从您提供的参数而是从其他来源获取标志。)OnCreate()CreateEx()

我已经尝试将 CBad 的超类更改为 CStatic,但仍然没有调用 OnNcCreate()。

我已经尝试BS_OWNERDRAW在对话框中进行设置,OnInitDialog()并且确实可以正确绘制 CBad 按钮子类。所以我知道我不是偶然用其他子类等创建它们的。

0 投票
1 回答
680 浏览

c++ - 从资源 id 获取 CButton 控件名称?

我正在使用 C++ MFC,并创建了一个带有 CButtons 的简单对话框,每个 CButtons 都在 .rc 脚本文件中使用其 .bitmap 文件和资源 ID (ID_BUTTON*) 进行映射。

我的 .rc 文件中存在类似的行,在DIALOG描述中:

在我的项目中,我试图获取每个CButton对象的资源 ID。我这样做了:

但是如何进一步使用我的资源 ID 来获取CButton控制文本值?这意味着:

如果没有,有没有具体的获取方式?

0 投票
1 回答
472 浏览

mfc - 如何让 CMFCButton 看起来像标准复选框?

彩色背景上的标准 MFCCButton复选框如下所示:

复选框上的色边 在此处输入图像描述

我想摆脱灰色边缘,但不能让它消失。无论我如何设置控件的大小,它仍然会出现。

将其更改为 anCMFCButton给出了这个:

未经检查 检查

这很好,它摆脱了边距,除了现在没有复选标记。我需要那个复选标记。

有什么方法可以复选标记获得干净的外观?我曾想过将标准图像集传递给CMFCControl::SetImage(),但我不知道如何获取它们。我知道我可以自己画所有东西,但我试图避免重新发明轮子。

我知道这里有很多类似的问题,但我找到的答案似乎都不适用。我发现的最接近的是:一劳永逸:如何在 Windows API 中获得完全透明的复选框、按钮、单选按钮等,而不是黑色背景?; 但是第一个答案非常神秘,第二个答案是一大段代码,看起来有点矫枉过正。

0 投票
1 回答
735 浏览

c++ - 在类构造函数中使用 MFC 按钮控件 EnableWindow 方法时“调试断言失败”

我正在使用 Visual Studio 2019 并构建 C++ 桌面应用程序。我有一个从 CDialogEx 继承的对话框类。在这个类中,我有几个按钮,即 CButton 作为成员。当我在类构造函数中使用 EnableWindow 方法时,它会报告:

调试断言失败!程序 C:\WINDOWS\SYSTEM32\mfc140ud.dll 文件:d....\winocc.cpp 第 345 行

如果我将其注释掉,则应用程序运行良好。知道为什么我有这个错误吗?我想做的就是在对话框出现后立即禁用按钮——这就是我在构造函数中使用此方法的原因。

在此处输入图像描述

0 投票
0 回答
25 浏览

button - CButton 加载 HBITMAP 并隐藏普通按钮背景

我有一个 CButton 对象。我在资源编辑器中添加了一个位图文件。我执行以下操作:

位图实际上是加载并应用到按钮上的,但是您可以清楚地看到它后面的常规按钮背景。忽略按钮背景与周围区域颜色不同的事实。

在此处输入图像描述

0 投票
0 回答
43 浏览

windows - CButton 向祖先发送 WM_PARENTNOTIFY 消息,但 CMFCButton 不发送。为什么?

我正在开发一个严重依赖 MFC 功能的 Windows 应用程序(使用 VS 2019 构建)。我有一个类派生自CWnd包含对象(子对象)的类,这些对象(子对象)在该类的处理程序中CMFCButton动态定义。OnCreate我希望CMFCButton对象将WM_PARENTNOTIFY消息发送给它的祖先,以便他们可以对鼠标事件进行一些额外的处理,但他们没有。我尝试将按钮类型更改为CButton类,并注意到它WM_PARENTNOTIFY按预期发送。CMFCButton和使用所有相同的CButton参数定义/创建。使用CButton似乎解决了这个问题,但我也利用扩展CMFCButton功能来控制按钮的外观。

谁能解释一下这两种按钮类型的行为变化以及我如何才能CMFCButtons发送WM_PARENTNOTIFY消息?

0 投票
1 回答
82 浏览

mfc - 如何激活位于禁用窗口 (CWnd) 中的按钮 (CButton)?

我有这个代码:

在哪里:

  • this=我的派生CWnd
  • rc =CRect按钮位置
  • BTN_CMT= 按钮 ID

当前上下文:如果我通过调用
禁用父级,即使我调用按钮 ( ) 上的函数,后者仍保持禁用状态;因此,它没有任何作用:单击,工具提示,... 我试图删除,但没有成功CWndEnableWindow(FALSE)EnableWindow(TRUE)m_pBtnCom->EnableWindow(TRUE)
WS_CHILD

问题:当窗口(我的代码中
的参数)被禁用时,是否可以激活按钮?this