请问下,WM_LBUTTONDOWN消息如何使用?
鼠标左键按下的同时没按任何control,没按shift,wParam参数应该填什么?
配合sendmessage向一个按钮控件传送WM_LBUTTONDOWN消息时遇到了错误:
提示DLL调用约定错误
请问正确的写法应该是怎样呢?

解决方案 »

  1.   

    WM_LBUTTONDOWN
    The WM_LBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. WM_LBUTTONDOWN 
    fwKeys = wParam;        // key flags 
    xPos = LOWORD(lParam);  // horizontal position of cursor 
    yPos = HIWORD(lParam);  // vertical position of cursor 
     
    Parameters
    fwKeys 
    Value of wParam. Indicates whether various virtual keys are down. This parameter can be any combination of the following values: Value Description 
    MK_CONTROL Set if the ctrl key is down. 
    MK_LBUTTON Set if the left mouse button is down. 
    MK_MBUTTON Set if the middle mouse button is down. 
    MK_RBUTTON Set if the right mouse button is down. 
    MK_SHIFT Set if the shift key is down. 
    xPos 
    Value of the low-order word of lParam. Specifies the x-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area. 
    yPos 
    Value of the high-order word of lParam. Specifies the y-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area. 
    Return Values
    If an application processes this message, it should return zero. Res
    An application can use the MAKEPOINTS macro to convert the lParam parameter to a POINTS structure. 以上是关于这个消息的说明.看你是想设计为发送一个点击消息?那应该使用POSTMESSAGE:Private Function SendClick(hwnd As Long)
        Dim I As Long
        
        I = PostMessage(hwnd, WM_LBUTTONDOWN, 0, 0)
        I = PostMessage(hwnd, WM_LBUTTONUP, 0, 0)
    End Function
      

  2.   

    既然没有其他按键  直接填写0即可!
    用SendMessage出现问题
    可以用PostMessage滴 呵呵
    PostMessage _Hwnd, WM_LBUTTONDOWN, 0&, MAKEPARAM(18, 29)MAKEPARAM是一个函数 转换坐标的Function MAKEPARAM(LoWord As Integer, HiWord As Integer) As Long
      MAKEPARAM = (HiWord * &H10000) Or (LoWord And &HFFFF&)
    End Function其实就是高低字节的转换
      

  3.   

    先感谢老马哥和小曾哥的回复
    尝试了两位的办法.不过问题依旧.....郁闷中...
    设想只传送一个仅仅鼠标左键被按下的消息(WM_LBUTTONUP先不传送,左键按下同时没有按键盘上任何的按键)
    我的函数声明,看看哪里出问题函数与常数声明在一个标准模块中
    Public Const MK_CONTROL = &H8
    Public Const WM_LBUTTONDOWN = &H201
    Public Const WM_LBUTTONUP = &H202
    Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)小曾哥的转换程序,标准模块中
    Public Function MAKEPARAM(LoWord As Integer, HiWord As Integer) As Long
      MAKEPARAM = (HiWord * &H10000) Or (LoWord And &HFFFF&)
    End Function函数调用写在一个标签控件的click事件中
    Private Sub lblSend_Click()
    Dim i As Long
        i = PostMessage(cmd1.hwnd, WM_LBUTTONDOWN, 0, 0)
    End Sub尝试了其它写法..都没有成功,真是让人抓狂的......
    i = (PostMessage cmd1.hwnd, WM_LBUTTONDOWN, 0&, 0&)
    PostMessage cmd1.hwnd, WM_LBUTTONDOWN, 0&, 0&
    PostMessage cmd1.hwnd, WM_LBUTTONDOWN, 0, 0
    PostMessage cmd1.hwnd, WM_LBUTTONDOWN, 0, ByVal 0&
    PostMessage cmd1.hwnd, WM_LBUTTONDOWN, 0&, ByVal 0&
    PostMessage cmd1.hwnd, WM_LBUTTONDOWN, ByVal 0&, ByVal 0&
    PostMessage cmd1.hwnd, WM_LBUTTONDOWN, ByVal 0&, 0&
    PostMessage cmd1.hwnd, WM_LBUTTONDOWN, 0&, MAKEPARAM(180, 290)
    PostMessage cmd1.hwnd, WM_LBUTTONDOWN, 0&, MAKEPARAM(18, 29)
    或者再传送一个MK_CONTROL,问题依旧....
    PostMessage cmd1.hwnd, WM_LBUTTONDOWN, MK_CONTROL, 0
    PostMessage cmd1.hwnd, WM_LBUTTONDOWN, MK_CONTROL,MAKEPARAM(18, 29)
    或者不传送给button,传送给form!,问题依旧..真是打击人啊.%^$%#@#$..>>>>>
    PostMessage frmMain.hwnd, WM_LBUTTONDOWN, 0, 0
    PostMessage frmMain.hwnd, WM_LBUTTONDOWN, 0, ByVal 0
    PostMessage frmMain.hwnd, WM_LBUTTONDOWN, 0, ByVal 0&
      

  4.   

    实时错误'49':
    DLL 调用约定错误真是让人抓狂的.......
      

  5.   

    回复楼上,放算有,也一样的啊
    Private Sub lblSend_Click()
    Dim i As Long
        i = PostMessage(cmd1.hwnd, WM_LBUTTONDOWN, 0, 0)
        I = PostMessage(cmd1.hwnd, WM_LBUTTONUP, 0, 0)
    End Sub
    实时错误'49':
    DLL 调用约定错误
      

  6.   

    Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)lParam 为什么不是 byval lParam  as long 啊。
      

  7.   

    汗一个,搞错了我居然没有看到这函数声明的问题PostMessage不能发送任何指针,因此所有参数都需要ByVal
      

  8.   

    PostMessage frmMain.hwnd, WM_LBUTTONDOWN, ByVal 0&, ByVal 0&
    实时错误'49':
    DLL 调用约定错误
    继续抓狂ing................
      

  9.   

    Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, byval lParam As long)
      

  10.   

    该结贴的时候了,首先非常感谢老马以及各位朋友的热心支持。。
    这个令我感极度抓狂的问题终于得以告一段落了。
    顺便公布下造成这个问题的终极原因
    问题的根源。。就是。。函数声明没有写返回值的数据类型。。(As Long)
    在输入函数声明时,函数是从windows API 参考上拷下来的 chm红色版本那个
    如果各位朋友也是用这个版本的话,要注意加上 as + 数据类型哦