菜鸟求助:点击对话框中的按钮无反应

贾谷瑶 2015-10-20 08:47:51
LeftFindDlg.cpp:

void CLeftFindDlg::OnBnClickedLeftfindButton()
{
MessageBox(_T("test"));
}


BEGIN_MESSAGE_MAP(CLeftFindDlg, CDHtmlDialog)
ON_BN_CLICKED(IDC_LeftFind_Button, &CLeftFindDlg::OnBnClickedLeftfindButton)
END_MESSAGE_MAP()

LeftFindDlg.h:

#pragma once

#ifdef _WIN32_WCE
#error "CDHtmlDialog is not supported for Windows CE."
#endif

// CLeftFindDlg dialog

class CLeftFindDlg : public CDHtmlDialog
{
DECLARE_DYNCREATE(CLeftFindDlg)
public:
CLeftFindDlg(CWnd* pParent = NULL); // standard constructor
virtual ~CLeftFindDlg();
// Overrides
HRESULT OnButtonOK(IHTMLElement *pElement);
HRESULT OnButtonCancel(IHTMLElement *pElement);
// Dialog Data
enum { IDD = IDD_LeftFind_Dialog, IDH = IDR_HTML_LEFTFINDDLG3 };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
DECLARE_DHTML_EVENT_MAP()
public:
DECLARE_EVENTSINK_MAP()
afx_msg void OnBnClickedLeftfindButton();
};

刚开始接触MFC,对其运行机制不是很了解,各路大神能帮我看看是什么原因吗?
...全文
452 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
信阳毛尖 2015-10-20
  • 打赏
  • 举报
回复
CDialog* dlg = new CDialog; dlg->Create(MAKEINTRESOURCE(IDD_LeftFind_Dialog)); dlg->ShowWindow(1); ------------------------------------------------------------------------------------ 即便是用非模态的,也不是new CDialog,而是new CLeftFindDlg 啊
信阳毛尖 2015-10-20
  • 打赏
  • 举报
回复
对话框也得重建啊! 哎,怎么说呢,正常情况下,你即便是使用CDHtmlDialog ,在上面拖放一个按钮,并绑定click消息,运行起来单击那个按钮,肯定会执行click消息处理函数的!!!! 你还是把工程全部删掉,重新新建工程来一遍吧
贾谷瑶 2015-10-20
  • 打赏
  • 举报
回复
明白是怎么回事了: 我在打开对话框的时候用的是这种方式:

        CDialog* dlg = new CDialog;
	dlg->Create(MAKEINTRESOURCE(IDD_LeftFind_Dialog));
	dlg->ShowWindow(1);
改成这种方式就好了:

        CLeftFindDlg dlg;
	dlg.DoModal();
至于为什么就不知道了
贾谷瑶 2015-10-20
  • 打赏
  • 举报
回复
引用 9 楼 lsq19871207 的回复:
enum { IDD = IDD_LeftFind_Dialog }; ---------------------------------------------------- 对话框资源你是重建的还是用以前的??
对话框用的以前的,类是重建的
信阳毛尖 2015-10-20
  • 打赏
  • 举报
回复
enum { IDD = IDD_LeftFind_Dialog }; ---------------------------------------------------- 对话框资源你是重建的还是用以前的??
贾谷瑶 2015-10-20
  • 打赏
  • 举报
回复
重新建了CDialog,还是不可以,在响应函数里设置了断点,也进不来,把代码全部粘出来吧! .h:

#pragma once


// CLeftFindDlg dialog

class CLeftFindDlg : public CDialog
{
	DECLARE_DYNAMIC(CLeftFindDlg)

public:
	CLeftFindDlg(CWnd* pParent = NULL);   // standard constructor
	virtual ~CLeftFindDlg();

// Dialog Data
	enum { IDD = IDD_LeftFind_Dialog };

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnBnClickedCancel();
	afx_msg void OnBnClickedLeftfindButton();
	virtual BOOL OnInitDialog();
};
.cpp:

// LeftFindDlg.cpp : implementation file
//

#include "stdafx.h"
#include "net_test2.h"
#include "LeftFindDlg.h"


// CLeftFindDlg dialog

IMPLEMENT_DYNAMIC(CLeftFindDlg, CDialog)

CLeftFindDlg::CLeftFindDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CLeftFindDlg::IDD, pParent)
{

}

