OnButtonClicked 不响应

bioruan 2009-11-24 09:15:15
创建了一个Dialog 内有一个button IDC_BUTTON1
还有一个CListctrl mylist
给mylist了一个 ON_BN_CLICKED(IDC_BUTTON1, &mylist::OnBnClickedButton1)消息 通过该消息触发mylist里的事件
void mylist::OnBnClickedButton1()
{
AfxMessageBox(_T("HELLO"),0,MB_OK) ;//没有响应
}


但是如果消息是给mydialog的就可以正常响应
ON_BN_CLICKED(IDC_BUTTON1, &mydialog::OnBnClickedButton1)
void mydialog::OnBnClickedButton1()
{
AfxMessageBox(_T("HELLO"),0,MB_OK) ;//OK
}

请问是为什么?
...全文
293 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
vb748 2009-11-24
  • 打赏
  • 举报
回复
汗,你是不是要倒过来用的:

把mydialog里面的message map 改成这样:

ON_BN_CLICKED(IDC_BUTTON1, &mylist::OnBnClickedButton1)

让他把消息扔给mylist类处理 :)
vb748 2009-11-24
  • 打赏
  • 举报
回复
试试看:
把mylist里面的message map 改成这样:

ON_BN_CLICKED(IDC_BUTTON1, &mydialog::OnBnClickedButton1)

让他把消息扔给mydialog类处理 :)
bioruan 2009-11-24
  • 打赏
  • 举报
回复
列位
我的mylist不是变量,是个继承于CListCtrl的类
class mylist:public CListCtrl
我没有直接在dialog里画一个ClistCtrl
而是独立创建了一个mylist类 然后在dialog的OnInitDialog里通过
mylist.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT,rectlist,this,IDC_LIST1);
mylist.ShowWindow(SW_SHOW);
来显示mylist的,rectlist是mylist在dialog中的位置
voidsky 2009-11-24
  • 打赏
  • 举报
回复
BEGIN_MESSAGE_MAP(Clistbox, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, &Clistbox::OnBnClickedButton1)
END_MESSAGE_MAP()
  • 打赏
  • 举报
回复
ON_BN_CLICKED(IDC_BUTTON1, &mydialog::OnBnClickedButton1)

ON_BN_CLICKED(IDC_BUTTON1, &mylist::OnBnClickedButton1)

注意你的mydialog是个类名,而mylist是个变量名
为何第二个编译通过不得而知

你重载CListCtrl在子类增加OnBnClickedButton1函数应该是没问题的,这里只需要一个函数地址
vb748 2009-11-24
  • 打赏
  • 举报
回复
有这么复杂的事情@@

我以前也遇到过这种,但是我的情况是:

ON_BN_CLICKED(IDC_BUTTON1, CListctrl::OnBnClickedButton1)

这样就解决了的,不知道楼主的可以这样搞不?
bioruan 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xianglitian 的回复:]
ON_BN_CLICKED(IDC_BUTTON1, &mylist::OnBnClickedButton1)
============================================================
这么写居然能通过?!!
你想让mylist有反映可以在OnBnClickedButton1里处理mylist
[/Quote]

这不是我写的,是wizard添加的
向立天 2009-11-24
  • 打赏
  • 举报
回复
ON_BN_CLICKED(IDC_BUTTON1, &mylist::OnBnClickedButton1)
============================================================
这么写居然能通过?!!
你想让mylist有反映可以在OnBnClickedButton1里处理mylist
youyou6115 2009-11-24
  • 打赏
  • 举报
回复
你为什么要这么做呢
Baesky 2009-11-24
  • 打赏
  • 举报
回复
why don't u set a BreakPoint to debug it?
otherwise paste your code here?
bioruan 2009-11-24
  • 打赏
  • 举报
回复
大虾们,该起床啦
xpljj502 2009-11-24
  • 打赏
  • 举报
回复
你为什么非要发给mylist呢。。
你把mylist的OnBnClickedButton1函数要做的内容封装成比如说 fun()
你就在dialog的OnBnClickedButton1里调用mylist的相应函数fun不行么..
  • 打赏
  • 举报
回复
BEGIN_MESSAGE_MAP(CxxxDialog, CDialog)--------上面说的有歧义,应该这样
ON_BN_CLICKED(IDC_BUTTON1, &Clistbox::OnBnClickedButton1)
END_MESSAGE_MAP()
  • 打赏
  • 举报
回复
BEGIN_MESSAGE_MAP(Clistbox, CDialog)-----------这里改成CxxxDialog
ON_BN_CLICKED(IDC_BUTTON1, &Clistbox::OnBnClickedButton1)
END_MESSAGE_MAP()
muzizongheng 2009-11-24
  • 打赏
  • 举报
回复
当然了.

每个消息循环都是在自己的window里, 父窗体的消息泵 你的listctrl不会接受到消息的,
你可以改改, 在上面的消息映射里改成在dlg里处理, 然后在dlg里调用pListctrl->SendMessage发送给listctrl.
bioruan 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 mo229mo 的回复:]
button  IDC_BUTTON1 的父窗口是mydialog,可以通过mydialog将消息转发给mylist
[/Quote]
这位大虾,我现在就是这么干的,但是觉得麻烦,难倒只有父窗口才能收到button的消息?
bioruan 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 vb748 的回复:]
汗,你是不是要倒过来用的:

把mydialog里面的message map 改成这样:

ON_BN_CLICKED(IDC_BUTTON1, &mylist::OnBnClickedButton1)

让他把消息扔给mylist类处理  :)
[/Quote]
不行
mo229mo 2009-11-24
  • 打赏
  • 举报
回复
button IDC_BUTTON1 的父窗口是mydialog,可以通过mydialog将消息转发给mylist

16,551

社区成员

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

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

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