Implement some win32 grf window handling.
This commit is contained in:
19
ueforth/common/grf_test.fs
Normal file
19
ueforth/common/grf_test.fs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
\ Copyright 2022 Bradley D. Nelson
|
||||||
|
\
|
||||||
|
\ Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
\ you may not use this file except in compliance with the License.
|
||||||
|
\ You may obtain a copy of the License at
|
||||||
|
\
|
||||||
|
\ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
\
|
||||||
|
\ Unless required by applicable law or agreed to in writing, software
|
||||||
|
\ distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
\ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
\ See the License for the specific language governing permissions and
|
||||||
|
\ limitations under the License.
|
||||||
|
|
||||||
|
grf
|
||||||
|
|
||||||
|
640 480 window
|
||||||
|
wait
|
||||||
|
bye
|
||||||
@ -16,5 +16,70 @@
|
|||||||
( Expand Graphics for Windows )
|
( Expand Graphics for Windows )
|
||||||
|
|
||||||
grf internals definitions
|
grf internals definitions
|
||||||
|
also windows
|
||||||
|
|
||||||
forth definitions
|
z" GrfClass" constant GrfClassName
|
||||||
|
z" uEforth" constant GrfWindowTitle
|
||||||
|
|
||||||
|
0 value hinstance
|
||||||
|
0 value GrfClass
|
||||||
|
0 value hwnd
|
||||||
|
create ps PAINTSTRUCT allot
|
||||||
|
create msgbuf MSG allot
|
||||||
|
|
||||||
|
255 192 0 RGB CreateSolidBrush constant orange
|
||||||
|
0 255 0 RGB CreateSolidBrush constant green
|
||||||
|
create side RECT allot
|
||||||
|
0 side ->left !
|
||||||
|
0 side ->top !
|
||||||
|
200 side ->right !
|
||||||
|
100 side ->bottom !
|
||||||
|
|
||||||
|
|
||||||
|
: GrfWindowProc { hwnd msg w l }
|
||||||
|
WM_DESTROY msg = if
|
||||||
|
0 PostQuitMessage
|
||||||
|
0 exit
|
||||||
|
then
|
||||||
|
WM_PAINT msg = if
|
||||||
|
hwnd ps BeginPaint drop
|
||||||
|
ps ->hdc @ ps ->rcPaint orange FillRect drop
|
||||||
|
ps ->hdc @ side green FillRect drop
|
||||||
|
hwnd ps EndPaint drop
|
||||||
|
0 exit
|
||||||
|
then
|
||||||
|
hwnd msg w l DefWindowProcA
|
||||||
|
;
|
||||||
|
|
||||||
|
grf definitions
|
||||||
|
also internals
|
||||||
|
also windows
|
||||||
|
|
||||||
|
: window { width height }
|
||||||
|
NULL GetModuleHandleA to hinstance
|
||||||
|
|
||||||
|
pad WINDCLASSA erase
|
||||||
|
WindowProcShim pad ->lpfnWndProc !
|
||||||
|
hinstance pad ->hInstance !
|
||||||
|
GrfClassName pad ->lpszClassName !
|
||||||
|
NULL IDC_ARROW LoadCursorA pad ->hCursor !
|
||||||
|
hinstance IDI_MAIN_ICON LoadIconA pad ->hIcon !
|
||||||
|
pad RegisterClassA to GrfClass
|
||||||
|
|
||||||
|
0 GrfClass GrfWindowTitle WS_OVERLAPPEDWINDOW
|
||||||
|
CW_USEDEFAULT CW_USEDEFAULT width height
|
||||||
|
NULL NULL hinstance ['] GrfWindowProc callback
|
||||||
|
CreateWindowExA to hwnd
|
||||||
|
|
||||||
|
hwnd SW_SHOWMAXIMIZED ShowWindow drop
|
||||||
|
hwnd SetForegroundWindow drop
|
||||||
|
;
|
||||||
|
|
||||||
|
: wait
|
||||||
|
begin msgbuf NULL 0 0 GetMessageA while
|
||||||
|
msgbuf TranslateMessage drop
|
||||||
|
msgbuf DispatchMessageA drop
|
||||||
|
repeat
|
||||||
|
;
|
||||||
|
|
||||||
|
only forth definitions
|
||||||
|
|||||||
@ -38,7 +38,7 @@ create side RECT allot
|
|||||||
200 side ->right !
|
200 side ->right !
|
||||||
100 side ->bottom !
|
100 side ->bottom !
|
||||||
|
|
||||||
: foo { hwnd msg w l }
|
: MyWindowProc { hwnd msg w l }
|
||||||
WM_DESTROY msg = if
|
WM_DESTROY msg = if
|
||||||
0 PostQuitMessage
|
0 PostQuitMessage
|
||||||
0 exit
|
0 exit
|
||||||
@ -52,11 +52,11 @@ create side RECT allot
|
|||||||
then
|
then
|
||||||
hwnd msg w l DefWindowProcA
|
hwnd msg w l DefWindowProcA
|
||||||
;
|
;
|
||||||
create bar ' foo , ' yield ,
|
|
||||||
|
|
||||||
0 myclass MyWindowTitle WS_OVERLAPPEDWINDOW
|
0 myclass MyWindowTitle WS_OVERLAPPEDWINDOW
|
||||||
CW_USEDEFAULT CW_USEDEFAULT 640 480
|
CW_USEDEFAULT CW_USEDEFAULT 640 480
|
||||||
NULL NULL hinst bar CreateWindowExA constant hwnd
|
NULL NULL hinst ' MyWindowProc callback
|
||||||
|
CreateWindowExA constant hwnd
|
||||||
|
|
||||||
hwnd SW_SHOWMAXIMIZED ShowWindow drop
|
hwnd SW_SHOWMAXIMIZED ShowWindow drop
|
||||||
hwnd SetForegroundWindow drop
|
hwnd SetForegroundWindow drop
|
||||||
|
|||||||
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
windows definitions
|
windows definitions
|
||||||
also structures
|
also structures
|
||||||
|
also internals
|
||||||
|
|
||||||
z" User32.dll" dll User32
|
z" User32.dll" dll User32
|
||||||
|
|
||||||
@ -58,6 +59,8 @@ SW_MAXIMIZED constant SW_SHOWMAXIMIZED
|
|||||||
z" SetForegroundWindow" 1 User32 SetForegroundWindow
|
z" SetForegroundWindow" 1 User32 SetForegroundWindow
|
||||||
z" DefWindowProcA" 4 User32 DefWindowProcA
|
z" DefWindowProcA" 4 User32 DefWindowProcA
|
||||||
|
|
||||||
|
: callback ( xt -- ) here >r , ['] yield , r> ;
|
||||||
|
|
||||||
z" CreateWindowExA" 12 User32 CreateWindowExA
|
z" CreateWindowExA" 12 User32 CreateWindowExA
|
||||||
$00000000 constant WS_OVERLAPPED
|
$00000000 constant WS_OVERLAPPED
|
||||||
$00010000 constant WS_MAXIMIZEBOX
|
$00010000 constant WS_MAXIMIZEBOX
|
||||||
|
|||||||
Reference in New Issue
Block a user