我重新写了一个下拉框类,想实现用户选择条目时触发修改事件,然后在继承的子类中的OnEditchange()中来为两个事件写同一个脚本,可是如下却

sunboy_hb 2003-08-24 09:57:57
我重新写了一个下拉框类,想实现用户选择条目时触发修改事件,然后在继承的子类中的OnEditchange()中来为两个事件写同一个脚本,可是如下却不行?
另外,我如果在父类中定义一个自定义事件并定义一个函数框架,在子类中如何继承呢?

父类:
void CUserComboBox::OnSelchange()
{
SendMessage(CBN_EDITCHANGE);
}



子类下拉框的修改事件:
void CDao_testDlg::OnChangetele()
{
bEdited=true;
}
...全文
15 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunboy_hb 2003-08-27
  • 打赏
  • 举报
回复
在父类中定义一个自定义事件并定义一个函数框架,在子类中如何继承呢?
sunboy_hb 2003-08-25
  • 打赏
  • 举报
回复
另外,如果在父类中定义一个自定义事件并定义一个函数框架,在子类中如何继承呢?
sunboy_hb 2003-08-25
  • 打赏
  • 举报
回复
如何触发已经定义给控件的消息呢?
zhouyong0371 2003-08-25
  • 打赏
  • 举报
回复
但是奇怪的是竟然不触发下面的函数

ON_CONTROL_REFLECT(CBN_EDITCHANGE, OnEditchange)

这个消息我也觉得是触发不了
sunboy_hb 2003-08-25
  • 打赏
  • 举报
回复
触发本类中的消息是可以实现的.


LRESULT CUserComboBox::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{

switch(message)
{
case WM_COMMAND:
{
if( ( CBN_SELCHANGE ==HIWORD(wParam) ) )
{
SendMessage(WM_COMMAND,MAKEWPARAM(LOWORD(wParam),CBN_EDITCHANGE),lParam);
}

if(CBN_EDITCHANGE==HIWORD(wParam))
{
MessageBox("comm:editchange");
}
break;
}
default:
;
}

return CComboBox::WindowProc(message, wParam, lParam);
}

但是奇怪的是竟然不触发下面的函数

ON_CONTROL_REFLECT(CBN_EDITCHANGE, OnEditchange)



void CUserComboBox::OnEditchange()
{
::PostMessage(GetParent()->m_hWnd,WM_USER_SELCHANGE,0,0);
}
zhouyong0371 2003-08-24
  • 打赏
  • 举报
回复
我这样实现了一下,可以出发消息。
在UserComboBox.h里边定义消息的ID:
#define WM_COMBO 1001

然后:
void CUserComboBox::OnSelchange()
{
CWnd * pWnd = GetParent();
::SendMessage(pWnd->m_hWnd, WM_COMBO, 0, 0);
}

在ComBoxDeriveDlg.h里边:
#include "UserComboBox.h"
...


CUserComboBox m_MyComboBox; //ComboBox对应的控件变量
...

afx_msg void OnCombo();

ComBoxDeriveDlg.cpp里边:
ON_MESSAGE(WM_COMBO, OnCombo)
...

void CComBoxDeriveDlg::OnCombo()
{
MessageBox("Combo");
}
可以触发的

zhouyong0371 2003-08-24
  • 打赏
  • 举报
回复
不是OnSelchange() 没有执行,而是OnEditchange() 没有被激发
例如我这样写都是不行的:

void CUserComboBox::OnEditchange()
{
// TODO: Add your control notification handler code here
MessageBox("yong");

}

void CComBoxDeriveDlg::OnEditchangeCombo1()
{

MessageBox("zhou");
}

但是

void CUserComboBox::OnSelchange()
{
MessageBox("zhou");
}
确是有结果的,所以我怀疑CBN_EDITCHANGE没有被发出。


下面这样写也没有结果:
void CUserComboBox::OnSelchange()
{
CWnd * pWnd = GetParent();
::SendMessage(pWnd->m_hWnd, CBN_EDITCHANGE, 0, 0);
}
我怀疑没有CBN_EDITCHANGE消息吧?


fengqinggao 2003-08-24
  • 打赏
  • 举报
回复
父类的消息是不是只能调用父类的消息响应函数、而不能触发子类的?我估计是,所以不能触发子类的CDao_testDlg::OnChangetele() 函数

所以如果你只要这个功能的话,不派生也可以啊,就在子类的OnSelchange()函数中直接调用OnChangetele()函数就可以了

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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