大家帮忙看下,我这个PreTranslateMessage哪写错了...

Athenacle_ 2011-06-10 11:09:00

BOOL Sell_Tickets::PreTranslateMessage(MSG* pMsg)
{ CWnd *p_wnd_list=GetDlgItem(IDC_Sched); //IDC_Sched是一个CListCtrl
if (pMsg->wParam==VK_RETURN && GetFocus() == p_wnd_list)//判断是否接受了回车键,并且判断焦点是否在列表上
{
int nItem = sched_list.GetNextItem(-1, LVNI_SELECTED);
CString sItemText = sched_list.GetItemText(nItem,0);
BuyTicket buyDlg(sItemText,this);
if (0 == buyDlg.DoModal()){;}//获取在列表上的索引,并生成一个窗口进行处理
return TRUE;
}
else
return FALSE;
}


问题就是在有了这个函数之后,TAB键就失去了作用,是不是还有其他键没效果我也没测试..但只要把这个函数注释掉之后,TAB又恢复了功能,于是我就想不通了,是哪错了..
大家帮忙看下,谢了哈~
...全文
76 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
winning11xuhao 2011-06-11
  • 打赏
  • 举报
回复
感觉逻辑上没什么问题,按照2楼的方法试试吧
lazy_2010 2011-06-11
  • 打赏
  • 举报
回复
1、#2 说得对,需要调用缺省的 PreTranslateMessage

2、使用 GetSafeHwnd 判断是否同一个控件

3、使用 MSG 中的 hwnd 和 ::GetFocus() 进行判断更好

4、建议 PostMessage 定义一个消息,把功能实现在别的函数中
lgxing 2011-06-10
  • 打赏
  • 举报
回复

else
return FALSE;

改为 return CDialog::PreTranslateMessage(pMsg);

你判断按键时,最好先判断一下消息类别,比如
if (pMsg->Message == WM_KEYDOWN)
Athenacle_ 2011-06-10
  • 打赏
  • 举报
回复
诶.代码传上来有点小变形..
顺带问下,VC 2010是不是没有消息断点这个功能了啊?..

16,466

社区成员

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

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

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