• Welcome to Theos PowerBasic Museum 2017.

sdk popup dialogs, part one

Started by Frank Brübach, April 30, 2010, 07:15:37 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Frank Brübach

because I think it's useful to share some knowledge about "sdk window frames + popup dialogs". Take it with humour. part two will follow at another time. feel free for testing.

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'----------> part one: popup dialogs with gradient backgrounds by frank brübach, 28-30.april 2010, bsa
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#COMPILE EXE
#DIM ALL
#INCLUDE "win32api.inc"

%IDMYSELF   = 1001
%IDYOURSELF = 1002
%IDOK2      = 1003
%IDOK3      = 1004
%IDOURSELF  = 1005

' ========================================================================================================================================
' SDK Main
' ========================================================================================================================================
FUNCTION WINMAIN (BYVAL hInstance AS DWORD, BYVAL hPrevInstance AS DWORD, BYVAL lpszCmdLine AS ASCIIZ PTR, BYVAL nCmdShow AS LONG) AS LONG

  LOCAL hWndMain    AS DWORD
  LOCAL hCtl        AS DWORD
  LOCAL hFont       AS DWORD
  LOCAL wcex        AS WNDCLASSEX
  LOCAL szClassName AS ASCIIZ * 80
  LOCAL rc          AS RECT
  LOCAL szCaption   AS ASCIIZ * 255
  LOCAL nLeft       AS LONG
  LOCAL nTop        AS LONG
  LOCAL nWidth      AS LONG
  LOCAL nHeight     AS LONG

  hFont = GetStockObject(%ANSI_VAR_FONT)

  szClassName        = "MyClassName"
  wcex.cbSize        = SIZEOF(wcex)
  wcex.style         = %CS_HREDRAW OR %CS_VREDRAW
  wcex.lpfnWndProc   = CODEPTR(WndProc)
  wcex.cbClsExtra    = 0
  wcex.cbWndExtra    = 0
  wcex.hInstance     = hInstance
  wcex.hCursor       = LoadCursor (%NULL, BYVAL %IDC_ARROW)
  wcex.hbrBackground = GetStockObject(%LTGRAY_BRUSH) '%COLOR_3DFACE + 1
  wcex.lpszMenuName  = %NULL
  wcex.lpszClassName = VARPTR(szClassName)
  wcex.hIcon         = LoadIcon (%NULL, BYVAL %IDI_APPLICATION)
  wcex.hIconSm       = LoadIcon (%NULL, BYVAL %IDI_APPLICATION)
  RegisterClassEx wcex

  szCaption = "X-MenFriends: " + DATE$
  SystemParametersInfo %SPI_GETWORKAREA, 0, BYVAL VARPTR(rc), 0

  nWidth  = (((rc.nRight - rc.nLeft)) + 2) * 0.75
  nHeight = (((rc.nBottom - rc.nTop)) + 2) * 0.70
  nLeft   = ((rc.nRight - rc.nLeft) \ 2) - nWidth \ 2
  nTop    = ((rc.nBottom - rc.nTop) \ 2) - (nHeight \ 2)

  hWndMain = CreateWindowEx(%WS_EX_CONTROLPARENT, _
                            szClassName, _
                            szCaption, _
                            %WS_OVERLAPPEDWINDOW OR _
                            %WS_CLIPCHILDREN, _
                            nLeft, _
                            nTop, _
                            nWidth, _
                            nHeight, _
                            %NULL, _
                            0, _
                            hInstance, _
                            BYVAL %NULL)

  hCtl = CreateWindowEx(0, "BUTTON", "&Popup", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDOK, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  hCtl = CreateWindowEx(0, "BUTTON", "&Close", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDCANCEL, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  hCtl = CreateWindowEx(0, "Button", "myself-one", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDMYSELF, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  ' Show the window
  ShowWindow hWndMain, nCmdShow
  UpdateWindow hWndMain

  LOCAL uMsg AS tagMsg
  WHILE GetMessage(uMsg, %NULL, 0, 0)
     IF ISFALSE IsDialogMessage(hWndMain, uMsg) THEN
        TranslateMessage uMsg
        DispatchMessage uMsg
     END IF
  WEND

  FUNCTION = uMsg.wParam
END FUNCTION
' ===============================================================================================================

' ===============================================================================================================
' First Main Window procedure
' ===============================================================================================================
FUNCTION WndProc (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
   LOCAL hDC    AS DWORD
   LOCAL pPaint AS PAINTSTRUCT
   LOCAL tRect  AS RECT
   LOCAL rc AS RECT

  SELECT CASE wMsg

     CASE %WM_CREATE

     CASE %WM_SIZE
        ' Resize the two sample buttons of the dialog
        IF wParam <> %SIZE_MINIMIZED THEN
           GetClientRect hWnd, rc
           MoveWindow GetDlgItem(hWnd, %IDOK), (rc.nRight - rc.nLeft) - 185, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
           MoveWindow GetDlgItem(hWnd, %IDCANCEL), (rc.nRight - rc.nLeft) - 95, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
           MoveWindow GetDlgItem(hWnd, %IDMYSELF), (rc.nRight - rc.nLeft) - 725, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
        END IF

     CASE %WM_COMMAND
        SELECT CASE LO(WORD, wParam)

           CASE %IDOK
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 ShowPopupDialog hwnd
              END IF

           CASE %IDCANCEL
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 SendMessage hWnd, %WM_CLOSE, 0, 0
                 EXIT FUNCTION
              END IF

           CASE %IDMYSELF
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 MSGBOX "Welcome to second MainWindow, it works, good to know!", %MB_OK, "test popup dialogs"
                 FRANKOSWINMAIN 1,1,1,1 ' experiment: ------>'Show new winmain sdk window frame
                 EXIT FUNCTION
              END IF

        END SELECT

     CASE %WM_SYSCOMMAND
        IF (wParam AND &HFFF0) = %SC_CLOSE THEN
           SendMessage hWnd, %WM_CLOSE, 0, 0
           EXIT FUNCTION
        END IF

   CASE %WM_CLOSE

   CASE %WM_PAINT
       hDC = BeginPaint(hWnd, pPaint)
       GetClientRect hWnd, tRect
       SetBkMode hDC, %TRANSPARENT
       SetTextColor hDC, %YELLOW
       DrawText hDC, "Soccer: Fc Bayern Munich (Germany) will win the Champions League Cup!", -1, tRect, %DT_SINGLELINE OR %DT_CENTER OR %DT_VCENTER
       EndPaint hWnd, pPaint
       FUNCTION = 1
       EXIT FUNCTION

   CASE %WM_ERASEBKGND
       hDC = wParam
       DrawGradient hDC
       FUNCTION = 1
       EXIT FUNCTION

     CASE %WM_DESTROY
        PostQuitMessage 0
        EXIT FUNCTION
  END SELECT

  FUNCTION = DefWindowProc(hWnd, wMsg, wParam, lParam)

END FUNCTION
' ========================================================================================


' ========================================================================================
' Popup dialog - Calling example: ShowPopupDialog hWnd
' ========================================================================================
 FUNCTION ShowPopupDialog (BYVAL hParent AS LONG) AS LONG
' ========================================================================================

  LOCAL hWndPopup   AS LONG
  LOCAL hCtl        AS LONG
  LOCAL hFont       AS LONG
  LOCAL rc          AS RECT
  LOCAL wcex        AS WNDCLASSEX
  LOCAL szClassName AS ASCIIZ * 80
  LOCAL szCaption   AS ASCIIZ * 255

  hFont = GetStockObject(%ANSI_VAR_FONT)

  szClassName        = "MyPopupClassName"
  wcex.cbSize        = SIZEOF(wcex)
  wcex.style         = %CS_HREDRAW OR %CS_VREDRAW
  wcex.lpfnWndProc   = CODEPTR(PopupDlgProc)
  wcex.cbClsExtra    = 0
  wcex.cbWndExtra    = 0
  wcex.hInstance     = GetModuleHandle("")
  wcex.hCursor       = LoadCursor(%NULL, BYVAL %IDC_ARROW)
  wcex.hbrBackground = GetStockObject(%LTGRAY_BRUSH) '-------> alternative: %COLOR_3DFACE + 1
  wcex.lpszMenuName  = %NULL
  wcex.lpszClassName = VARPTR(szClassName)
  wcex.hIcon         = 0
  wcex.hIconSm       = 0
  RegisterClassEx wcex

  GetWindowRect hParent, rc
  rc.nRight = rc.nRight - rc.nLeft
  rc.nBottom = rc.nBottom - rc.nTop

  szCaption = "Other simple new Popup Dialog"
  hWndPopup = CreateWindowEx(%WS_EX_DLGMODALFRAME OR %WS_EX_CONTROLPARENT, _
              szClassName, szCaption, %WS_CAPTION OR %WS_POPUPWINDOW OR %WS_VISIBLE, _
              rc.nLeft + (rc.nRight - 290) / 2, _
              rc.nTop + (rc.nBottom - 180) / 2, _
              480, 280, hParent, 0, GetModuleHandle(""), BYVAL %NULL)

  hCtl = CreateWindowEx(0, "BUTTON", "&Close", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
              240, 218, 75, 23, hWndPopup, %IDCANCEL, GetModuleHandle(""), BYVAL %NULL)
  hCtl = CreateWindowEx(0, "BUTTON", "&Jimmy Neutron", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
              100, 218, 85, 23, hWndPopup, %IDOK2, GetModuleHandle(""), BYVAL %NULL)

  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  ShowWindow hWndPopup, %SW_SHOW
  UpdateWindow hWndPopup

  LOCAL uMsg AS tagMsg
  WHILE GetMessage(uMsg, %NULL, 0, 0)
     IF ISFALSE IsDialogMessage(hWndPopup, uMsg) THEN
        TranslateMessage uMsg
        DispatchMessage uMsg
     END IF
  WEND
  FUNCTION = uMsg.wParam

END FUNCTION

'--------------------> another new winmain ! <------------------------- !

'=================================================================================================================================================
FUNCTION FRANKOSWINMAIN (BYVAL hInstance AS DWORD, BYVAL hPrevInstance AS DWORD, BYVAL lpszCmdLine AS ASCIIZ PTR, BYVAL nCmdShow AS LONG) AS LONG
'=================================================================================================================================================
  LOCAL hWndMain    AS DWORD
  LOCAL hCtl        AS DWORD
  LOCAL hFont       AS DWORD
  LOCAL wcex        AS WNDCLASSEX
  LOCAL szClassName AS ASCIIZ * 80
  LOCAL rc          AS RECT
  LOCAL szCaption   AS ASCIIZ * 255
  LOCAL nLeft       AS LONG
  LOCAL nTop        AS LONG
  LOCAL nWidth      AS LONG
  LOCAL nHeight     AS LONG
  LOCAL k AS STRING

  hFont = GetStockObject(%ANSI_VAR_FONT)

  ' Register the window class
  szClassName        = "MyClassName"
  wcex.cbSize        = SIZEOF(wcex)
  wcex.style         = %CS_HREDRAW OR %CS_VREDRAW
  wcex.lpfnWndProc   = CODEPTR(WndProc2)
  wcex.cbClsExtra    = 0
  wcex.cbWndExtra    = 0
  wcex.hInstance     = hInstance
  wcex.hCursor       = LoadCursor (%NULL, BYVAL %IDC_ARROW)
  'wcex.hbrBackground = GetStockObject(%LTGRAY_BRUSH) '%COLOR_3DFACE + 1
  wcex.lpszMenuName  = %NULL
  wcex.lpszClassName = VARPTR(szClassName)
  wcex.hIcon         = LoadIcon (%NULL, BYVAL %IDI_APPLICATION)
  wcex.hIconSm       = LoadIcon (%NULL, BYVAL %IDI_APPLICATION)
  RegisterClassEx wcex

  szCaption = "Diana and Josefs new X-MenTeam "
  SystemParametersInfo %SPI_GETWORKAREA, 0, BYVAL VARPTR(rc), 0

  nWidth  = (((rc.nRight - rc.nLeft)) + 2) * 0.70
  nHeight = (((rc.nBottom - rc.nTop)) + 2) * 0.60
  nLeft   = ((rc.nRight - rc.nLeft) \ 2) - nWidth \ 2
  nTop    = ((rc.nBottom - rc.nTop) \ 2) - (nHeight \ 2)

  hWndMain = CreateWindowEx(%WS_EX_CONTROLPARENT, _
                            szClassName, _
                            szCaption, _
                            %WS_OVERLAPPEDWINDOW OR _
                            %WS_CLIPCHILDREN, _
                            nLeft, _
                            nTop, _
                            nWidth, _
                            nHeight, _
                            %NULL, _
                            0, _
                            hInstance, _
                            BYVAL %NULL)

  hCtl = CreateWindowEx(0, "BUTTON", "&Popup", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDOK, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  hCtl = CreateWindowEx(0, "BUTTON", "&Close", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDCANCEL, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  hCtl = CreateWindowEx(0, "Button", "yourself-one", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDYOURSELF, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  ShowWindow hWndMain, nCmdShow
  UpdateWindow hWndMain

  LOCAL uMsg AS tagMsg
  WHILE GetMessage(uMsg, %NULL, 0, 0)
     IF ISFALSE IsDialogMessage(hWndMain, uMsg) THEN
        TranslateMessage uMsg
        DispatchMessage uMsg
     END IF
  WEND

  FUNCTION = uMsg.wParam

END FUNCTION
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


'---> Custom draw procedure for gradiend fill <--------------------------------
'==============================================================================
SUB DrawGradient (BYVAL hDC AS DWORD)
'------------------------------------------------------------------------------
   LOCAL rectFill AS RECT
   LOCAL rectClient AS RECT
   LOCAL fStep AS SINGLE
   LOCAL hBrush AS DWORD
   LOCAL lOnBand AS LONG

   GetClientRect WindowFromDC(hDC), rectClient
   fStep = rectClient.nbottom / 400 '---> 200

   FOR lOnBand = 0 TO 399 '---> 199
       SetRect rectFill, 0, lOnBand * fStep, rectClient.nright + 1, (lOnBand + 1) * fStep '--- * 2
       hBrush = CreateSolidBrush(RGB(60, 100, 255 - lOnBand))
       Fillrect hDC, rectFill, hBrush
       DeleteObject hBrush
   NEXT

END SUB

' =====================================================================================================================
' Popup dialog procedure
' =====================================================================================================================
FUNCTION PopupDlgProc (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
'----------------------------------------------------------------------------------------------------------------------
   LOCAL pPaint AS PAINTSTRUCT
   LOCAL tRect  AS RECT
   LOCAL rc AS RECT
   LOCAL hdc AS DWORD

  SELECT CASE wMsg
     CASE %WM_CREATE
        EnableWindow GetWindow(hWnd, %GW_OWNER), %FALSE

     CASE %WM_COMMAND

        SELECT CASE LO(WORD, wParam)
           CASE %IDCANCEL
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 SendMessage hWnd, %WM_CLOSE, 0, 0
                 EXIT FUNCTION
              END IF

           CASE %IDOK2
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 MSGBOX "Hey, all is good on planet earth!", %MB_OK, "..until evil aliens will come and eat us..."
                 ShowPopupDialox hwnd
                 SendMessage hWnd, %WM_CLOSE, 0, 0
                 EXIT FUNCTION
              END IF
           CASE %IDOK3
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 MSGBOX "upcoming years 2012/2013: earthquake or sunshine?..", %MB_OK, "..wheather won't be always calm to us..."
                 SendMessage hWnd, %WM_CLOSE, 0, 0
                 EXIT FUNCTION
              END IF

        END SELECT

   CASE %WM_PAINT
       hDC = BeginPaint(hWnd, pPaint)
       GetClientRect hWnd, tRect
       SetBkMode hDC, %TRANSPARENT
       SetTextColor hDC, %YELLOW
       DrawText hDC, "Soccer: sorry, Inter Mailand (Italy) will win the Champions League Cup!", -1, tRect, %DT_SINGLELINE OR %DT_CENTER OR %DT_VCENTER
       EndPaint hWnd, pPaint
       FUNCTION = 1
       EXIT FUNCTION

   CASE %WM_ERASEBKGND
       hDC = wParam
       GradientDraw hwnd, hDC
       FUNCTION = 1
       EXIT FUNCTION

     CASE %WM_CLOSE
        EnableWindow GetWindow(hWnd, %GW_OWNER), %TRUE

     CASE %WM_DESTROY
        PostQuitMessage 0
        EXIT FUNCTION

  END SELECT

  FUNCTION = DefWindowProc(hWnd, wMsg, wParam, lParam)

END FUNCTION

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

'--------> for gradient background second possibility :) <--------------------------------
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUB GradientDraw (BYVAL hwnd AS DWORD, BYVAL hdc AS DWORD)
'------------------------------------------------------------------------------------------
  LOCAL rc AS RECT
  DIM   vertex(1) AS TRIVERTEX

  GetClientRect hwnd, rc

  vertex(0).x      = 0
  vertex(0).y      = 0
  vertex(0).Red    = &HFF00
  vertex(0).Green  = &H0000
  vertex(0).Blue   = &H0000
  vertex(0).Alpha  = &H0000

  vertex(1).x      = rc.nRight - rc.nLeft
  vertex(1).y      = rc.nBottom - rc.nTop
  vertex(1).Red    = &H0000
  vertex(1).Green  = &HF000
  vertex(1).Blue   = &HF088
  vertex(1).Alpha  = &H0000

  LOCAL gRect AS GRADIENT_RECT

  gRect.UpperLeft  = 0
  gRect.LowerRight = 1

  GradientFill hDc, vertex(0), 2, gRect, 1, %GRADIENT_FILL_RECT_V '--> also possible: -- _H
END SUB

'------------------------> another wndproc for callbacks <-------------------------------------------------------
FUNCTION WndProc2 (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
'------------------------> another wndproc for callbacks <-------------------------------------------------------

   LOCAL hDC    AS DWORD
   LOCAL pPaint AS PAINTSTRUCT
   LOCAL tRect  AS RECT
   LOCAL rc AS RECT

  SELECT CASE wMsg

     CASE %WM_CREATE

     CASE %WM_SIZE
        IF wParam <> %SIZE_MINIMIZED THEN
           GetClientRect hWnd, rc
           MoveWindow GetDlgItem(hWnd, %IDOK), (rc.nRight - rc.nLeft) - 185, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
           MoveWindow GetDlgItem(hWnd, %IDCANCEL), (rc.nRight - rc.nLeft) - 95, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
           MoveWindow GetDlgItem(hWnd, %IDMYSELF), (rc.nRight - rc.nLeft) - 265, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
        END IF

     CASE %WM_COMMAND
        SELECT CASE LO(WORD, wParam)

           CASE %IDOK
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 ShowPopupDialog hwnd
              END IF

           CASE %IDCANCEL
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 SendMessage hWnd, %WM_CLOSE, 0, 0
                 EXIT FUNCTION
              END IF

           CASE %IDMYSELF
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 MSGBOX "welcome to second main-window, it works, good to know!", %MB_OK, "test popup dialogs"
                 FRANKOSWINMAIN 1,1,1,1
                 EXIT FUNCTION
              END IF

        END SELECT

     CASE %WM_SYSCOMMAND
        ' Capture this message and send a WM_CLOSE message
        IF (wParam AND &HFFF0) = %SC_CLOSE THEN
           SendMessage hWnd, %WM_CLOSE, 0, 0
           EXIT FUNCTION
        END IF

   CASE %WM_CLOSE

   CASE %WM_PAINT
       hDC = BeginPaint(hWnd, pPaint)
       GetClientRect hWnd, tRect
       SetBkMode hDC, %TRANSPARENT
       SetTextColor hDC, %YELLOW
       DrawText hDC, "Fc Bayern Munich will win the Champions League Cup!", -1, tRect, %DT_SINGLELINE OR %DT_CENTER OR %DT_VCENTER
       EndPaint hWnd, pPaint
       FUNCTION = 1
       EXIT FUNCTION

   CASE %WM_ERASEBKGND
       hDC = wParam
       GradientDraw2 hwnd, hDC
       FUNCTION = 1
       EXIT FUNCTION


     CASE %WM_DESTROY
        PostQuitMessage 0
        EXIT FUNCTION

  END SELECT

  FUNCTION = DefWindowProc(hWnd, wMsg, wParam, lParam)

END FUNCTION

'----------------------------------------------------------
SUB GradientDraw2 (BYVAL hwnd AS DWORD, BYVAL hdc AS DWORD)
'----------------------------------------------------------
  LOCAL rc AS RECT
  DIM   vertex(1) AS TRIVERTEX

  GetClientRect hwnd, rc

  vertex(0).x      = 0
  vertex(0).y      = 0
  vertex(0).Red    = &HFF00
  vertex(0).Green  = &H0000
  vertex(0).Blue   = &HF000
  vertex(0).Alpha  = &H0000

  vertex(1).x      = rc.nRight - rc.nLeft
  vertex(1).y      = rc.nBottom - rc.nTop
  vertex(1).Red    = &H0000
  vertex(1).Green  = &HF000
  vertex(1).Blue   = &HF088
  vertex(1).Alpha  = &H0000

  LOCAL gRect AS GRADIENT_RECT

  gRect.UpperLeft  = 0
  gRect.LowerRight = 1

  GradientFill hDc, vertex(0), 2, gRect, 1, %GRADIENT_FILL_RECT_H

END SUB
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

'---------------> substitute if I like it: popup dialog for new winmain <-------------------------
FUNCTION ShowPopupDialox (BYVAL hParent AS LONG) AS LONG
'---------------> substitute if I like it: popup dialog for new winmain <-------------------------

  LOCAL hWndPopup   AS LONG
  LOCAL hCtl        AS LONG
  LOCAL hFont       AS LONG
  LOCAL rc          AS RECT
  LOCAL wcex        AS WNDCLASSEX
  LOCAL szClassName AS ASCIIZ * 80
  LOCAL szCaption   AS ASCIIZ * 255

  hFont = GetStockObject(%ANSI_VAR_FONT)

  szClassName        = "MyPopupClassName"
  wcex.cbSize        = SIZEOF(wcex)
  wcex.style         = %CS_HREDRAW OR %CS_VREDRAW
  wcex.lpfnWndProc   = CODEPTR(PopupDlgProc)
  wcex.cbClsExtra    = 0
  wcex.cbWndExtra    = 0
  wcex.hInstance     = GetModuleHandle("")
  wcex.hCursor       = LoadCursor(%NULL, BYVAL %IDC_ARROW)
  wcex.hbrBackground = GetStockObject(%LTGRAY_BRUSH) '%COLOR_3DFACE + 1 '%LTGRAY_BRUSH
  wcex.lpszMenuName  = %NULL
  wcex.lpszClassName = VARPTR(szClassName)
  wcex.hIcon         = 0
  wcex.hIconSm       = 0
  RegisterClassEx wcex

  GetWindowRect hParent, rc          ' For centering child in parent
  rc.nRight = rc.nRight - rc.nLeft   ' Parent's width
  rc.nBottom = rc.nBottom - rc.nTop  ' Parent's height

  szCaption = "Last simple dialox"
  hWndPopup = CreateWindowEx(%WS_EX_DLGMODALFRAME OR %WS_EX_CONTROLPARENT, _
              szClassName, szCaption, %WS_CAPTION OR %WS_POPUPWINDOW OR %WS_VISIBLE, _
              rc.nLeft + (rc.nRight - 290) / 2, _
              rc.nTop + (rc.nBottom - 180) / 2, _
              480, 280, hParent, 0, GetModuleHandle(""), BYVAL %NULL)

  hCtl = CreateWindowEx(0, "BUTTON", "&Close", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
              240, 218, 75, 23, hWndPopup, %IDCANCEL, GetModuleHandle(""), BYVAL %NULL)
  hCtl = CreateWindowEx(0, "BUTTON", "&Mariah Neutron", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
              100, 218, 85, 23, hWndPopup, %IDOK3, GetModuleHandle(""), BYVAL %NULL)

  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  ShowWindow hWndPopup, %SW_SHOW
  UpdateWindow hWndPopup
  ' Message handler loop
  LOCAL uMsg AS tagMsg
  WHILE GetMessage(uMsg, %NULL, 0, 0)
     IF ISFALSE IsDialogMessage(hWndPopup, uMsg) THEN
        TranslateMessage uMsg
        DispatchMessage uMsg
     END IF
  WEND

  FUNCTION = uMsg.wParam

END FUNCTION

'---------------------------------> end of popup dialogs, part one :) <-------------------------------------------


best regards, frank brübach

ps: I am open for constructive critics if there are things I can improve. many thanks.

Frank Brübach

I am not sure if it's possible to make more than two new "winmain" sdk frame windows and creation of new popup dialogs with => "different" gradient background colours. I will check it, because there were some inconvenience last night to make various sdk windows with quite different popup dialogs and background colours. more to come. I am interested in sdk themes and gdiplus stuff, so I will follow my hobbies ;)

best regards, frank

José Roca

Quote
I am not sure if it's possible to make more than two new "winmain" sdk frame windows

No. If it is called "main" is because there is only one. The rest are popup windows.

In your FRANKOSWINMAIN function you are trying to re-register the "MyClassName" class using a pointer to WndProc2. As "MyClassName" is already registered, RegisterClassEx will fail and WndProc2 will never be called.

Frank Brübach

#3
QuoteIn your FRANKOSWINMAIN function you are trying to re-register the "MyClassName" class using a pointer to WndProc2. As "MyClassName" is already registered, RegisterClassEx will fail and WndProc2 will never be called.

1) many thanks josé for the tip! I've changed "myClassName" and "wcex", now example works fine as I wished! :)

new sdk example with different coloured background and two main windows with popup menus:

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'----------> part one: popup dialogs with gradient backgrounds by frank brübach, 30.april->02.mai 2010, bsa
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#COMPILE EXE
#DIM ALL
#INCLUDE "win32api.inc"

%IDMYSELF   = 1001
%IDYOURSELF = 1002
%IDOK2      = 1003
%IDOK3      = 1004
%IDOURSELF  = 1005
%IDWOOLVXSELF = 1006

' ========================================================================================================================================
' SDK Main
' ========================================================================================================================================
FUNCTION WINMAIN (BYVAL hInstance AS DWORD, BYVAL hPrevInstance AS DWORD, BYVAL lpszCmdLine AS ASCIIZ PTR, BYVAL nCmdShow AS LONG) AS LONG

  LOCAL hWndMain    AS DWORD
  LOCAL hCtl        AS DWORD
  LOCAL hFont       AS DWORD
  LOCAL wcex        AS WNDCLASSEX
  LOCAL szClassName AS ASCIIZ * 80
  LOCAL rc          AS RECT
  LOCAL szCaption   AS ASCIIZ * 255
  LOCAL nLeft       AS LONG
  LOCAL nTop        AS LONG
  LOCAL nWidth      AS LONG
  LOCAL nHeight     AS LONG

  hFont = GetStockObject(%ANSI_VAR_FONT)

  szClassName        = "MyClassName"
  wcex.cbSize        = SIZEOF(wcex)
  wcex.style         = %CS_HREDRAW OR %CS_VREDRAW
  wcex.lpfnWndProc   = CODEPTR(WndProc)
  wcex.cbClsExtra    = 0
  wcex.cbWndExtra    = 0
  wcex.hInstance     = hInstance
  wcex.hCursor       = LoadCursor (%NULL, BYVAL %IDC_ARROW)
  wcex.hbrBackground = GetStockObject(%LTGRAY_BRUSH) '%COLOR_3DFACE + 1
  wcex.lpszMenuName  = %NULL
  wcex.lpszClassName = VARPTR(szClassName)
  wcex.hIcon         = LoadIcon (%NULL, BYVAL %IDI_APPLICATION)
  wcex.hIconSm       = LoadIcon (%NULL, BYVAL %IDI_APPLICATION)
  RegisterClassEx wcex

  szCaption = "X-MenFriends Vol 1.01a: " + DATE$
  SystemParametersInfo %SPI_GETWORKAREA, 0, BYVAL VARPTR(rc), 0

  nWidth  = (((rc.nRight - rc.nLeft)) + 2) * 0.75
  nHeight = (((rc.nBottom - rc.nTop)) + 2) * 0.70
  nLeft   = ((rc.nRight - rc.nLeft) \ 2) - nWidth \ 2
  nTop    = ((rc.nBottom - rc.nTop) \ 2) - (nHeight \ 2)

  hWndMain = CreateWindowEx(%WS_EX_CONTROLPARENT, _
                            szClassName, _
                            szCaption, _
                            %WS_OVERLAPPEDWINDOW OR _
                            %WS_CLIPCHILDREN, _
                            nLeft, _
                            nTop, _
                            nWidth, _
                            nHeight, _
                            %NULL, _
                            0, _
                            hInstance, _
                            BYVAL %NULL)

  hCtl = CreateWindowEx(0, "BUTTON", "&Popup", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDOK, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  hCtl = CreateWindowEx(0, "BUTTON", "&Close", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDCANCEL, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  hCtl = CreateWindowEx(0, "Button", "Diana/Josef-one", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDMYSELF, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  hCtl = CreateWindowEx(0, "Button", "WoolvX-one", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDWOOLVXSELF, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  ' Show the window
  ShowWindow hWndMain, nCmdShow
  UpdateWindow hWndMain

  LOCAL uMsg AS tagMsg
  WHILE GetMessage(uMsg, %NULL, 0, 0)
     IF ISFALSE IsDialogMessage(hWndMain, uMsg) THEN
        TranslateMessage uMsg
        DispatchMessage uMsg
     END IF
  WEND

  FUNCTION = uMsg.wParam
END FUNCTION
' ===============================================================================================================

'--------------------> another new winmain ! <------------------------- !

'=================================================================================================================================================
FUNCTION FRANKOSWINMAIN (BYVAL hInstance AS DWORD, BYVAL hPrevInstance AS DWORD, BYVAL lpszCmdLine AS ASCIIZ PTR, BYVAL nCmdShow AS LONG) AS LONG
'=================================================================================================================================================
  LOCAL hWndMain    AS DWORD
  LOCAL hCtl        AS DWORD
  LOCAL hFont       AS DWORD
  LOCAL wcex2        AS WNDCLASSEX
  LOCAL szClassName AS ASCIIZ * 80
  LOCAL szClassName2 AS ASCIIZ * 80
  LOCAL rc          AS RECT
  LOCAL szCaption   AS ASCIIZ * 255
  LOCAL nLeft       AS LONG
  LOCAL nTop        AS LONG
  LOCAL nWidth      AS LONG
  LOCAL nHeight     AS LONG

  hFont = GetStockObject(%ANSI_VAR_FONT)

  ' Register the window class
  szClassName2        = "MyClassName2"
  wcex2.cbSize        = SIZEOF(wcex2)
  wcex2.style         = %CS_HREDRAW OR %CS_VREDRAW
  wcex2.lpfnWndProc   = CODEPTR(WndProc2)
  wcex2.cbClsExtra    = 0
  wcex2.cbWndExtra    = 0
  wcex2.hInstance     = hInstance
  wcex2.hCursor       = LoadCursor (%NULL, BYVAL %IDC_ARROW)
  'wcex.hbrBackground = GetStockObject(%LTGRAY_BRUSH) '%COLOR_3DFACE + 1
  wcex2.lpszMenuName  = %NULL
  wcex2.lpszClassName = VARPTR(szClassName2)
  wcex2.hIcon         = LoadIcon (%NULL, BYVAL %IDI_APPLICATION)
  wcex2.hIconSm       = LoadIcon (%NULL, BYVAL %IDI_APPLICATION)
  RegisterClassEx wcex2

  szCaption = "Diana and Josefs new X-MenTeam "
  SystemParametersInfo %SPI_GETWORKAREA, 0, BYVAL VARPTR(rc), 0

  nWidth  = (((rc.nRight - rc.nLeft)) + 2) * 0.70
  nHeight = (((rc.nBottom - rc.nTop)) + 2) * 0.60
  nLeft   = ((rc.nRight - rc.nLeft) \ 2) - nWidth \ 2
  nTop    = ((rc.nBottom - rc.nTop) \ 2) - (nHeight \ 2)

  hWndMain = CreateWindowEx(%WS_EX_CONTROLPARENT, _
                            szClassName2, _
                            szCaption, _
                            %WS_OVERLAPPEDWINDOW OR _
                            %WS_CLIPCHILDREN, _
                            nLeft, _
                            nTop, _
                            nWidth, _
                            nHeight, _
                            %NULL, _
                            0, _
                            hInstance, _
                            BYVAL %NULL)

  hCtl = CreateWindowEx(0, "BUTTON", "&PopupZ", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDOK, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  hCtl = CreateWindowEx(0, "BUTTON", "&CloseZ", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDCANCEL, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  hCtl = CreateWindowEx(0, "Button", "Yourself-OneZ", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDYOURSELF, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  ShowWindow hWndMain, nCmdShow
  UpdateWindow hWndMain

  LOCAL uMsg AS tagMsg
  WHILE GetMessage(uMsg, %NULL, 0, 0)
     IF ISFALSE IsDialogMessage(hWndMain, uMsg) THEN
        TranslateMessage uMsg
        DispatchMessage uMsg
     END IF
  WEND

  FUNCTION = uMsg.wParam

END FUNCTION
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

' ===============================================================================================================
' First Main Window procedure
' ===============================================================================================================
FUNCTION WndProc (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
   LOCAL hDC    AS DWORD
   LOCAL pPaint AS PAINTSTRUCT
   LOCAL tRect  AS RECT
   LOCAL rc AS RECT

  SELECT CASE wMsg

     CASE %WM_CREATE

     CASE %WM_SIZE
        ' Resize the two sample buttons of the dialog
        IF wParam <> %SIZE_MINIMIZED THEN
           GetClientRect hWnd, rc
           MoveWindow GetDlgItem(hWnd, %IDOK), (rc.nRight - rc.nLeft) - 185, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
           MoveWindow GetDlgItem(hWnd, %IDCANCEL), (rc.nRight - rc.nLeft) - 95, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
           MoveWindow GetDlgItem(hWnd, %IDMYSELF), (rc.nRight - rc.nLeft) - 725, (rc.nBottom - rc.nTop) - 35, 85, 23, %TRUE
           MoveWindow GetDlgItem(hWnd, %IDWOOLVXSELF), (rc.nRight - rc.nLeft) - 345, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
        END IF

     CASE %WM_COMMAND
        SELECT CASE LO(WORD, wParam)

           CASE %IDOK
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 ShowPopupDialog hwnd
              END IF

           CASE %IDCANCEL
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 SendMessage hWnd, %WM_CLOSE, 0, 0
                 EXIT FUNCTION
              END IF

           CASE %IDMYSELF
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 MSGBOX "Welcome to second MainWindow, it works, good to know!", %MB_OK, "test popup dialogs"
                 FRANKOSWINMAIN 1,1,1,1 ' experiment: ------>'Show new winmain sdk window frame
                 EXIT FUNCTION
              END IF

           CASE %IDWOOLVXSELF
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 MSGBOX "Welcome to third MainWindow, it works, good to know!", %MB_OK, "test popup dialogs"
                 MARIAHSWINMAIN 1,1,1,1
                 EXIT FUNCTION
              END IF

        END SELECT

     CASE %WM_SYSCOMMAND
        IF (wParam AND &HFFF0) = %SC_CLOSE THEN
           SendMessage hWnd, %WM_CLOSE, 0, 0
           EXIT FUNCTION
        END IF

   CASE %WM_CLOSE

   CASE %WM_PAINT
       hDC = BeginPaint(hWnd, pPaint)
       GetClientRect hWnd, tRect
       SetBkMode hDC, %TRANSPARENT
       SetTextColor hDC, %YELLOW
       DrawText hDC, "Soccer: Fc Bayern Munich (Germany) will win the Champions League Cup!", -1, tRect, %DT_SINGLELINE OR %DT_CENTER OR %DT_VCENTER
       EndPaint hWnd, pPaint
       FUNCTION = 1
       EXIT FUNCTION

   CASE %WM_ERASEBKGND
       hDC = wParam
       DrawGradient hDC
       FUNCTION = 1
       EXIT FUNCTION

     CASE %WM_DESTROY
        PostQuitMessage 0
        EXIT FUNCTION
  END SELECT

  FUNCTION = DefWindowProc(hWnd, wMsg, wParam, lParam)

END FUNCTION
' ========================================================================================

'------------------------> another wndproc for callbacks <-------------------------------------------------------
FUNCTION WndProc2 (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
'------------------------> another wndproc for callbacks <-------------------------------------------------------

   LOCAL hDC    AS DWORD
   LOCAL pPaint AS PAINTSTRUCT
   LOCAL tRect  AS RECT
   LOCAL rc AS RECT

  SELECT CASE wMsg

     CASE %WM_CREATE

     CASE %WM_SIZE
        IF wParam <> %SIZE_MINIMIZED THEN
           GetClientRect hWnd, rc
           MoveWindow GetDlgItem(hWnd, %IDOK), (rc.nRight - rc.nLeft) - 185, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
           MoveWindow GetDlgItem(hWnd, %IDCANCEL), (rc.nRight - rc.nLeft) - 95, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
           MoveWindow GetDlgItem(hWnd, %IDMYSELF), (rc.nRight - rc.nLeft) - 265, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
        END IF

     CASE %WM_COMMAND
        SELECT CASE LO(WORD, wParam)

           CASE %IDOK
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 ShowPopupDialog hwnd
              END IF

           CASE %IDCANCEL
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 SendMessage hWnd, %WM_CLOSE, 0, 0
                 EXIT FUNCTION
              END IF

           CASE %IDMYSELF
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 MSGBOX "welcome to second main-window, it works, good to know!", %MB_OK, "test popup dialogs"
                 FRANKOSWINMAIN 1,1,1,1
                 EXIT FUNCTION
              END IF

        END SELECT

     CASE %WM_SYSCOMMAND
        ' Capture this message and send a WM_CLOSE message
        IF (wParam AND &HFFF0) = %SC_CLOSE THEN
           SendMessage hWnd, %WM_CLOSE, 0, 0
           EXIT FUNCTION
        END IF

   CASE %WM_CLOSE

   CASE %WM_PAINT
       hDC = BeginPaint(hWnd, pPaint)
       GetClientRect hWnd, tRect
       SetBkMode hDC, %TRANSPARENT
       SetTextColor hDC, %YELLOW
       DrawText hDC, "SoccerPlus: Fc Bayern Munich will win the Champions League Cup!", -1, tRect, %DT_SINGLELINE OR %DT_CENTER OR %DT_VCENTER
       EndPaint hWnd, pPaint
       FUNCTION = 1
       EXIT FUNCTION

   CASE %WM_ERASEBKGND
       hDC = wParam
       GradientDraw3 hwnd, hDC
       FUNCTION = 1
       EXIT FUNCTION


     CASE %WM_DESTROY
        PostQuitMessage 0
        EXIT FUNCTION

  END SELECT

  FUNCTION = DefWindowProc(hWnd, wMsg, wParam, lParam)

END FUNCTION
'-----------------------------------------------------------------------------------------


' ========================================================================================
' Popup dialog - Calling example: ShowPopupDialog hWnd
' ========================================================================================
 FUNCTION ShowPopupDialog (BYVAL hParent AS LONG) AS LONG
' ========================================================================================

  LOCAL hWndPopup   AS LONG
  LOCAL hCtl        AS LONG
  LOCAL hFont       AS LONG
  LOCAL rc          AS RECT
  LOCAL wcex        AS WNDCLASSEX
  LOCAL szClassName AS ASCIIZ * 80
  LOCAL szCaption   AS ASCIIZ * 255

  hFont = GetStockObject(%ANSI_VAR_FONT)

  szClassName        = "MyPopupClassName"
  wcex.cbSize        = SIZEOF(wcex)
  wcex.style         = %CS_HREDRAW OR %CS_VREDRAW
  wcex.lpfnWndProc   = CODEPTR(PopupDlgProc)
  wcex.cbClsExtra    = 0
  wcex.cbWndExtra    = 0
  wcex.hInstance     = GetModuleHandle("")
  wcex.hCursor       = LoadCursor(%NULL, BYVAL %IDC_ARROW)
  wcex.hbrBackground = GetStockObject(%LTGRAY_BRUSH) '-------> alternative: %COLOR_3DFACE + 1
  wcex.lpszMenuName  = %NULL
  wcex.lpszClassName = VARPTR(szClassName)
  wcex.hIcon         = 0
  wcex.hIconSm       = 0
  RegisterClassEx wcex

  GetWindowRect hParent, rc
  rc.nRight = rc.nRight - rc.nLeft
  rc.nBottom = rc.nBottom - rc.nTop

  szCaption = "Other simple new Popup Dialog"
  hWndPopup = CreateWindowEx(%WS_EX_DLGMODALFRAME OR %WS_EX_CONTROLPARENT, _
              szClassName, szCaption, %WS_CAPTION OR %WS_POPUPWINDOW OR %WS_VISIBLE, _
              rc.nLeft + (rc.nRight - 290) / 2, _
              rc.nTop + (rc.nBottom - 180) / 2, _
              480, 280, hParent, 0, GetModuleHandle(""), BYVAL %NULL)

  hCtl = CreateWindowEx(0, "BUTTON", "&Close", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
              240, 218, 75, 23, hWndPopup, %IDCANCEL, GetModuleHandle(""), BYVAL %NULL)
  hCtl = CreateWindowEx(0, "BUTTON", "&Jimmy Neutron", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
              100, 218, 85, 23, hWndPopup, %IDOK2, GetModuleHandle(""), BYVAL %NULL)

  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  ShowWindow hWndPopup, %SW_SHOW
  UpdateWindow hWndPopup

  LOCAL uMsg AS tagMsg
  WHILE GetMessage(uMsg, %NULL, 0, 0)
     IF ISFALSE IsDialogMessage(hWndPopup, uMsg) THEN
        TranslateMessage uMsg
        DispatchMessage uMsg
     END IF
  WEND
  FUNCTION = uMsg.wParam

END FUNCTION

'=================================================================================================================================================
FUNCTION MARIAHSWINMAIN (BYVAL hInstance AS DWORD, BYVAL hPrevInstance AS DWORD, BYVAL lpszCmdLine AS ASCIIZ PTR, BYVAL nCmdShow AS LONG) AS LONG
'=================================================================================================================================================
  LOCAL hWndMain    AS DWORD
  LOCAL hCtl        AS DWORD
  LOCAL hFont       AS DWORD
  LOCAL wcex        AS WNDCLASSEX
  LOCAL szClassName AS ASCIIZ * 80
  LOCAL rc          AS RECT
  LOCAL szCaption   AS ASCIIZ * 255
  LOCAL nLeft       AS LONG
  LOCAL nTop        AS LONG
  LOCAL nWidth      AS LONG
  LOCAL nHeight     AS LONG
  LOCAL k AS STRING

  hFont = GetStockObject(%ANSI_VAR_FONT)

  ' Register the window class
  szClassName        = "MyClassName"
  wcex.cbSize        = SIZEOF(wcex)
  wcex.style         = %CS_HREDRAW OR %CS_VREDRAW
  wcex.lpfnWndProc   = CODEPTR(ZackWindProc)
  wcex.cbClsExtra    = 0
  wcex.cbWndExtra    = 0
  wcex.hInstance     = hInstance
  wcex.hCursor       = LoadCursor (%NULL, BYVAL %IDC_ARROW)
  'wcex.hbrBackground = GetStockObject(%LTGRAY_BRUSH) '%COLOR_3DFACE + 1
  wcex.lpszMenuName  = %NULL
  wcex.lpszClassName = VARPTR(szClassName)
  wcex.hIcon         = LoadIcon (%NULL, BYVAL %IDI_APPLICATION)
  wcex.hIconSm       = LoadIcon (%NULL, BYVAL %IDI_APPLICATION)
  RegisterClassEx wcex

  szCaption = "Young Boys entering to new X-MenTeam "
  SystemParametersInfo %SPI_GETWORKAREA, 0, BYVAL VARPTR(rc), 0

  nWidth  = (((rc.nRight - rc.nLeft)) + 2) * 0.60
  nHeight = (((rc.nBottom - rc.nTop)) + 2) * 0.50
  nLeft   = ((rc.nRight - rc.nLeft) \ 2) - nWidth \ 2
  nTop    = ((rc.nBottom - rc.nTop) \ 2) - (nHeight \ 2)

  hWndMain = CreateWindowEx(%WS_EX_CONTROLPARENT, _
                            szClassName, _
                            szCaption, _
                            %WS_OVERLAPPEDWINDOW OR _
                            %WS_CLIPCHILDREN, _
                            nLeft, _
                            nTop, _
                            nWidth, _
                            nHeight, _
                            %NULL, _
                            0, _
                            hInstance, _
                            BYVAL %NULL)

  hCtl = CreateWindowEx(0, "BUTTON", "&PopupX", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDOK, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  hCtl = CreateWindowEx(0, "BUTTON", "&CloseX", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
         0, 0, 0, 0, hWndMain, %IDCANCEL, hInstance, BYVAL %NULL)
  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  ShowWindow hWndMain, nCmdShow
  UpdateWindow hWndMain

  LOCAL uMsg AS tagMsg
  WHILE GetMessage(uMsg, %NULL, 0, 0)
     IF ISFALSE IsDialogMessage(hWndMain, uMsg) THEN
        TranslateMessage uMsg
        DispatchMessage uMsg
     END IF
  WEND

  FUNCTION = uMsg.wParam

END FUNCTION
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

FUNCTION ZackWindProc (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
   LOCAL hDC    AS DWORD
   LOCAL pPaint AS PAINTSTRUCT
   LOCAL tRect  AS RECT
   LOCAL rc AS RECT

  SELECT CASE wMsg

     CASE %WM_CREATE

     CASE %WM_SIZE
        ' Resize the two sample buttons of the dialog
        IF wParam <> %SIZE_MINIMIZED THEN
           GetClientRect hWnd, rc
           MoveWindow GetDlgItem(hWnd, %IDOK), (rc.nRight - rc.nLeft) - 185, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
           MoveWindow GetDlgItem(hWnd, %IDCANCEL), (rc.nRight - rc.nLeft) - 95, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
           MoveWindow GetDlgItem(hWnd, %IDWOOLVXSELF), (rc.nRight - rc.nLeft) - 425, (rc.nBottom - rc.nTop) - 35, 75, 23, %TRUE
        END IF

     CASE %WM_COMMAND
        SELECT CASE LO(WORD, wParam)

           CASE %IDOK
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 ShowPopupDialog hwnd
              END IF

           CASE %IDCANCEL
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 SendMessage hWnd, %WM_CLOSE, 0, 0
                 EXIT FUNCTION
              END IF

           CASE %IDMYSELF
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 MSGBOX "Welcome to third MainWindow, it works, good to know!", %MB_OK, "test popup dialogs"
                 MARIAHSWINMAIN 1,1,1,1 ' experiment: ------>'Show new winmain sdk window frame
                 EXIT FUNCTION
              END IF

        END SELECT

     CASE %WM_SYSCOMMAND
        IF (wParam AND &HFFF0) = %SC_CLOSE THEN
           SendMessage hWnd, %WM_CLOSE, 0, 0
           EXIT FUNCTION
        END IF

   CASE %WM_CLOSE

   CASE %WM_PAINT
       hDC = BeginPaint(hWnd, pPaint)
       GetClientRect hWnd, tRect
       SetBkMode hDC, %TRANSPARENT
       SetTextColor hDC, %YELLOW
       DrawText hDC, "No, Mr. Woolverine will win the Champions League Cup!", -1, tRect, %DT_SINGLELINE OR %DT_CENTER OR %DT_VCENTER
       EndPaint hWnd, pPaint
       FUNCTION = 1
       EXIT FUNCTION

   CASE %WM_ERASEBKGND
       hDC = wParam
       GradientDraw hwnd, hDC
       FUNCTION = 1
       EXIT FUNCTION

     CASE %WM_DESTROY
        PostQuitMessage 0
        EXIT FUNCTION
  END SELECT

  FUNCTION = DefWindowProc(hWnd, wMsg, wParam, lParam)

END FUNCTION
' ========================================================================================

'---> Custom draw procedure for gradiend fill <--------------------------------
'==============================================================================
SUB DrawGradient (BYVAL hDC AS DWORD)
'------------------------------------------------------------------------------
   LOCAL rectFill AS RECT
   LOCAL rectClient AS RECT
   LOCAL fStep AS SINGLE
   LOCAL hBrush AS DWORD
   LOCAL lOnBand AS LONG

   GetClientRect WindowFromDC(hDC), rectClient
   fStep = rectClient.nbottom / 400 '---> 200

   FOR lOnBand = 0 TO 399 '---> 199
       SetRect rectFill, 0, lOnBand * fStep, rectClient.nright + 1, (lOnBand + 1) * fStep '--- * 2
       hBrush = CreateSolidBrush(RGB(60, 100, 255 - lOnBand))
       Fillrect hDC, rectFill, hBrush
       DeleteObject hBrush
   NEXT

END SUB

' =====================================================================================================================
' Popup dialog procedure
' =====================================================================================================================
FUNCTION PopupDlgProc (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
'----------------------------------------------------------------------------------------------------------------------
   LOCAL pPaint AS PAINTSTRUCT
   LOCAL tRect  AS RECT
   LOCAL rc AS RECT
   LOCAL hdc AS DWORD

  SELECT CASE wMsg
     CASE %WM_CREATE
        EnableWindow GetWindow(hWnd, %GW_OWNER), %FALSE

     CASE %WM_COMMAND

        SELECT CASE LO(WORD, wParam)
           CASE %IDCANCEL
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 SendMessage hWnd, %WM_CLOSE, 0, 0
                 EXIT FUNCTION
              END IF

           CASE %IDOK2
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 MSGBOX "Hey, all is good on planet earth!", %MB_OK, "..until evil aliens will come and eat us..."
                 ShowPopupDialox hwnd
                 SendMessage hWnd, %WM_CLOSE, 0, 0
                 EXIT FUNCTION
              END IF
           CASE %IDOK3
              IF HI(WORD, wParam) = %BN_CLICKED THEN
                 MSGBOX "upcoming years 2012/2013: earthquake or sunshine?..", %MB_OK, "..wheather won't be always calm to us..."
                 SendMessage hWnd, %WM_CLOSE, 0, 0
                 EXIT FUNCTION
              END IF

        END SELECT

   CASE %WM_PAINT
       hDC = BeginPaint(hWnd, pPaint)
       GetClientRect hWnd, tRect
       SetBkMode hDC, %TRANSPARENT
       SetTextColor hDC, %YELLOW
       DrawText hDC, "Soccer: sorry, Inter Mailand (Italy) will win the Champions League Cup!", -1, tRect, %DT_SINGLELINE OR %DT_CENTER OR %DT_VCENTER
       EndPaint hWnd, pPaint
       FUNCTION = 1
       EXIT FUNCTION

   CASE %WM_ERASEBKGND
       hDC = wParam
       GradientDraw2 hwnd, hDC
       FUNCTION = 1
       EXIT FUNCTION

     CASE %WM_CLOSE
        EnableWindow GetWindow(hWnd, %GW_OWNER), %TRUE

     CASE %WM_DESTROY
        PostQuitMessage 0
        EXIT FUNCTION

  END SELECT

  FUNCTION = DefWindowProc(hWnd, wMsg, wParam, lParam)

END FUNCTION

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

'--------> for gradient background second possibility :) <--------------------------------
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUB GradientDraw (BYVAL hwnd AS DWORD, BYVAL hdc AS DWORD)
'------------------------------------------------------------------------------------------
  LOCAL rc AS RECT
  DIM   vertex(1) AS TRIVERTEX

  GetClientRect hwnd, rc

  vertex(0).x      = 0
  vertex(0).y      = 0
  vertex(0).Red    = &HFF00
  vertex(0).Green  = &H0000
  vertex(0).Blue   = &H0000
  vertex(0).Alpha  = &H0000

  vertex(1).x      = rc.nRight - rc.nLeft
  vertex(1).y      = rc.nBottom - rc.nTop
  vertex(1).Red    = &H0000
  vertex(1).Green  = &HF000
  vertex(1).Blue   = &HF088
  vertex(1).Alpha  = &H0000

  LOCAL gRect AS GRADIENT_RECT

  gRect.UpperLeft  = 0
  gRect.LowerRight = 1

  GradientFill hDc, vertex(0), 2, gRect, 1, %GRADIENT_FILL_RECT_V '--> also possible: -- _H
END SUB

'--------> for gradient background second possibility :) <--------------------------------
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUB GradientDraw2 (BYVAL hwnd AS DWORD, BYVAL hdc AS DWORD)
'------------------------------------------------------------------------------------------
  LOCAL rc AS RECT
  DIM   vertex(1) AS TRIVERTEX

  GetClientRect hwnd, rc

  vertex(0).x      = 0
  vertex(0).y      = 0
  vertex(0).Red    = &HFF00
  vertex(0).Green  = &H0000
  vertex(0).Blue   = &H0000
  vertex(0).Alpha  = &H0000

  vertex(1).x      = rc.nRight - rc.nLeft
  vertex(1).y      = rc.nBottom - rc.nTop
  vertex(1).Red    = &H0000
  vertex(1).Green  = &HF000
  vertex(1).Blue   = &HF088
  vertex(1).Alpha  = &H0000

  LOCAL gRect AS GRADIENT_RECT

  gRect.UpperLeft  = 0
  gRect.LowerRight = 1

  GradientFill hDc, vertex(0), 2, gRect, 1, %GRADIENT_FILL_RECT_H '--> also possible: -- _V
END SUB
'----------------------------------------------------------------------------------------------

'----------------------------------------------------------
SUB GradientDraw3 (BYVAL hwnd AS DWORD, BYVAL hdc AS DWORD)
'----------------------------------------------------------
  LOCAL rc AS RECT
  DIM   vertex(1) AS TRIVERTEX

  GetClientRect hwnd, rc

  vertex(0).x      = 0
  vertex(0).y      = 0
  vertex(0).Red    = &HFF00
  vertex(0).Green  = &H0000
  vertex(0).Blue   = &HFF00
  vertex(0).Alpha  = &H0000

  vertex(1).x      = rc.nRight - rc.nLeft
  vertex(1).y      = rc.nBottom - rc.nTop
  vertex(1).Red    = &H0000
  vertex(1).Green  = &HF000
  vertex(1).Blue   = &HF088
  vertex(1).Alpha  = &H0000

  LOCAL gRect AS GRADIENT_RECT

  gRect.UpperLeft  = 0
  gRect.LowerRight = 1

  GradientFill hDc, vertex(0), 2, gRect, 1, %GRADIENT_FILL_RECT_V

END SUB
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

'---------------> substitute if I like it: popup dialog for new winmain <-------------------------
FUNCTION ShowPopupDialox (BYVAL hParent AS LONG) AS LONG
'---------------> substitute if I like it: popup dialog for new winmain <-------------------------

  LOCAL hWndPopup   AS LONG
  LOCAL hCtl        AS LONG
  LOCAL hFont       AS LONG
  LOCAL rc          AS RECT
  LOCAL wcex        AS WNDCLASSEX
  LOCAL szClassName AS ASCIIZ * 80
  LOCAL szCaption   AS ASCIIZ * 255

  hFont = GetStockObject(%ANSI_VAR_FONT)

  szClassName        = "MyPopupClassName"
  wcex.cbSize        = SIZEOF(wcex)
  wcex.style         = %CS_HREDRAW OR %CS_VREDRAW
  wcex.lpfnWndProc   = CODEPTR(PopupDlgProc)
  wcex.cbClsExtra    = 0
  wcex.cbWndExtra    = 0
  wcex.hInstance     = GetModuleHandle("")
  wcex.hCursor       = LoadCursor(%NULL, BYVAL %IDC_ARROW)
  wcex.hbrBackground = GetStockObject(%LTGRAY_BRUSH) '%COLOR_3DFACE + 1 '%LTGRAY_BRUSH
  wcex.lpszMenuName  = %NULL
  wcex.lpszClassName = VARPTR(szClassName)
  wcex.hIcon         = 0
  wcex.hIconSm       = 0
  RegisterClassEx wcex

  GetWindowRect hParent, rc          ' For centering child in parent
  rc.nRight = rc.nRight - rc.nLeft   ' Parent's width
  rc.nBottom = rc.nBottom - rc.nTop  ' Parent's height

  szCaption = "Last simple dialox"
  hWndPopup = CreateWindowEx(%WS_EX_DLGMODALFRAME OR %WS_EX_CONTROLPARENT, _
              szClassName, szCaption, %WS_CAPTION OR %WS_POPUPWINDOW OR %WS_VISIBLE, _
              rc.nLeft + (rc.nRight - 290) / 2, _
              rc.nTop + (rc.nBottom - 180) / 2, _
              480, 280, hParent, 0, GetModuleHandle(""), BYVAL %NULL)

  hCtl = CreateWindowEx(0, "BUTTON", "&Close", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
              240, 218, 75, 23, hWndPopup, %IDCANCEL, GetModuleHandle(""), BYVAL %NULL)
  hCtl = CreateWindowEx(0, "BUTTON", "&Mariah Neutron", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_FLAT, _
              100, 218, 85, 23, hWndPopup, %IDOK3, GetModuleHandle(""), BYVAL %NULL)

  IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0

  ShowWindow hWndPopup, %SW_SHOW
  UpdateWindow hWndPopup
  ' Message handler loop
  LOCAL uMsg AS tagMsg
  WHILE GetMessage(uMsg, %NULL, 0, 0)
     IF ISFALSE IsDialogMessage(hWndPopup, uMsg) THEN
        TranslateMessage uMsg
        DispatchMessage uMsg
     END IF
  WEND

  FUNCTION = uMsg.wParam

END FUNCTION

'---------------------------------> end of popup dialogs, part one :) <-------------------------------------------



nice day, frank