03-23-2023, 07:18 PM
well it looks that i found ...i use wrong part of TYPE MSG and TYPE WNDCLASSA
even TYPE WNDCLASSA is old version from win98 times
should be like this o2 code:
'for 32 bit...
TYPE WNDCLASSEX
cbSize as LONG
Style as LONG
lpfnwndproc as _OFFSET
cbClsextra as LONG
cbWndExtra as LONG
hInstance as LONG
hIcon as LONG
hCursor as LONG
hbrBackground as LONG
lpszMenuName as STRING
lpszClassName as STRING
hIconSm AS LONG
END TYPE
anyway ..first working qin api GUI program
even TYPE WNDCLASSA is old version from win98 times
should be like this o2 code:
'for 32 bit...
TYPE WNDCLASSEX
cbSize as LONG
Style as LONG
lpfnwndproc as _OFFSET
cbClsextra as LONG
cbWndExtra as LONG
hInstance as LONG
hIcon as LONG
hCursor as LONG
hbrBackground as LONG
lpszMenuName as STRING
lpszClassName as STRING
hIconSm AS LONG
END TYPE
anyway ..first working qin api GUI program
Code: (Select All)
'test 1 GUI win32 api in QB64pe v3.2.1 by Aurel
$SCREENHIDE
CONST IDC_ARROW = &H7F00
CONST COLOR_WINDOW = 5
CONST WS_OVERLAPPED = 0
CONST WS_CHILD = &H40000000
CONST WS_VISIBLE = &H10000000
CONST WS_MAXIMIZE = &H01000000
CONST WS_CAPTION = &H00C00000
CONST WS_VSCROLL = &H00200000
CONST WS_HSCROLL = &H00100000
CONST WS_SYSMENU = &H00080000
CONST WS_THICKFRAME = &H00040000
CONST WS_TABSTOP = &H00010000
CONST WS_MINIMIZEBOX = &H00020000
CONST WS_MAXIMIZEBOX = &H00010000
CONST WS_OVERLAPPEDWINDOW = WS_VISIBLE OR WS_OVERLAPPED OR WS_CAPTION OR WS_SYSMENU OR WS_THICKFRAME OR WS_MINIMIZEBOX OR WS_MAXIMIZEBOX
CONST CW_USEDEFAULT = &H80000000
CONST BS_PUSHBUTTON = 0
CONST BS_AUTOCHECKBOX = 3
CONST BS_GROUPBOX = 7
CONST BS_AUTORADIOBUTTON = 9
CONST BS_TEXT = 0
CONST BN_CLICKED = 0
CONST BM_GETCHECK = &HF0
CONST ES_LEFT = 0
CONST ES_MULTILINE = 4
CONST ES_AUTOVSCROLL = &H0040
CONST ES_AUTOHSCROLL = &H0080
CONST ES_WANTRETURN = &H1000
CONST WM_DESTROY = 2
CONST WM_GETTEXT = &H000D
CONST WM_CLOSE = &H0010
CONST WM_COMMAND = &H0111
CONST SW_SHOWDEFAULT = &HA
CONST SW_SHOW = 5
DECLARE LIBRARY "win"
FUNCTION GetWindowProc%& ()
END DECLARE
DECLARE DYNAMIC LIBRARY "user32"
FUNCTION SendMessageA%& (BYVAL hWnd%&, BYVAL Msg~&, BYVAL wParam~%&, BYVAL lParam%&)
FUNCTION DefWindowProcA%& (BYVAL hWnd%&, BYVAL Msg~&, BYVAL wParam~%&, BYVAL lParam%&)
SUB PostQuitMessage (BYVAL nExitCode&)
FUNCTION LoadCursorW%& (BYVAL hInstance%&, BYVAL lpCursorName%&)
FUNCTION RegisterClassA~% (BYVAL lpWndClass%&)
'FUNCTION CreateWindowEx%& (ByVal dwExStyle As Long, byval lpClassName%&, byval lpWindowName%&, Byval dwStyle As Long, Byval x As Long, Byval y As Long, Byval nWidth As Long, Byval nHeight As Long, Byval hWndParent As Long, Byval hMenu As Long, Byval hInstance As _OFFSET, Byval lpParam As Long )
FUNCTION CreateWindowExA%& (BYVAL dwExStyle~&, BYVAL lpClassName%&, BYVAL lpWindowName%&, BYVAL dwStyle~&, BYVAL x&, BYVAL y&, BYVAL nWidth&, BYVAL nHeight&, BYVAL hWndParent%&, BYVAL hMenu%&, BYVAL hInstance%&, BYVAL lpParam%&)
FUNCTION ShowWindow& (BYVAL hWnd%&, BYVAL nCmdShow&)
FUNCTION UpdateWindow& (BYVAL hWnd%&)
FUNCTION GetMessageA& (BYVAL lpMsg%&, BYVAL hWnd%&, BYVAL wMsgFilterMin~&, BYVAL wMsgFilterMax~&)
FUNCTION TranslateMessage& (BYVAL lpMsg%&)
FUNCTION DispatchMessageA%& (BYVAL lpmsg%&)
END DECLARE
DECLARE DYNAMIC LIBRARY "kernel32"
FUNCTION GetModuleHandleA%& (BYVAL lpModuleName%&)
'FUNCTION GetLastError~& ()
END DECLARE
TYPE POINT
x AS LONG
y AS LONG
END TYPE
' 64 bit
TYPE MSG
hwnd AS _OFFSET
message AS _OFFSET
wParam AS _UNSIGNED _OFFSET 'unsigned pointer sized integer
lParam AS _OFFSET 'pointer sized integer
time AS _INTEGER64
pt AS POINT
END TYPE
TYPE WNDCLASSA
style AS _INTEGER64
lpfnWndProc AS _OFFSET
cbClsExtra AS LONG
cbWndExtra AS LONG
hInstance AS _OFFSET
hIcon AS _OFFSET
hCursor AS _OFFSET
hbrBackground AS _OFFSET
lpszMenuName AS _OFFSET
lpszClassName AS _OFFSET
END TYPE
DIM SHARED hi AS _OFFSET
DIM SHARED bRet AS LONG
DIM SHARED hw AS _OFFSET
DIM SHARED hwb0 AS _OFFSET
DIM SHARED hwb1 AS _OFFSET
DIM SHARED hwcb AS _OFFSET
DIM SHARED hwgb AS _OFFSET
DIM SHARED hwr0 AS _OFFSET
DIM SHARED hwr1 AS _OFFSET
DIM SHARED hwe AS _OFFSET
DIM SHARED wc AS WNDCLASSA
DIM SHARED wmsg AS MSG
DIM SHARED at AS _UNSIGNED INTEGER
DIM SHARED buf AS STRING * 4096
DIM SHARED sw AS LONG
DIM SHARED uw AS _OFFSET
DIM SHARED t0 AS STRING
DIM SHARED t1 AS STRING
DIM SHARED ClassName AS STRING
ClassName = "QB64pe"
'DIM SHARED crlf AS STRING * 2
'crlf = MKI$(&HA0D)
hi = GetModuleHandleA(0)
wc.style = 0
wc.lpfnWndProc = GetWindowProc
wc.cbClsExtra = 0
wc.cbWndExtra = 0
wc.hInstance = hi
wc.hIcon = 0
wc.hCursor = LoadCursorW(0, IDC_ARROW)
wc.hbrBackground = COLOR_WINDOW + 1
wc.lpszMenuName = 0
wc.lpszClassName = _OFFSET(ClassName)
at = RegisterClassA(_OFFSET(wc)): IF 0=at THEN SYSTEM
'create main window
t1 = "QB64pe_GUI_App"
hw = CreateWindowExA(0, _OFFSET(ClassName), _OFFSET(t1), WS_OVERLAPPEDWINDOW , 200, 200, 800, 600, 0, 0, hi, 0)
IF 0 = hw THEN SYSTEM
'ShowWindow(hw, SW_SHOW)
'UpdateWindow(hw)
sw = ShowWindow(hw, SW_SHOW)
sw = UpdateWindow(hw)
'win message loop..................................
DO
bRet = GetMessageA(_OFFSET(wmsg), 0, 0, 0)
SELECT CASE bRet
CASE 0, -1: EXIT DO
END SELECT
sw = TranslateMessage(_OFFSET(wmsg))
uw = DispatchMessageA(_OFFSET(wmsg))
'wend
LOOP
'..................................................
FUNCTION WindowProc%& (hWnd AS _OFFSET, uMsg AS _UNSIGNED LONG, wParam AS _UNSIGNED _OFFSET, lParam AS _OFFSET)
SELECT CASE uMsg
CASE WM_DESTROY
PostQuitMessage(0)
WindowProc=0 : EXIT FUNCTION
CASE ELSE
WindowProc = DefWindowProcA(hWnd, uMsg, wParam, lParam): EXIT FUNCTION
END SELECT
'WindowProc = DefWindowProcA(hWnd, uMsg, wParam, lParam)
END FUNCTION
micro(A)developer
http://basic4us.epizy.com/forum/index.php
http://basic4us.epizy.com/forum/index.php