首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让窗口捕获到键盘消息#32770?

如何让窗口捕获到键盘消息#32770?

提问于 2025-08-24 13:37:52
回答 0关注 0查看 6

VBA环境,想要创建一个窗口和控件,发现Edit编辑框创建后无法接收键盘事件,输入的字符会传到Excel的ActiveCell中。如何才能让自己创建的窗口接收到键盘消息呀

代码语言:txt
复制
'1.创建主窗口
Public Sub CreateDataQuery1()
#If VBA7 And Win64 Then
    DQP.Hint = Application.HinstancePtr
#Else
    DQP.Hint = Application.hInstance
#End If
    If IsWindow(DQP.Form) Then DestroyDataQuery1
    Dim DstyleS&: DstyleS = WS_OVERLAPPED Or WS_THICKFRAME Or WS_SYSMENU Or WS_CAPTION Or WS_VISIBLE
    Dim DstyleE&: DstyleE = WS_EX_DLGMODALFRAME
    DQP.Form = CreateWindowEx(DstyleE, "#32770", "我的窗口", DstyleS, 0, 0, 330, 430, Application.hwnd, Nuptr, DQP.Hint, ByVal Nuptr)
    Dim Cret As RECT: GetClientRect DQP.Form, Cret
    DstyleS = WS_CHILD Or WS_VISIBLE Or WS_BORDER Or ES_LEFT Or ES_AUTOHSCROLL
    DQP.Edit = CreateWindowEx(0, "Edit", "", DstyleS, 10, 20, Cret.Right - Cret.Left - 20, 20, DQP.Form, 100, DQP.Hint, ByVal Nuptr)
    DQP.Font = CreateFont(12, 0, 0, 0, 0, 0, 0, 0, 1, 7, 0, 0, 0, "SimSun")
    SendMessage DQP.Edit, WM_SETFONT, DQP.Font, True
    SubClassingDqUsFr1
End Sub
'2.销毁主窗口
Public Sub DestroyDataQuery1()
    UnSubClassingDqUsFr1
    DestroyWindow DQP.Edit: DestroyWindow DQP.Form
    Dim EDQP As DataQueryPtr: DQP = EDQP
End Sub
'4.子类化
Private Sub SubClassingDqUsFr1()
    DQP.Proc = SetWindowLongPtr(DQP.Form, GWL_WNDPROC, AddressOf WindowProcDqUsFr)
End Sub
Private Sub UnSubClassingDqUsFr1()
    If DQP.Proc Then SetWindowLongPtr DQP.Form, GWL_WNDPROC, DQP.Proc
End Sub
#If VBA7 And Win64 Then
    Private Function WindowProcDqUsFr(ByVal hwnd As LongPtr, ByVal msg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As LongPtr
#Else
    Private Function WindowProcDqUsFr(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
#End If
    Select Case msg
        Case WM_CLOSE
            DestroyDataQuery1
            WindowProcDqUsFr = Nuptr
            Exit Function
    End Select
    WindowProcDqUsFr = CallWindowProc(DQP.Proc, hwnd, msg, wParam, lParam)
End Function
#32770接收键盘消息.rar

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档