以前的问题还没解决,重开一贴,继续问:
往一个CEdit中输入字符,并在窗口中显示。当用
OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
MyShowMessage(UINT nChar, UINT nRepCnt, UINT nFlags);
}
由于CEdit截获键盘输入,故主窗口收不到WM_KEYDOWN。
1若是通过从CEdit派生一个类解决,应该怎么做?
2若是用加速键解决,应该怎么做?
3怎么把OnKeyDown的参数传递给PreTranslateMessage?
往一个CEdit中输入字符,并在窗口中显示。当用
OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
MyShowMessage(UINT nChar, UINT nRepCnt, UINT nFlags);
}
由于CEdit截获键盘输入,故主窗口收不到WM_KEYDOWN。
1若是通过从CEdit派生一个类解决,应该怎么做?
2若是用加速键解决,应该怎么做?
3怎么把OnKeyDown的参数传递给PreTranslateMessage?
if( GetFocus()->GetDlgCtrlID() == IDC_EDIT1 )
{
if( pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN )
{
...
}
else if
...
else
return TRUE;
return CDialog::Pre...
}
2)::PostMessage
另外,你的对话框要做成多线程的。
1.if( pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN )
{
...//这里边应该写什么?怎么能把OnKeyDown的三个参数UINT nChar, UINT nRepCnt, UINT nFlags传进pretranslatemessage?
}
2.能讲一下VK_RETURN 是做什么的?MSDN上面查不到这个东东。
多线程还没学呢,能换种方法吗?
现在我最想知道PreTranslateMessage
的用法。MSDN上讲的不详细。
我想在窗口上显示OnKeyDown的参数
信息,怎么能传入PreTranslateMessage??
pMsg->message表示消息
pMsg->wParam当为WM_KEYDOWN消息时,这表示是哪一个键被按下
当你确定为那个键时,你就可以用PostMessage()把这个消息发给主窗口
具体请查看MSDN中WM_KEYDOWN的解释
我的窗口是这样显示的:
void CChildView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CWnd *pframewnd=AfxGetMainWnd();
ShowMessage(_T("WM_KEYDOWN"),nChar,nRepCnt,nFlags);
}
void CChildView::ShowMessage(LPCTSTR pmessage, UINT nChar, UINT nRepCnt, UINT nFlags)
{
CString string;
string.Format("%s%u%u%u",pmessage,nChar,nRepCnt,nFlags);
CClientDC dc(this);
dc.DrawText(string,&m_scroll,DT_CENTER);
}
现在再加上PreTranslateMessage(MSG *pMsg)
如下:不行啊?
你的意思是这样写吗?
BOOL CChildView::PreTranslateMessage(MSG *pMsg)
{
if(GetFocus()->GetDlgCtrlID()==IDC_EDIT)
if( pMsg->message == WM_KEYDOWN&&pMsg->message==VK_RETURN)
{
PostMessage(WM_KEYDOWN,pMsg->wParam);
return TRUE;
}
return CWnd::PreTranslateMessage(pMsg);
}不行啊,问题仍然是CEdit一得到焦点,窗口就不接受消息了。
传给PretranslateMessage????
各位帮帮忙
{
// TODO: Add your specialized code here and/or call the base class
// 以下是捕捉回车消息的代码
int keycode=pMsg->wParam;
CEdit *pEdit=(CEdit *)pListDlg->GetDlgItem(IDC_EDIT_STUDENTID);
if (pEdit==(CEdit *)FromHandle(pMsg->hwnd))
if (pMsg->message==WM_KEYDOWN&&keycode==13) //13是回车键的代码
AfxMessageBox("OK by PreTranslateMessage");
return CRecordView::PreTranslateMessage(pMsg);
}
OnKeyDown的另外两个参数UINT nRepCnt, UINT nFlags还是没有传到
PreTranslateMessage中阿!
我要用AfxMessageBox显示UINT nRepCnt, UINT nFlags怎么办?