当我的MultiLineEdit控件处于焦点时,我的WM_KEYDOWN不起作用

时间:2010-12-30 01:23:46

标签: api assembly

我使用名为CLS1

的注册类创建了一个窗口
invoke CreateWindow,addr CLS1,addr title,WS_OVERLAPPED,
10,10,300,300,NULL,NULL,hInstance,NULL
mov hwnd,ax

我的窗户上有一个像这样的人:

invoke CreateWindow,addr clsed,NULL,WS_CHILD or WS_VISIBLE or ES_MULTILINE 
or ES_AUTOVSCROLL or WS_BORDER or WS_TABSTOP,10,10,280,250,hwnd,123,hInstance,NULL

和我的消息循环:

.while TRUE
  invoke GetMessage,addr msg,NULL,0,0
  .break .if (ax == 0)
  invoke IsDialogMessage, hwnd,addr msg
  .if (!ax)
     invoke TranslateMessage,addr msg
     invoke DispatchMessage,addr msg
  .endif
 .endw

在我的WndProc中,我希望(测试时)WM_KEYDOWN消息有效,并在按下字母'A'时显示消息框。所以,我试过这个:

.if (message == WM_KEYDOWN)
   .if (wParam == 41h)        ;41h = A or a
      invoke MessageBox,NULL,addr keypress,addr title,48
   .endif

但它只是不起作用!

如果有人有任何解决方案......请帮助我。

对不起我的英语......我不是美国人(笑)

1 个答案:

答案 0 :(得分:0)

你在为16位窗口写作吗?如果没有,检查16位返回值和使用16位句柄是不对的:

mov hwnd,ax
.break .if (ax == 0)
.if (!ax)

使用 eax ,事情可能会更好。