combobox是不是没法捕获回车的消息?

brant 2004-05-12 10:25:50
为什么我在combo里输入回车,都被对话框响应了?即使输入焦点combo也没用?

谢谢
...全文
202 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
IFoo 2004-05-12
  • 打赏
  • 举报
回复
是啊,你得得到edit的句柄

GetComboBoxInfo
ygzdev 2004-05-12
  • 打赏
  • 举报
回复
是不是因为combo还有子的edit和list的原因,只是疑问?你可以试试
brant 2004-05-12
  • 打赏
  • 举报
回复
有兴趣可以试试这段代码,没有反应,我试了很久了。

BOOL CTestenterDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN)
{
if(pMsg->wParam==VK_RETURN)
if(pMsg->hwnd == GetDlgItem(IDC_COMBO1)->m_hWnd )
{
MessageBox("aa");
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
brant 2004-05-12
  • 打赏
  • 举报
回复
上面两位,我采用的就是这个方法,但实际上,
if(pMsg->hwnd == GetDlgItem(IDC_COMBO1)->m_hWnd )
{
//这里的代码从来不执行
}

请问为什么?输入焦点在上面也不行。
lixiaosan 2004-05-12
  • 打赏
  • 举报
回复
BOOL CTest6Dlg::PreTranslateMessage(MSG* pMsg)
{

if( pMsg->message == WM_KEYDOWN )
{
switch( pMsg->wParam )
{
case VK_RETURN:
if(pMsg->hwnd == GetDlgItem(IDC_COMBO1)->m_hWnd )
{
//这里添加你按回车后的代码
}

return TRUE;

}
}
return CDialog::PreTranslateMessage(pMsg);
}
zhucde 2004-05-12
  • 打赏
  • 举报
回复
对话框内回车键默认响应的是OnOk(),
如果你想改变,得用PreTranslateMessage
sunwm 2004-05-12
  • 打赏
  • 举报
回复
我在用FORMVIEW生成的单文档窗口中放置多个(譬如三个会更多)个控件,其中有一个文本编辑控件一个按钮控件(TABORDER: 先到文本控件接着到按钮),当焦点在按钮上时按下回车键时我把焦点设回文本控件,然后在用TAB键回到按钮 此时再按下回车键时,就不会有响应了没调用按钮的处理函数. 请各位帮忙我困惑了好久.
lixiaosan 2004-05-12
  • 打赏
  • 举报
回复
:)
brant 2004-05-12
  • 打赏
  • 举报
回复
多谢各位,

to ifoo,我确实没初使化那个结构,我以为那个函数可以自己填充好数据呢,

to 小三 ,谢啦,程序ok
brant 2004-05-12
  • 打赏
  • 举报
回复
ft 给不了分??

2,10,0,0,2,3,0,3,3,3,21,0,3,0
贴子回复次数大于跟给分次数
IFoo 2004-05-12
  • 打赏
  • 举报
回复
我想你忘记初始化cbi了.

COMBOBOXINFO cbi;
cbi.cbSize = sizeof cbi;

if(!GetComboBoxInfo(GetDlgItem(IDC_COMBO1)->GetSafeHwnd(),&cbi))
{
AfxMessageBox("getcomboboxinfo fail");
}

::SetWindowText(cbi.hwndItem,"a;kljdf");

没问题
lixiaosan 2004-05-12
  • 打赏
  • 举报
回复
用得着COMBOBOXINFO么?
brant 2004-05-12
  • 打赏
  • 举报
回复
lixiaosan(小三) 的程序运行成功,谢谢。
IFoo 2004-05-12
  • 打赏
  • 举报
回复
哦?我试试.
brant 2004-05-12
  • 打赏
  • 举报
回复
ft,我真愚昧啊,谢谢IFoo。

不过坏消息是,cbi中的每个窗口句柄我都试了,还是没法得到输入焦点。

why~~~!
lixiaosan 2004-05-12
  • 打赏
  • 举报
回复
combobox控件,由一个edit编辑框和一个下拉列表框组成。搞忘这点了,没有测试就给你了。
见谅!
BOOL CTest6Dlg::PreTranslateMessage(MSG* pMsg)
{

if( pMsg->message == WM_KEYDOWN )
{
switch( pMsg->wParam )
{
case VK_RETURN:
CEdit *pEdit = (CEdit*)m_combo1.GetWindow(GW_CHILD);
if(pMsg->hwnd == pEdit->m_hWnd )
{
GetDlgItem(IDC_EDIT1)->SendMessage(WM_KILLFOCUS, 0, 0);
GetDlgItem(IDC_EDIT2)->SetFocus();

}

return TRUE;

}
}
return CDialog::PreTranslateMessage(pMsg);
}
GreenXML 2004-05-12
  • 打赏
  • 举报
回复
你看看我的历史就知道了!!我的上面全有非常全的代码啊!·
IFoo 2004-05-12
  • 打赏
  • 举报
回复
最好是采用前一种,否则你还得delete
IFoo 2004-05-12
  • 打赏
  • 举报
回复
faint,你的pcbi没分配内存啊!!

COMBOBOXINFO cbi;
::GetComboBoxInfo(m_gender_ctl.m_hWnd,&cbi);

or

COMBOBOXINFO *pcbi = new COMBOBOXINFO;
brant 2004-05-12
  • 打赏
  • 举报
回复
郁闷死我了,谁有办法??

switch(pMsg->wParam)
{
case VK_RETURN:
COMBOBOXINFO *pcbi=NULL;
::GetComboBoxInfo(m_gender_ctl.m_hWnd,pcbi);
ASSERT(pcbi->hwndItem);//这一步就坏掉了

if(pcbi->hwndItem==pMsg->hwnd)
{
m_input_bt.SetFocus();
return TRUE;
}
}

15,978

社区成员

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

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