- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试在 CMfcButton 上显示工具提示。当我的代码运行 SetToolTip() 时,应用程序崩溃。
BOOL CGenerationDlg::OnInitDialog()
{
BOOL bret = CPropertyPage::OnInitDialog();
m_pButtonExport = (CMFCButton *)GetDlgItem(IDC_BTN_EXPORTE_BILAN);
m_pButtonExport->EnableFullTextTooltip();
m_pButtonExport->SetTooltip(L"my tooltip");
return bret;
}
void CKenoDlg::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
}
这是我的头文件:
// KenoDlg.h : fichier d'en-tête
//
#pragma once
#include "keno.h"
#include "AboutDlg.h"
// boîte de dialogue CKenoDlg
class CKenoDlg : public CPropertyPage
{
// Construction
public:
CKenoDlg(CWnd* pParent = NULL); // constructeur standard
CAboutDlg* myDialog;
// Données de boîte de dialogue
enum { IDD = IDD_KENO_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // Prise en charge de DDX/DDV
CMFCButton * m_pButtonExport;
// Implémentation
protected:
HICON m_hIcon;
// Fonctions générées de la table des messages
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedBtnGenerate();
afx_msg void OnBnClickedBtnExport();
afx_msg void OnStnClickedStaticAbout();
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
};
这是我的错误:
有什么想法吗?
非常感谢:)
最好的问候,
最佳答案
试试这个:
更改标题以定义 CMFCButton
实例而不是指针:
class CKenoDlg : public CPropertyPage
{
// ... existing code ...
protected:
virtual void DoDataExchange(CDataExchange* pDX); // Prise en charge de DDX/DDV
CMFCButton m_pButtonExport;
// ... existing code ...
};
然后按如下方式更改您的 DoDataExchange
函数:
void CKenoDlg::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
DDX_Control(pDX, IDC_BTN_EXPORTE_BILAN, m_pButtonExport);
}
最后,在 OnInitDialog
中,执行如下操作:
BOOL CGenerationDlg::OnInitDialog()
{
BOOL bret = CPropertyPage::OnInitDialog();
m_pButtonExport.EnableFullTextTooltip();
m_pButtonExport.SetTooltip(L"my tooltip");
return bret;
}
之所以需要这样做而不是使用指针,是因为 MFC 必须将控件子类化为 CMFCButton
而不是默认的 CButton
。当您在 DoDataExchange
中使用 DDX
宏时,这是在 OnInitDialog
的默认实现调用 UpdateData
时在幕后完成的>,它依次调用 DoDataExchange
并且 - 如果我没记错的话 - 在第一次通过时,对话框控件被子分类为正确的类型。
当您使用指针时,按钮控件与您使用它的类型之间没有链接,实际类型与预期类型之间存在不匹配,这就是崩溃的原因。
如果您使用 VS2012 向导从对话框设计器添加变量(右键单击对话框控件并选择添加变量),它将在头文件中创建成员变量声明并将添加 DDX
宏到 DoDataExchange
函数。然后您可以选择更改成员变量的类型,例如从 CButton
到您自己的 CButton
派生类之一。
关于c++ - CMFCButton.SetToolTip() 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20128498/
我正在尝试在 CMfcButton 上显示工具提示。当我的代码运行 SetToolTip() 时,应用程序崩溃。 BOOL CGenerationDlg::OnInitDialog() { B
在运行mp3播放器时,它在某些歌曲上崩溃了。 考虑到这一点,当我用str.length()== 128调用setToolTip(str)时,它不是播放器本身,而是java TrayIcon类。 我写了
我环顾四周并查看了这里的各种主题。我发现最接近我正在尝试做的事情的是这个: Hovering over JButtons and displaying a message 基本上我正在尝试替换butt
如何使工具提示中文本的字体大小和颜色与按钮的字体大小和颜色发生变化?它一直显示为按钮的大小/字体,而不是它自己的。另外,如何让文本“离开程序”真正适合工具提示? 我试过这个方法,但没用: Settin
我在 java 类中定义了一个操作,并在 plugins.xml 文件中进行了键绑定(bind)和绑定(bind)。当我第一次启动我的应用程序时,我在工具提示中看到我的按键绑定(bind)(这就是它应
我的表单中有几个按钮,它们的用途会根据某些事件以编程方式更改(具体来说,从“添加”到“删除”)。 我想更改工具提示的文本以反射(reflect)此功能更改,但是当调用 SetToolTip 时,它似乎
我正在尝试为我的 Qt 项目使用土耳其语翻译文件。我使用 Qt Linguist 生成 .ts 文件。问题是当我在我的应用程序中加载翻译文件时,每当我单击 QMenuBar 的任何项目时都会出现段错误
以下代码在 debian jessie 中运行良好,但在 debian stretch 中运行不佳。该代码在系统托盘中显示图标。在 Jessie 中,它正确显示了工具提示,但在 Debian Stre
我是一名优秀的程序员,十分优秀!