Microsoft KB Archive/232689

= How To Get the Window Handle to a WindowsCE Control from VB =

Article ID: 232689

Article Last Modified on 8/19/2005

-

APPLIES TO


 * Microsoft Windows CE Toolkit for Visual Basic 6.0
 * Microsoft eMbedded Visual Basic 3.0

-



This article was previously published under Q232689



SUMMARY
Many of the controls that ship with the Windows CE Toolkit for Visual Basic (VBCE) do not have an hWnd property. The hWnd property is necessary for many API functions. This article will illustrate how to obtain hWnd for a VBCE control.



MORE INFORMATION
In this example, use the Windows CE API to enable FullRowSelect functionality of a ListView control. In order to accomplish this in Visual Basic 6.0, use the SendMessage API to set the style of the ListView, with the hWnd to the ListView being passed as a parameter. But the Windows CE ListView control does not provide an hWnd property, so you need to use GetFocus, which returns the handle to the currently active window.

Step by Step Example
 Create a new Windows CE HPC, HPC Pro, or PsPC Project in Visual Basic. Form1 is created by default. Select Components from the Project menu and select the "Microsoft CE ListView Control 6.0." Place a ListView control on Form1.  Paste the following code into Form1: Option Explicit

Declare Function GetFocus Lib "coredll" As Long Declare Function SendMessage Lib "coredll" Alias "SendMessageW" ( _   ByVal hwnd As Long, _    ByVal wMsg As Long, _    ByVal wParam As Long, _    ByVal lParam As Long) As Long

Const LVS_EX_FULLROWSELECT = &H20 Const LVM_FIRST = &H1000 Const LVM_GETEXTENDEDLISTVIEWSTYLE = &H1037 Const LVM_SETEXTENDEDLISTVIEWSTYLE = &H1036

Private Sub Form_Load Dim lStyle As Long

ListViewCtrl1.View = lvwReport ListViewCtrl1.LabelEdit = lvwManual

'Add Column headers ListViewCtrl1.ColumnHeaders.Add 1, "First", "First" ListViewCtrl1.ColumnHeaders.Add 2, "Second", "SECOND" ListViewCtrl1.ColumnHeaders.Add 3, "Third", "THIRD" 'Add first ListItem ListViewCtrl1.ListItems.Add 1, "Item1", "First Item" ListViewCtrl1.ListItems(1).SubItems(1) = "TEST" ListViewCtrl1.ListItems(1).SubItems(2) = "TEST"

'Add second ListItem ListViewCtrl1.ListItems.Add 2, "Item2", "Second Item" ListViewCtrl1.ListItems(2).SubItems(1) = "TEST" ListViewCtrl1.ListItems(2).SubItems(2) = "TEST" ListViewCtrl1.SetFocus lStyle = SendMessage(GetFocus, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0) lStyle = lStyle Or LVS_EX_FULLROWSELECT Call SendMessage(GetFocus, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, lStyle) End Sub  Run the project targeting either the default device or emulation. Note that an entire row can now be selected by clicking an item in any column. Also note that the SendMessage API requires a window handle as the first parameter. Because the GetFocus API returns the handle to the currently active window, you are able to pass this as the first parameter to SendMessage.

