hur.cn - 华软网

 热门搜索

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

  作者:未知    来源:网络    更新时间:2011/6/10
C++">
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又恢复了功能,于是我就想不通了,是哪错了..
大家帮忙看下,谢了哈~
---华软 网友回答---
诶.代码传上来有点小变形..
顺带问下,VC 2010是不是没有消息断点这个功能了啊?..
---华软网友回复---
C++">

else
        return FALSE;

改为 return CDialog::PreTranslateMessage(pMsg);

你判断按键时,最好先判断一下消息类别,比如
if (pMsg->Message == WM_KEYDOWN)
---华软网友回复---
1、#2 说得对,需要调用缺省的 PreTranslateMessage

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

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

4、建议 PostMessage 定义一个消息,把功能实现在别的函数中
---华软网友回复---
感觉逻辑上没什么问题,按照2楼的方法试试吧      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。