vc控件消息传递问题
现状: 我用Atl做了一个控件CMyCtrl,控件上有个Edit文本框.
目的: 我在Edit内填写几个字,然后想用方向键控制光标在文本框内移动.
现象:
1.当我用vc,vb,C#之类的微软家的东东制作调用demo时.按一下方向键(如VK_LEFT)一次一个字符,光标移动很正常.
在CMyCtrl的PreTranslateAccelerator(LPMSG pMsg, HRESULT& hRet)函数内跟踪,在收到VK_LEFT时:
GetFocus到的窗体句柄正是-----------------Edit框
同时pMsg->hwnd中提到的处理者的句柄也是---Edit框
2.当我用delphi写个调用的demo时,怎么按方向键Edit内的光标也不反应.
在CMyCtrl的PreTranslateAccelerator(LPMSG pMsg, HRESULT& hRet)函数内发现,在收到VK_LEFT时:
GetFocus到的窗体句柄是-----------------Edit框句柄
而pMsg->hwnd中提到的处理者的句柄是-----控件CMyCtrl的句柄.
于是,我在PreTranslateAccelerator下:
SendMessage(::GetFocus(),WM_KEYDOWN,VK_LEFT,0);
结果Edit内得到光标终于动了,可是按一下方向键光标一次跑俩字符,kao!
不知道这个问题是在VC里面提问还是delphi里提问,作为vc coder先在这里泡泡,看能有收获不?
[解决办法]
父窗口类的PreTranslateMessage里过滤WM_KEYDOWN消息
[解决办法]
基于com的应该不会有这样的问题吧。