Forms & Dialogs

From Team Developer SqlWindows Wiki
Revision as of 08:40, 9 September 2011 by DaveRabelink (Talk | contribs)

Jump to: navigation, search

This page covers Form Window and DialogBox tips & tricks.

Contents


Pointer2.png How to drag a window without a caption Pointer.png

See Windows messages : How to drag a window without a caption


Pointer2.png How to force a window on the taskbar Pointer.png

When a top-level window is created without a specific parent (hWndNULL) the window will be visible on the Windows taskbar.
Windows created using a parent, will not be shown.

To be able to use a parent while creating a window AND having it placed on the taskbar, use the following:
On creation of the window, set the GWL_EXSTYLE to WS_EX_APPWINDOW.

Beware, a top level window with accessories enabled has a different internal window hierarchy compared to
a window without accessories.
For top level windows having accessories, hWndForm should be changed to the parent of hWndForm.
You can not use SalParentWindow, that function will return the owner of the window.
You need to call GetParent from WinApi as declared above.

So, declare these external functions and system constants:

Library name: USER32.DLL
   Function: GetWindowLongA
      Export Ordinal: 0
      Returns
         Number: LONG
      Parameters
         Window Handle: HWND
         Number: INT

   Function: SetWindowLongA
      Export Ordinal: 0
      Returns
         Number: LONG
      Parameters
         Window Handle: HWND
         Number: INT
         Number: LONG

   Function: GetParent
      Export Ordinal: 0
      Returns
         Window Handle: HWND
      Parameters
         Window Handle: HWND


Constants
   System
      Number: GWL_EXSTYLE	= -20
      Number: WS_EX_APPWINDOW	= 0x00040000

For top level windows without accessories enabled, do this:
set the WS_EX_APPWINDOW style to the window (hWndForm) at creation:

On SAM_Create
   Call SetWindowLongA( hWndForm, GWL_EXSTYLE, GetWindowLongA( hWndForm, GWL_EXSTYLE ) | WS_EX_APPWINDOW )

For top level windows WITH accessories enabled, do this:
set the WS_EX_APPWINDOW style to the parent window of hWndForm at creation:

On SAM_Create
   Call SetWindowLongA( GetParent( hWndForm ), GWL_EXSTYLE, GetWindowLongA( GetParent( hWndForm ), GWL_EXSTYLE ) | WS_EX_APPWINDOW )

The window will then be shown on the taskbar.

Here you can download a sample: