MapPoint control does not allow bringing other VB form to foreground


 


Summary


 


When a MapPoint ActiveX control is placed on a VB6 windows form, other non modal forms that you open cannot be brought to foreground.


Note :


1.       The issue has also been reported with Delphi forms.


2.       This issue DOES NOT occur with .Net windows forms.


 


 


 


Symptoms


 


Consider you have VB6 Standard EXE project which shows MapPoint ActiveX control. The form has a button to show other non-modal forms. Now with MapPoint control being shown on one form, when you show other non-modal forms, these appear in the background. Even if you switch to the non-modal form, and try to bring it foreground by dragging it, the form again goes back to background.


 


 


 


Cause


 


This is an issue with MapPoint ActiveX control when placed on a VB6 form.


 


 


 


Resolution


 


Use win32 API SetWindowPos after calling show method of VB6 form.


 


Sample VB6 code to work around this issue:


 


Private Sub FixedShowNonModalForm()


NonModalForm.Show
SetWindowPos NonModalForm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
SetWindowPos NonModalForm.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE


End Sub


 


Make sure you have added following declarations to your form code:


 


Private Declare Function CoAllowSetForegroundWindow Lib "ole32.dll" (ByVal pUnk As Object, ByVal lpvReserved As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long


Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1

Skip to main content