#define GWIN_ERROR_NONE 0 #define GWIN_ALREADY_CREATED 1 #define GWIN_REGISTER_CLASS_FAIL 2 #define GWIN_FAIL_CREATE 3 #define GWIN_TYPE_WINDOW 1 #define GWIN_TYPE_BUTTON 2 #define GWIN_TYPE_TABCONTROL 3 #define GWIN_TYPE_STATIC 4 #define GWIN_TYPE_MDICLIENT 5 #define GWIN_TYPE_EDIT 6 #define GWIN_TYPE_LISTBOX 7 #define GMENU_TYPE_UNKNOWN 0 #define GMENU_TYPE_MENU 1 #define GMENU_TYPE_POPUP 2 #define GPLACE_NONE 0 #define GPLACE_CLIENT 1 #define GPLACE_NORTH 2 #define GPLACE_SOUTH 3 #define GPLACE_EAST 4 #define GPLACE_WEST 5 #define GPLACE_NORTHEAST 6 #define GPLACE_NORTHWEST 7 #define GPLACE_SOUTHEAST 8 #define GPLACE_SOUTHWEST 9 class Menu; class GWin { public: typedef LRESULT(* CMDPROC)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); GWin(LPSTR type, CMDPROC initproc); GWin(LPSTR type); ~GWin(); HINSTANCE hInst; // you probably shouldn't touch this, even though it's public - we'll probably make it private WNDCLASSEX wincl; HWND Create(GWin * parent, LPCTSTR classname, LPCTSTR name, int x, int y, int width, int height); HWND Create(); HWND getWindowHandle(); BOOL isWindow(); void Destroy(); static LRESULT Destroy(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); static LRESULT Quit(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); void Quit(); static LRESULT CALLBACK WndProc(HWND wnd, UINT message, WPARAM wParam, LPARAM lParam); static LRESULT defWindowProc(GWin * cwin, UINT message, WPARAM wParam, LPARAM lParam); UINT cursorInWindowPlace(); HWND setCapture(); BOOL clientToScreen(LPPOINT lpPoint); BOOL moveWindow(int X, int Y, int nWidth, int nHeight, BOOL bRepaint); //static int mapWindowPoints(GWin * wndFrom, GWin * wndTo, LPPOINT lpPoints, UINT cPoints); // not working, we don't really need it anyways GWin * getParent(); // inits, only when using GWin::Create(void), otherwise ignored GWin * InitParent; LPSTR InitText; LPSTR InitClass; int InitCtrlId; ATOM setClassName(LPCTSTR name); int getLastError(); BOOL showWindow(int nCmdShow); BOOL show(); BOOL hide(); BOOL setMenuRes(WORD res); void showLastError(); BOOL isDialogMessage(MSG * msg); BOOL getClientRect(RECT * rect); BOOL getWindowRect(RECT * rect); BOOL setWindowPos(GWin * zwin, int x, int y, int cx, int cy, UINT flags); BOOL setClientChildSize(GWin * win); static LRESULT ClientChildSize(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); static void GlobalMessageLoop(); HWND setFocus(); char * getWindowText(); // creates a new [] char, must be deleted! BOOL setWindowText(LPSTR text); BOOL setWindowTextInt(int num, BOOL sign); UINT getWindowTextInt(BOOL * success, BOOL sign); static LRESULT Close(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT Close(); BOOL Disable(); BOOL Enable(); int getWindowType(); int setMenuCommand(short unsigned int cmd, CMDPROC proc); int removeMenuCommand(short unsigned int cmd); // mdiclient HWND CreateMDIClient(GWin * parent, int x, int y, int width, int height); // static box HWND CreateStaticBox(GWin * parent, LPSTR title, int ctrlID, int x, int y, int width, int height); // tabcontrol functions - I don't really like handling tabs, so someone else can complete the list HWND CreateTabControl(GWin * parent, int ctrlID, int x, int y, int width, int height); int TabInsert(int iItem, LPSTR title); int getCurrentTab(); int setCurrentTab(int tabid); BOOL getTabInfo(int tabid, TC_ITEM * pitem); BOOL setTabInfo(int tabid, TC_ITEM * pitem); void getTabClientRect(RECT * rect); void tabctrlAdjustRect(BOOL fLarger, RECT FAR * prc); // edit functions HWND CreateEdit(GWin * parent, LPSTR text, int ctrlID, int x, int y, int width, int height); LRESULT charFromPos(short int x, short int y); //LRESULT exGetSel(CHARRANGE * lpchr); //LRESULT findText(UINT fuFlags, FINDTEXT * lpFindText); // ListBox functions HWND CreateListBox(GWin * parent, LPSTR text, int ctrlID, int x, int y, int width, int height); LRESULT LBAddString(LPSTR string); LRESULT LBSetTabStops(int tabs, int * tabstops); char * LBGetSelectedString(); // button functions HWND CreateButton(GWin * parent, LPSTR value, int ctrlID, int x, int y, int width, int height); LRESULT buttonSetCheck(WPARAM chkstate); // Events LRESULT (*onEvent)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onCommand)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onCreate)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onButtonClick)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onStaticClick)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onClicked)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onDblClicked)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onDestroy)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onTabSelChange)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onTabSelChanging)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onSize)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onOk)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); // just register a menu command //LRESULT (*onCancel)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onClose)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onEnable)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onDisable)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onMove)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onBlur)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); // currently only set up for edit controls EN_KILLFOCUS LRESULT (*onFocus)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); // currently only set up for edit controls EN_SETFOCUS and BN_SETFOCUS LRESULT (*onSelChange)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onPaint)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onChange)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onUpdate)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onHScroll)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onVScroll)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onMaxText)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onErrSpace)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onSelCancel)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onKeyDown)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onActivate)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onClickActivate)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); // not defined in our file //LRESULT (*onDeactivate)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onCancelMode)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onChar)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onCharToItem)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onCompacting)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onCompareItem)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onContextMenu)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onDeadChar)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onDisplayChange)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onDrawItem)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onDropFiles)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onEnterIdle)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onEnterMenuLoop)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onEnterSizeMove)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onEraseBkGnd)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onExitMenuLoop)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onExitSizeMove)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onFontChange)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onHelp)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onInitDialog)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); // I don't know if we need this or not LRESULT (*onInitMenu)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onInitMenuPopup)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onKeyUp)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onLButtonDblClick)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onLButtonDown)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onLButtonUp)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onMButtonDblClick)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onMButtonDown)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onMButtonUp)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onMeasureItem)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onMenuChar)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onMenuSelect)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onMouseActivate)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onMouseWheel)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onMouseMove)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onMoving)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNCActivate)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNCCalcSize)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNCCreate)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNCDestroy)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNCHitTest)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onNCLButtonDblClick)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNCLButtonDown)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNCLButtonUp)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onNCMButtonDblClick)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNCMButtonDown)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNCMButtonUp)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNCMouseMove)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNCPaint)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onNCRButtonDblClick)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNCRButtonDown)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNCRButtonUp)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNotify)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onNotifyFormat)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onPaintClipboard)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onPaletteChanged)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onPaletteIsChanging)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onParentNotify)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onPaste)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); /*LRESULT (*onPenEvent)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onPenMisc)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onPenMiscInfo)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam);*/ LRESULT (*onPrint)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onPrintClient)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onQuit)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); // should be static and not associated with a window LRESULT (*onSetCursor)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onShowWindow)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); //LRESULT (*onSizeClipboard)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onSizing)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onStyleChanged)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onStyleChanging)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onSysChar)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onSysCommand)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onSysDeadChar)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onSysKeyDown)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onSysKeyUp)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onUndo)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onWindowPosChanged)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); LRESULT (*onWindowPosChanging)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); // window params DWORD winStyleEx; LPCTSTR winName; DWORD winStyle; int winX; int winY; int winWidth; int winHeight; HWND winParent; //HMENU winMenu; LPVOID winParam; int visible; LONG UserLong; // for the user's own use, we do not initialize or handle in any way LPVOID UserVoid; // message info /*HWND ProcHwnd; UINT ProcMsg; WPARAM ProcWParam; LPARAM ProcLParam;*/ private: void Init(LPSTR type); GWin * gparent; GWin * child_size; // the window to be automatically sized on WM_SIZE HWND hwnd; int Type; HMENU hmenu; Menu *menu; MSG msg; int lastError; void DestroyWinData(); // for a statically-accessible linked list of all objects for our static WndProc typedef struct winlinks_st { GWin * win; winlinks_st * nextlink; } * winlinks_t; static winlinks_t WinLink; // first link void AddWinLink(); void RemoveWinLink(); static GWin * FindObject(HWND wnd); static GWin * FindObject(HWND wnd, HWND parentwnd); // for a linked list of menu commands typedef struct mclinks_st { short unsigned int cmd; LRESULT (*cmdfunc)(GWin * win, UINT message, WPARAM wParam, LPARAM lParam); mclinks_st * nextlink; } * mclinks_t; mclinks_t MCLink; mclinks_t FindMCLink(short unsigned int cmd); void RemoveAllMCLinks(); static GWin * objCreatingWindow; }; class GMain { public: GMain(); ~GMain(); void Init(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdline, int show); HINSTANCE hInstance; HINSTANCE hPrevInstance; LPSTR lpCmdLine; int nCmdShow; /*char * ExecutableDirectory; char * ExecutablePath; char * ExecutableName;*/ private: }; class Menu { public: Menu(LPSTR type); ~Menu(); private: HMENU hmenu; int Type; }; // this class will handle registry calls class GReg { public: GReg(); ~GReg(); LONG OpenKey(HKEY pkey, LPCTSTR subkeyname, REGSAM sam); LONG CloseKey(); LPBYTE QueryValue(LPTSTR name, LPDWORD type); private: HKEY hkey; };