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.
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
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.
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