Home All Groups Group Topic Archive Search About
Author
4 Feb 2006 2:05 AM
easoftware
In my ComboBox, I am trying to post the CBN_EDITCHANGE message after
the
CBN_SELCHANGE is received, but I am having no luck. I can trap for the
CBN_SELCHANGE message, but I cannot post the CBN_EDITCHANGE message. I
think
my PostMessage parameters are wrong, but I cannot find what they should
be.
Any help would be greatly appreciated. Thanks.

Here is my code.

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA"
_
  (ByVal hwnd As Long, _
  ByVal wMsg As Long, _
  ByVal wParam As Long, _
  ByVal lParam As Long) As Long


Protected Overrides Sub WndProc(ByRef m As Message)
MyBase.WndProc(m)

Const CBN_SELCHANGE As Int32 = &H1
Const CBN_EDITCHANGE As Int32 = &H5
Const CBN_EDITUPDATE As Int32 = &H6
Const CBN_CLOSEUP As Int32 = &H8
Const CBN_SELENDOK As Int32 = &H9
Const WM_COMMAND As Int32 = &H111
Const WM_USER As Int32 = &H400
Const OCM__BASE As Int32 = WM_USER + &H1C00
Const OCM_COMMAND As Int32 = OCM__BASE + WM_COMMAND

If m.Msg = OCM_COMMAND Then
  Dim CbAction As Int32 = (m.WParam.ToInt32 >> 16) ' combobox action
  Select Case CbAction
   Case CBN_SELCHANGE
    PostMessage(Me.Handle.ToInt32, OCM_COMMAND, _
      CBN_EDITCHANGE << 16, 0)
   Case CBN_EDITCHANGE
   Case CBN_CLOSEUP
   Case CBN_SELENDOK
  End Select
End If
End Sub

Author
5 Feb 2006 12:06 PM
Ken Tucker [MVP]
Hi,

        Change the longs in the postmessage declare to integers.  The dotnet
integer is the same as the vb6 long


Ken
--------------------
<easoftw***@gmail.com> wrote in message
Show quoteHide quote
news:1139018732.461940.120440@f14g2000cwb.googlegroups.com...
> In my ComboBox, I am trying to post the CBN_EDITCHANGE message after
> the
> CBN_SELCHANGE is received, but I am having no luck. I can trap for the
> CBN_SELCHANGE message, but I cannot post the CBN_EDITCHANGE message. I
> think
> my PostMessage parameters are wrong, but I cannot find what they should
> be.
> Any help would be greatly appreciated. Thanks.
>
> Here is my code.
>
> Private Declare Function PostMessage Lib "user32" Alias "PostMessageA"
> _
>  (ByVal hwnd As Long, _
>  ByVal wMsg As Long, _
>  ByVal wParam As Long, _
>  ByVal lParam As Long) As Long
>
>
> Protected Overrides Sub WndProc(ByRef m As Message)
> MyBase.WndProc(m)
>
> Const CBN_SELCHANGE As Int32 = &H1
> Const CBN_EDITCHANGE As Int32 = &H5
> Const CBN_EDITUPDATE As Int32 = &H6
> Const CBN_CLOSEUP As Int32 = &H8
> Const CBN_SELENDOK As Int32 = &H9
> Const WM_COMMAND As Int32 = &H111
> Const WM_USER As Int32 = &H400
> Const OCM__BASE As Int32 = WM_USER + &H1C00
> Const OCM_COMMAND As Int32 = OCM__BASE + WM_COMMAND
>
> If m.Msg = OCM_COMMAND Then
>  Dim CbAction As Int32 = (m.WParam.ToInt32 >> 16) ' combobox action
>  Select Case CbAction
>   Case CBN_SELCHANGE
>    PostMessage(Me.Handle.ToInt32, OCM_COMMAND, _
>      CBN_EDITCHANGE << 16, 0)
>   Case CBN_EDITCHANGE
>   Case CBN_CLOSEUP
>   Case CBN_SELENDOK
>  End Select
> End If
> End Sub
>
Author
6 Feb 2006 7:26 PM
easoftware
Thanks.  It did the trick.

I am still a little confused.  In all the searching I did on the
'net, all the old (around 2001 and earlier) examples I found had:

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA"
_
        (ByVal hwnd As intptr, _
        ByVal wMsg As integer, _
        ByVal wParam As integer, _
        ByVal lParam As integer) As Boolean

And all the newer examples had the way I declared (that is way I went
this way):

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA"
_
         (ByVal hwnd As Long, _
        ByVal wMsg As Long, _
        ByVal wParam As Long, _
        ByVal lParam As Long) As Long

Where can I find the documentation on PostMessage?

Eric
Author
6 Feb 2006 8:30 PM
Armin Zingler
<easoftw***@gmail.com> schrieb
> Where can I find the documentation on PostMessage?

Menu Help -> Index, type "postmessage"


Armin