1:建立单文档SDI 应用程序
2:增加CTestView的WM_CHAR和WM_KEYDOWN的响应
3:void CTestView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
MessageBox("OnChar!"); // 1
int a=1; // 2
CView::OnChar(nChar, nRepCnt, nFlags);
}
void CTestView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
` MessageBox("KeyDown!"); //3
int b=1; //4
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}MSDN上说,WM_CHAR消息在WM_KEYDOWN后,WM_KEYUP前.
按理说一个按键产生后,先执行OnChar(),然后OnKeyDown().可是上述执行顺序为什么是 3 1 2 4.为什么不是 3 4 1 2.??
多谢高手!
2:增加CTestView的WM_CHAR和WM_KEYDOWN的响应
3:void CTestView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
MessageBox("OnChar!"); // 1
int a=1; // 2
CView::OnChar(nChar, nRepCnt, nFlags);
}
void CTestView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
` MessageBox("KeyDown!"); //3
int b=1; //4
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}MSDN上说,WM_CHAR消息在WM_KEYDOWN后,WM_KEYUP前.
按理说一个按键产生后,先执行OnChar(),然后OnKeyDown().可是上述执行顺序为什么是 3 1 2 4.为什么不是 3 4 1 2.??
多谢高手!
解决方案 »
- 做面向应用的界面软件开发,用什么语言比较好啊?
- ADO连不上数据库?运行程序时出现:Microsoft OLE DB Provider for SQL Server 用户登录‘sa’失败
- 调用2345好压来压缩解压文件,进度条的进度怎么控制,如果是大批量处理怎么弄
- 请教大侠们关于宽字符的问题
- 网络 代理服务器 编程 (4-18结贴)
- 求教怎样在ADO中获得日期,计算2者之间的天数!
- 怎样播放从串口传来的声音数据??急!急!
- 谁知道哪里有歌词词库,谢谢 急
- 请教输入法编程UI方面的问题
- 那个早排被人骂到狗血淋头的“软件工程硕士”不知现在有没有改善了呢?
- 怎样在加载DLL时自动弹出对话筐(不是通过输出函数调用)
- 在CFormView加入CListCtrl,如何开程序开始后初始化ListCtrl的内容?
-_-b
此猜测,建立在认为MessageBox()函数里面有PeekMessage()之类的操作的基础上……
此猜测,建立在认为MessageBox()函数里面有PeekMessage()之类的操作的基础上……
..........即使是MessageBox("KeyDown!")返回了,接着也应该执行 //4,然后再执行OnChar().
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
这类的语句。当OnKeyDown执行的时候,MessageBox("KeyDown")先执行,int b=1需要等待MessageBox("KeyDown")返回。由于你未来得及点确定的时候,WM_CHAR消息到达,在MessageBox("KeyDown")执行的内部,被上面的代码处理了这个消息,这个时候MessageBox("KeyDown")必定要等待OnChar()函数执行完毕才能返回。个人见解,自认为很合理……
如果想知道原理只有看代码,现在没有代码,就只能从现象看本质,如果MessageBox()的代码的确是如上猜测的,的确会是你先在遇到的这个效果!