如何让自己派生的CComboBox类响应回车事件

ToddSong 2010-12-05 11:49:09
我自己派生了一个类
class CMyComboBoxEx : public CComboBox
在里面他的.h文件里添加了

virtual BOOL PreTranslateMessage(MSG *pMSG);
实现是这样实现的
BOOL CMyComboBoxEx::PreTranslateMessage(MSG *pMSG)
{
if(pMSG->message == WM_KEYDOWN)
{
if(pMSG->wParam == VK_RETURN)
{
MessageBox("sss",NULL,0);
}


}
return CComboBox::PreTranslateMessage(pMSG);
}

但是还是不能响应回车事件 试着添加了
OnKeyDown事件也是不能响应回车事件

/*******************************8/
整体的程序是这样的
我自己在多文档程序里面添加了Dialog ID为IDD_DLG_ADDR 在这个Dialog上添加了一个CComboBox控件ID为IDC_COMBO_ADDR
然后在CMainFrame添加成员变量
CDialogBar m_wndAddr;
CMyComboBoxEx m_BoAddr;
的Oncreate函数里面添加
/*添加地址栏的dialogbar*/
if(!m_wndAddr.Create(this,IDD_DLG_ADDR,WS_VISIBLE|WS_CHILD|CBRS_TOP,IDD_DLG_ADDR))
{/*创建CDialogBar*/
MessageBox(_T("Addr error!"),NULL,0);
return -1;
}
m_wndAddr.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndAddr);
CRect rcAddr;
m_wndAddr.GetClientRect(&rcAddr);
if(!m_BoAddr.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST,rcAddr,&m_wndAddr,IDC_COMBO_ADDR))
{/*创建CComboBox*/
MessageBox(_T("Addr Aombobox error!"),NULL,0);
return -1;
}
...全文
259 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2010-12-28
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖

相关规定详见界面界面版关于版主结帖工作的具体办法
Eleven 2010-12-06
  • 打赏
  • 举报
回复
你的代码貌似没有问题
yihandrensunyong 2010-12-06
  • 打赏
  • 举报
回复
我觉得应该先将Combobox设置焦点,然后再这个窗口上重载PreTranslateMessage()
BOOL CDownLoadDlg::PreTranslateMessage(MSG* pMsg)
{
if((pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN))
{
添加你所要做的处理
RETURN TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
ToddSong 2010-12-06
  • 打赏
  • 举报
回复
自己再顶一下下
ToddSong 2010-12-06
  • 打赏
  • 举报
回复
睡前在自己顶一下
ToddSong 2010-12-06
  • 打赏
  • 举报
回复
谢谢各位 问题已经解决,我删除了dialog上的组合框 就可以了。
Sou2012 2010-12-06
  • 打赏
  • 举报
回复
PreTranslateMessage
ToddSong 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yihandrensunyong 的回复:]

我觉得应该先将Combobox设置焦点,然后再这个窗口上重载PreTranslateMessage()
BOOL CDownLoadDlg::PreTranslateMessage(MSG* pMsg)
{
if((pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN))
{
……
[/Quote]
焦点怎么设置呢?我在网上找了下没找到
谢谢了
ToddSong 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xianglitian 的回复:]

不应该啊
你下断点看看进没进到PreTranslateMessage里
[/Quote]
很奇怪啊 我试了一下 在程序运行的开始进入了这个断点 但是摁下回车的时候并没有进入这个断点
求高手分析一下原因
ToddSong 2010-12-06
  • 打赏
  • 举报
回复
这个我下班再试下
向立天 2010-12-06
  • 打赏
  • 举报
回复
不应该啊
你下断点看看进没进到PreTranslateMessage里

15,978

社区成员

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

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