我用api写的一个程序(全api不用form控件)无法捕获到主窗口下的一个Edit子窗口的WM_KEYUP消息。昨天好多热心的大哥们与我讨论很多,可还是不能解决问题,有没有哪位大侠知道呀,请一定帮帮忙。 我的做法是:在主窗口中做如下消息回调处理: Function WinProc(Hwnd,Msg,Wparam,lParam:longint):longint;stdcall; begin Result:=DefWindowProc(Hwnd,Msg,wparam,lparam); Case Msg of //WM_DESTROY:Close; WM_CLOSE: begin UnRegisterClass(wClass.lpszClassName,hInst); end; WM_COMMAND: if lparam=hMoreBtn then ExpandWindow; WM_KEYUP:messagebox(0,'dd','dd',mb_ok);
对不起,没有这不方便公开的意思,只是没想到,现贴出如下,请帮忙看一下下,先谢了。 ============================== library PassDll; uses Windows,messages; Const Caption='密码窗口'; var theParentWnd,hInst,Handle:integer; hFont,hLabel1,hLabel2,hLabel3,hLabel4,hPassEdit,hMoreBtn,hOKBtn,hCancelBtn:integer; hModPassEdit,hModPass1Edit,hModPass2Edit,hModPassBtn:integer; EditClass,wClass:WndClass; Expand:Boolean; //末展开之控件的状态设置 procedure DisableModPass; begin EnableWindow(hModPassEdit,Expand); EnableWindow(hModPass1Edit,Expand); EnableWindow(hModPass2Edit,Expand); EnableWindow(hModPassBtn,Expand); end; //窗口缩展过程 procedure ExpandWindow; var lR:TRECT; begin GetWindowRect(Handle,lR); if Expand then begin MoveWindow(Handle,lr.Left,lr.Top,300,255,True); SetWindowText(hMoreBtn,'<<收缩窗口'); DisableModPass; end else begin MoveWindow(Handle,lr.Left,lr.Top,300,110,True); SetWindowText(hMoreBtn,'修改密码>>>'); DisableModPass; end; Expand:=Not Expand; end;
Function WinProc(Hwnd,Msg,Wparam,lParam:longint):longint;stdcall; begin Result:=DefWindowProc(Hwnd,Msg,wparam,lparam); Case Msg of //WM_DESTROY:Close; WM_CLOSE: begin UnRegisterClass(wClass.lpszClassName,hInst); end; WM_COMMAND: if lparam=hMoreBtn then ExpandWindow; End; end; Function EditProc(Hwnd,theMsg,Wparam,lParam:longint):longint;stdcall; begin Result:=DefWindowProc(Hwnd,theMsg,Wparam,lParam); Case theMsg of WM_KEYUP:MessageBox(0,'aa','dd',mb_ok); //WM_COMMAND:MessageBox(0,'aa','dd',mb_ok); end; ///MessageBox(0,'aa','dd',mb_ok); end; Function CreateMain(Name:PChar;x,y:integer):HWND; var Wwid,WHig:longint; begin hInst:=GetModuleHandle(nil); wClass.style:=CS_PARENTDC; wClass.lpfnWndProc:=@WinProc; wClass.hInstance:=hInst; wClass.hCursor:=LoadCursor(hInst,IDC_ARROW); wClass.hbrBackground:=COLOR_BTNFACE+1; wClass.lpszClassName:='PassWordDlg-class'; if RegisterClass(wClass)=0 then Exit; //RegEditClass; Wwid:=GetSystemMetrics(SM_CXSCREEN); WHig:=GetSystemMetrics(SM_CYSCREEN); Result:=CreateWindow(wClass.lpszClassName,Name,WS_TABSTOP OR WS_VISIBLE OR WS_SYSMENU, (Wwid-x)div 2,(WHig-y) div 2,x,y,theParentWnd,0,hInst,nil);
end; Function CreateButton(Name:PChar;x1,y1,x2,y2:integer):Hwnd; begin Result:=CreateWindow('Button',Name,WS_CHILD OR WS_VISIBLE OR BS_PUSHLIKE OR BS_TEXT, x1,y1,x2,y2,Handle,0,hInst,nil); end; Function CreateLabel(Name:PChar;x1,y1,x2,y2:integer):HWnd; begin Result:=CreateWindow('Static',Name,WS_CHILD OR WS_VISIBLE OR SS_LEFT, x1,y1,x2,y2,Handle,0,hInst,nil); end; Function CreatePassEdit(Name:PChar;x1,y1,x2,y2:integer):HWnd; begin Result:=CreateWindowEx(WS_EX_CLIENTEDGE,'Edit',Name,WS_CHILD OR WS_TABSTOP OR WS_VISIBLE OR ES_LEFT OR ES_AUTOHSCROLL OR ES_PASSWORD,x1,y1,x2,y2,Handle,0,hInst,nil); end;