CLeftFindDlg::~CLeftFindDlg()
{
}

void CLeftFindDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CLeftFindDlg, CDialog)
	ON_BN_CLICKED(IDCANCEL, &CLeftFindDlg::OnBnClickedCancel)
	ON_BN_CLICKED(IDC_LeftFind_Button, &CLeftFindDlg::OnBnClickedLeftfindButton)
END_MESSAGE_MAP()


// CLeftFindDlg message handlers

void CLeftFindDlg::OnBnClickedCancel()
{
	// TODO: Add your control notification handler code here
	OnCancel();
}

void CLeftFindDlg::OnBnClickedLeftfindButton()
{
	// TODO: Add your control notification handler code here
	MessageBox(_T("test"));
}

BOOL CLeftFindDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO:  Add extra initialization here

	return TRUE;  // return TRUE unless you set the focus to a control
	// EXCEPTION: OCX Property Pages should return FALSE
}

信阳毛尖 2015-10-20
  • 打赏
  • 举报
回复
不过建议你还是尝试手动改吧:

class CLeftFindDlg : public CDialog
{
    DECLARE_DYNCREATE(CLeftFindDlg)
public:
    CLeftFindDlg(CWnd* pParent = NULL);   // standard constructor
    virtual ~CLeftFindDlg();

// Dialog Data
    enum { IDD = IDD_LeftFind_Dialog};
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    virtual BOOL OnInitDialog();
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnBnClickedLeftfindButton();
};
cpp中你对应着.h自己改吧
信阳毛尖 2015-10-20
  • 打赏
  • 举报
回复
引用 5 楼 u014031708 的回复:
[quote=引用 4 楼 lsq19871207 的回复:] CDHtmlDialog 还是 CDialog ? 你这个对话框是要显示HTML网页吗? IDC_LeftFind_Button这个按钮是你自己拖上去的还是网页中某一元素的ID ? 目测是你自己拖上去的啊
是CDHtmlDialog,建类的时候建错了,能把CDHtmlDialog直接改成CDialog吗?[/quote] 对!你要是不是很清楚CDHtmlDialog和CDialog的区别,统统删了重新建立工程吧
贾谷瑶 2015-10-20
  • 打赏
  • 举报
回复
引用 4 楼 lsq19871207 的回复:
CDHtmlDialog 还是 CDialog ? 你这个对话框是要显示HTML网页吗? IDC_LeftFind_Button这个按钮是你自己拖上去的还是网页中某一元素的ID ? 目测是你自己拖上去的啊
是CDHtmlDialog,建类的时候建错了,能把CDHtmlDialog直接改成CDialog吗?
信阳毛尖 2015-10-20
  • 打赏
  • 举报
回复
CDHtmlDialog 还是 CDialog ? 你这个对话框是要显示HTML网页吗? IDC_LeftFind_Button这个按钮是你自己拖上去的还是网页中某一元素的ID ? 目测是你自己拖上去的啊
贾谷瑶 2015-10-20
  • 打赏
  • 举报
回复
 enum { IDD = IDD_LeftFind_Dialog, IDH = IDR_HTML_LEFTFINDDLG3 };
可能是这句有问题吗?
贾谷瑶 2015-10-20
  • 打赏
  • 举报
回复
引用 1 楼 jennyvenus 的回复:
光看没看出来问题 试试 ON_BN_CLICKED(IDC_LeftFind_Button,OnBnClickedLeftfindButton)
还是没反应啊?
用户 昵称 2015-10-20
  • 打赏
  • 举报
回复
光看没看出来问题 试试 ON_BN_CLICKED(IDC_LeftFind_Button,OnBnClickedLeftfindButton)
用户 昵称 2015-10-20
  • 打赏
  • 举报
回复
MAKEINTRESOURCE 就不用了吧,直接create 你的dlg( 你的dlg的id )。 弄了半天你的问题出在外层。
贾谷瑶 2015-10-20
  • 打赏
  • 举报
回复
引用 13 楼 lsq19871207 的回复:
CDialog* dlg = new CDialog; dlg->Create(MAKEINTRESOURCE(IDD_LeftFind_Dialog)); dlg->ShowWindow(1); ------------------------------------------------------------------------------------ 即便是用非模态的,也不是new CDialog,而是new CLeftFindDlg 啊
是这样子!改了就能用了,大神,分给你了

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