gpt4 book ai didi

c++ - CMFCButton.SetToolTip() 崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:29 25 4
gpt4 key购买 nike

我正在尝试在 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);
};

这是我的错误:

enter image description here

有什么想法吗?

非常感谢:)

最好的问候,

最佳答案

试试这个:

更改标题以定义 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com