SHOW:
|
|
- or go back to the newest paste.
| 1 | #define fbc -s console | |
| 2 | 'default.rc | |
| 3 | ||
| 4 | #include once "windows.bi" | |
| 5 | #include once "win\commctrl.bi" | |
| 6 | #include once "crt.bi" | |
| 7 | ||
| 8 | '*************** Enumerating our control id's *********** | |
| 9 | enum WindowControls | |
| 10 | wcMain | |
| 11 | wcButton | |
| 12 | wcEdit | |
| 13 | wcLast | |
| 14 | end enum | |
| 15 | ||
| 16 | dim shared as hwnd CTL(wcLast) 'controls | |
| 17 | dim shared as hinstance APPINSTANCE 'instance | |
| 18 | dim shared as hfont MyFont 'fonts | |
| 19 | dim shared as string sAppName 'AppName (window title 'prefix') | |
| 20 | ||
| 21 | declare sub WinMain() | |
| 22 | ||
| 23 | sAppName = "GUI Example" | |
| 24 | InitCommonControls() | |
| 25 | APPINSTANCE = GetModuleHandle(null) | |
| 26 | WinMain() '<- main function | |
| 27 | ||
| 28 | ' *************** Procedure Function **************** | |
| 29 | function WndProc ( hWnd as HWND, message as UINT, wParam as WPARAM, lParam as LPARAM ) as LRESULT | |
| 30 | ||
| 31 | select case( message ) | |
| 32 | case WM_CREATE 'Window was created | |
| 33 | if CTL(wcMain) then return 0 | |
| 34 | CTL(wcMain) = hwnd | |
| 35 | ||
| 36 | - | scope 'Calculate Client Area Size |
| 36 | + | |
| 37 | - | dim as rect RcWnd=any,RcCli=any,RcDesk=any |
| 37 | + | |
| 38 | - | GetClientRect(hWnd,@RcCli) |
| 38 | + | |
| 39 | - | GetClientRect(GetDesktopWindow(),@RcDesk) |
| 39 | + | |
| 40 | - | GetWindowRect(hWnd,@RcWnd) |
| 40 | + | |
| 41 | - | 'Window Rect is in SCREEN coordinate.... make right/bottom become WID/HEI |
| 41 | + | |
| 42 | - | with RcWnd |
| 42 | + | |
| 43 | - | .right -= .left : .bottom -= .top |
| 43 | + | |
| 44 | - | .right += (.right-RcCli.right) 'add difference cli/wnd |
| 44 | + | |
| 45 | - | .bottom += (.bottom-RcCli.bottom) 'add difference cli/wnd |
| 45 | + | |
| 46 | - | var iCenterX = (RcDesk.right-.right)\2 |
| 46 | + | |
| 47 | - | var iCenterY = (RcDesk.bottom-.bottom)\2 |
| 47 | + | |
| 48 | - | SetWindowPos(hwnd,null,iCenterX,iCenterY,.right,.bottom,SWP_NOZORDER) |
| 48 | + | |
| 49 | - | end with |
| 49 | + | |
| 50 | - | end scope |
| 50 | + | |
| 51 | CreateControl( wcButton , null , "button" , "Click" , cStyle , 10 , 10 , 80 , 24 ) | |
| 52 | CreateControl( wcEdit , cBrd , "edit" , "Hello World " , cTxtStyle , 10 , 44 , 320 , 240 ) | |
| 53 | ||
| 54 | ' **** Creating a font **** | |
| 55 | var hDC = GetDC(hWnd) 'can be used for other stuff that requires a temporary DC | |
| 56 | var nHeight = -MulDiv(12, GetDeviceCaps(hDC, LOGPIXELSY), 72) 'calculate size matching DPI | |
| 57 | ||
| 58 | MyFont = CreateFont(nHeight,0,0,0,FW_NORMAL,0,0,0,DEFAULT_CHARSET,0,0,DRAFT_QUALITY or ANTIALIASED_QUALITY,0,"Verdana") | |
| 59 | ' **** Setting this font for all controls **** | |
| 60 | for CNT as integer = wcMain to wcLast-1 | |
| 61 | SendMessage(CTL(CNT),WM_SETFONT,cast(wparam,MyFont),true) | |
| 62 | next CNT | |
| 63 | SendMessage(CTL(wcEdit),EM_SETLIMITTEXT,0,0) | |
| 64 | ||
| 65 | ReleaseDC(hWnd,hDC) | |
| 66 | ||
| 67 | SetFocus(hwnd) | |
| 68 | ||
| 69 | case WM_COMMAND 'Event happened to a control (child window) | |
| 70 | ||
| 71 | select case hiword(wparam) | |
| 72 | case EN_CHANGE | |
| 73 | print SendMessage(CTL(wcEdit),WM_GETTEXTLENGTH,0,0) | |
| 74 | case BN_CLICKED 'button click | |
| 75 | select case lparam | |
| 76 | case CTL(wcButton) | |
| 77 | Messagebox( hwnd , "Bye" , "Bye" , MB_ICONINFORMATION ) | |
| 78 | PostQuitMessage(0) | |
| 79 | end select | |
| 80 | end select | |
| 81 | ||
| 82 | case WM_DESTROY 'Windows was closed/destroyed | |
| 83 | PostQuitMessage(0) ' to quit | |
| 84 | return 0 | |
| 85 | end select | |
| 86 | ||
| 87 | ' *** if program reach here default predefined action will happen *** | |
| 88 | return DefWindowProc( hWnd, message, wParam, lParam ) | |
| 89 | ||
| 90 | end function | |
| 91 | ||
| 92 | ' ********************************************************************* | |
| 93 | ' *********************** SETUP MAIN WINDOW *************************** | |
| 94 | ' ******************* This code can be ignored ************************ | |
| 95 | ' ********************************************************************* | |
| 96 | ||
| 97 | sub WinMain () | |
| 98 | ||
| 99 | dim wMsg as MSG | |
| 100 | dim wcls as WNDCLASS | |
| 101 | dim as HWND hWnd | |
| 102 | ||
| 103 | '' Setup window class | |
| 104 | ||
| 105 | with wcls | |
| 106 | .style = CS_HREDRAW or CS_VREDRAW | |
| 107 | .lpfnWndProc = @WndProc | |
| 108 | .cbClsExtra = 0 | |
| 109 | .cbWndExtra = 0 | |
| 110 | .hInstance = APPINSTANCE | |
| 111 | .hIcon = LoadIcon( APPINSTANCE, "FB_PROGRAM_ICON" ) | |
| 112 | .hCursor = LoadCursor( NULL, IDC_ARROW ) | |
| 113 | .hbrBackground = GetSysColorBrush( COLOR_BTNFACE ) | |
| 114 | .lpszMenuName = NULL | |
| 115 | .lpszClassName = strptr( sAppName ) | |
| 116 | end with | |
| 117 | ||
| 118 | '' Register the window class | |
| 119 | if( RegisterClass( @wcls ) = FALSE ) then | |
| 120 | MessageBox( null, "Failed to register wcls!", sAppName, MB_ICONINFORMATION ) | |
| 121 | exit sub | |
| 122 | end if | |
| 123 | ||
| 124 | '' Create the window and show it | |
| 125 | const cStyleEx = 0 'WS_EX_COMPOSITED or WS_EX_LAYERED | |
| 126 | const cStyle = WS_VISIBLE or WS_TILEDWINDOW or WS_CLIPCHILDREN | |
| 127 | dim as RECT tWndRc = (0,0,640,480) | |
| 128 | AdjustWindowRectEx( @tWndRc , cStyle , FALSE , cStyleEx ) | |
| 129 | hWnd = CreateWindowEx(cStyleEx,sAppName,sAppName,cStyle, _ | |
| 130 | 200,200,tWndRc.right-tWndRc.left,tWndRc.bottom-tWndRc.top,null,null,APPINSTANCE,0) | |
| 131 | ||
| 132 | '' Process windows messages | |
| 133 | ' *** all messages(events) will be read converted/dispatched here *** | |
| 134 | UpdateWindow( hWnd ) | |
| 135 | ||
| 136 | while( GetMessage( @wMsg, NULL, 0, 0 ) <> FALSE ) | |
| 137 | 'if IsDialogMessage( hWnd ,@wMsg ) then continue while | |
| 138 | TranslateMessage( @wMsg ) | |
| 139 | DispatchMessage( @wMsg ) | |
| 140 | - | '' Create the window and show it |
| 140 | + | |
| 141 | - | 'WS_EX_COMPOSITED or WS_EX_LAYERED |
| 141 | + | |
| 142 | - | hWnd = CreateWindowEx(0,sAppName,sAppName, WS_VISIBLE or WS_TILEDWINDOW or WS_CLIPCHILDREN, _ |
| 142 | + | |
| 143 | - | 200,200,640,480,null,null,APPINSTANCE,0) |
| 143 | + | |
| 144 |