/*====================================================== * CCT_lib.iwb * Custom Control Tutorial Library Source File * PART 02 * Copyright (c)T.L. McCaughn 2011 * This file may be freely shared *======================================================/ AUTODEFINE "OFF" /* I always use this - personal preference */ $include "windowssdk.inc" /* I always use this - personal preference */ $include "gdiplus.inc" /* Needed in order to use the GDI+ library */ /*----------------SECTION 1----------------------------- This section contains the required global declarations for our library -------------------------------------------------------*/ GLOBAL CreateGageRLM GLOBAL ConfigGageRLM GLOBAL SetGagePanelColorRLM GLOBAL SetGageDialDarkRLM GLOBAL SetGagePos1RLM GLOBAL SetGagePos2RLM /*=============== END OF SECTION 1 =====================*/ /*----------------SECTION 2------------------------------ This section contains declarations needed for our library along with any needed initialization ---------------------------------------------------------*/ ENUM GMsg GAGE_STYLE = 0x401 GAGE_TITLE GAGE_UNITS GAGE_RAWRNG GAGE_DIALRNG GAGE_MULTI GAGE_SETPANEL_COLOR GAGE_DIAL_DARK GAGE_CLKOFFSET GAGE_SETPOS1 GAGE_SETPOS2 ENDENUM const ROUND270B = 1 const ROUND270T = 2 const ROUND270L = 3 const ROUND270R = 4 const ROUND360SGL = 5 const ROUND360DBL = 6 const ROUNDCLOCK12 = 7 const ROUNDCLOCK24 = 8 const ROUND2PENV = 9 const ROUND2PENH = 10 /*=============== END OF SECTION 2 ======================*/ /*----------------SECTION 3------------------------------ This section contains the control's message handler ---------------------------------------------------------*/ SUB MyProc_CC(hWnd:UINT, uMsg:UINT, wParam:UINT, lParam:ANYTYPE),UINT SELECT uMsg CASE WM_CREATE RETURN 0 CASE WM_DESTROY RETURN 0 CASE WM_PAINT RETURN 0 CASE WM_ERASEBKGND RETURN 0 CASE WM_SETFOCUS RETURN 0 CASE WM_KILLFOCUS RETURN 0 CASE GAGE_STYLE RETURN 0 CASE GAGE_TITLE RETURN 0 CASE GAGE_UNITS RETURN 0 CASE GAGE_RAWRNG RETURN 0 CASE GAGE_DIALRNG RETURN 0 CASE GAGE_MULTI RETURN 0 CASE GAGE_SETPANEL_COLOR RETURN 0 CASE GAGE_DIAL_DARK RETURN 0 CASE GAGE_CLKOFFSET RETURN 0 CASE GAGE_SETPOS1 RETURN 0 CASE GAGE_SETPOS2 RETURN 0 ENDSELECT RETURN(DefWindowProc(hWnd, uMsg, wParam, lParam)) ENDSUB /*=============== END OF SECTION 3 ======================*/ /*----------------SECTION 4------------------------------- This section contains the routine used to register the control with the OS. ----------------------------------------------------------*/ SUB RegisterGage1ClassLM() STATIC INT classRegistered = 0 IF classRegistered = 0 WNDCLASSEX wc wc.cbSize = len(WNDCLASSEX) wc.style = CS_GLOBALCLASS | CS_HREDRAW | CS_VREDRAW wc.lpfnWndProc = &MyProc_CC wc.cbClsExtra = 0 wc.cbWndExtra = 0 wc.hInstance = _hinstance wc.hIcon = NULL wc.hCursor = LoadCursor(NULL, IDC_ARROW) wc.hbrBackground = GetStockObject(WHITE_BRUSH) wc.lpszMenuName = NULL wc.lpszClassName = "LM_Gage1_Class" wc.hIconSm = NULL classRegistered = RegisterClassEx(wc) ENDIF ENDSUB /*=============== END OF SECTION 4 =======================*/ /*----------------SECTION 5------------------------------- This section contains the command used to create a control. -----------------------------------------------------------*/ SUB CreateGageRLM(win as WINDOW,l as INT,t as INT,d as INT,id as UINT ) RegisterGage1ClassLM() CONTROLEX win,"LM_Gage1_Class","",l,t,d,d,0,0,id RETURN ENDSUB /*=============== END OF SECTION 5 =========================*/ /*----------------SECTION 6--------------------------------- This section contains the control's configuration commands ------------------------------------------------------------*/ SUB ConfigGageRLM(win as WINDOW,_ style as int,_ title as string,_ u as string,_ rawmin as int,_ rawmax as int,_ dialmin as int,_ dialmax as int,_ sf as int,_ id as UINT ) SENDMESSAGE(win, GAGE_STYLE, 0,style, id) STRING ttemp=title SELECT style CASE ROUND270B CASE& ROUND270T CASE& ROUND270R CASE& ROUND270L IF (dialmax-dialmin < 1) | (dialmax-dialmin > 15) dialmin=0:dialmax=1 ttemp="Dial Min/Max Error!" ENDIF ENDSELECT SENDMESSAGE(win, GAGE_TITLE, 0,ttemp, id) SENDMESSAGE(win, GAGE_UNITS, 0,u, id) SELECT style CASE ROUNDCLOCK12 CASE& ROUNDCLOCK24 SENDMESSAGE(win, GAGE_CLKOFFSET, dialmin,0, id) DEFAULT SENDMESSAGE(win, GAGE_RAWRNG, rawmin,rawmax, id) ENDSELECT SELECT style CASE ROUND360SGL CASE& ROUND360DBL CASE& ROUND2PENV CASE& ROUND2PENH dialmin = 0 : dialmax = 10 ENDSELECT SENDMESSAGE(win, GAGE_DIALRNG, dialmin,dialmax, id) SENDMESSAGE(win, GAGE_MULTI, 0,sf, id) GageInvalidateBackground(win, id) RETURN ENDSUB SUB SetGagePanelColorRLM(win as WINDOW,id as UINT,pnlcolor as UINT) SENDMESSAGE(win, GAGE_SETPANEL_COLOR, pnlcolor,0, id) RETURN ENDSUB SUB SetGageDialDarkRLM(win as WINDOW,id as UINT) SENDMESSAGE(win, GAGE_DIAL_DARK, 0,0, id) RETURN ENDSUB SUB SetGagePos1RLM(win as WINDOW,id as UINT,pos as INT) SENDMESSAGE(win, GAGE_SETPOS1, pos,0, id) RETURN ENDSUB SUB SetGagePos2RLM(win as WINDOW,id as UINT,pos as INT) SENDMESSAGE(win, GAGE_SETPOS2, pos,0, id) RETURN ENDSUB /*=============== END OF SECTION 6 =========================*/ /*----------------SECTION 7--------------------------------- This section contains routines for updating the pointer positions of the control ------------------------------------------------------------*/ /*=============== END OF SECTION 7 =========================*/ /*----------------SECTION 8---------------------------------- This section contains routines that support the control's message handler ------------------------------------------------------------*/ SUB GageInvalidateBackground(win as WINDOW, id as UINT) ENDSUB /*=============== END OF SECTION 8 =========================*/ /*----------------SECTION 9--------------------------------- This section contains routine for the control to talk to its parent -------------------------------------------------------------*/ /*=============== END OF SECTION 9 ===========================*/ /*----------------SECTION 10---------------------------------- This section contains any required utility routines --------------------------------------------------------------*/ /*=============== END OF SECTION 10 ==========================*/