From 9279dd93c3997a51b227d3380b4da659fcbdff96 Mon Sep 17 00:00:00 2001 From: Jonas Kümmerlin Date: Wed, 9 Jan 2019 20:52:10 +0100 Subject: add spacer widget --- Makefile.mingw | 5 ++++- Makefile.vc6 | 5 ++++- Makefile.vc6-ansi | 5 ++++- Makefile.vc6-ansi-31 | 5 ++++- Makefile.vc6-nt31 | 5 ++++- alf/alf.cpp | 2 ++ alf/alf.h | 4 ++++ alf/alfpriv.h | 4 ++++ alf/alfspacer.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++ widgetfactory.cpp | 1 + 10 files changed, 89 insertions(+), 5 deletions(-) create mode 100644 alf/alfspacer.cpp diff --git a/Makefile.mingw b/Makefile.mingw index 60ef928..ce71482 100644 --- a/Makefile.mingw +++ b/Makefile.mingw @@ -4,7 +4,7 @@ CXX = i686-w64-mingw32-c++ CFLAGS = -std=c++98 -Wall -Wextra -mwindows -municode -DUNICODE -D_UNICODE -fno-exceptions -fno-rtti -gstabs LDFLAGS = -luser32 -lcomctl32 -lshell32 -lversion -static -out/widgetfactory.exe: out/widgetfactory.o out/alfbutton.o out/alfcombobox.o out/alfcompat.o out/alf.o out/alfdpiaware.o out/alfedit.o out/alflabel.o out/alflayout.o out/alfpanel.o +out/widgetfactory.exe: out/widgetfactory.o out/alfbutton.o out/alfcombobox.o out/alfcompat.o out/alf.o out/alfdpiaware.o out/alfedit.o out/alflabel.o out/alflayout.o out/alfpanel.o out/alfspacer.o $(CXX) $(CFLAGS) -o $@ $^ $(LDFLAGS) out/alfbutton.o: alf/alfbutton.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h @@ -34,6 +34,9 @@ out/alflayout.o: alf/alflayout.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h al out/alfpanel.o: alf/alfpanel.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h $(CXX) $(CFLAGS) -c -o $@ $< +out/alfspacer.o: alf/alfspacer.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h + $(CXX) $(CFLAGS) -c -o $@ $< + out/widgetfactory.o: widgetfactory.cpp alf/alf.h $(CXX) $(CFLAGS) -c -o $@ $< diff --git a/Makefile.vc6 b/Makefile.vc6 index 1b63325..d0a1917 100644 --- a/Makefile.vc6 +++ b/Makefile.vc6 @@ -4,7 +4,7 @@ CXX = cl.exe CFLAGS = -O2 -GA -W3 -DUNICODE -D_UNICODE -D_WIN32=0x0501 -D_WIN32_WINNT=0x0501 -D_WIN32_IE=0x0501 -nologo LDFLAGS = /link unicows.lib kernel32.lib user32.lib comctl32.lib shell32.lib gdi32.lib version.lib -out/widgetfactory.exe: out/widgetfactory.obj out/alfbutton.obj out/alfcombobox.obj out/alfcompat.obj out/alf.obj out/alfdpiaware.obj out/alfedit.obj out/alflabel.obj out/alflayout.obj out/alfpanel.obj +out/widgetfactory.exe: out/widgetfactory.obj out/alfbutton.obj out/alfcombobox.obj out/alfcompat.obj out/alf.obj out/alfdpiaware.obj out/alfedit.obj out/alflabel.obj out/alflayout.obj out/alfpanel.obj out/alfspacer.obj $(CXX) $(CFLAGS) -Fe$@ $** $(LDFLAGS) out/alfbutton.obj: alf/alfbutton.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h @@ -34,6 +34,9 @@ out/alflayout.obj: alf/alflayout.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h out/alfpanel.obj: alf/alfpanel.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h $(CXX) $(CFLAGS) -c -Fo$@ alf/alfpanel.cpp +out/alfspacer.obj: alf/alfspacer.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h + $(CXX) $(CFLAGS) -c -Fo$@ alf/alfspacer.cpp + out/widgetfactory.obj: widgetfactory.cpp alf/alf.h $(CXX) $(CFLAGS) -c -Fo$@ widgetfactory.cpp diff --git a/Makefile.vc6-ansi b/Makefile.vc6-ansi index 9d71e82..cdfe885 100644 --- a/Makefile.vc6-ansi +++ b/Makefile.vc6-ansi @@ -4,7 +4,7 @@ CXX = cl.exe CFLAGS = -O2 -GA -W3 -D_WIN32=0x0501 -D_WIN32_WINNT=0x0501 -D_WIN32_IE=0x0501 -nologo LDFLAGS = /link /entry:_entry kernel32.lib user32.lib comctl32.lib shell32.lib gdi32.lib version.lib -out/widgetfactory.exe: out/widgetfactory.obj out/alfbutton.obj out/alfcombobox.obj out/alfcompat.obj out/alf.obj out/alfdpiaware.obj out/alfedit.obj out/alflabel.obj out/alflayout.obj out/alfpanel.obj +out/widgetfactory.exe: out/widgetfactory.obj out/alfbutton.obj out/alfcombobox.obj out/alfcompat.obj out/alf.obj out/alfdpiaware.obj out/alfedit.obj out/alflabel.obj out/alflayout.obj out/alfpanel.obj out/alfspacer.obj $(CXX) $(CFLAGS) -Fe$@ $** $(LDFLAGS) out/alfbutton.obj: alf/alfbutton.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h @@ -34,6 +34,9 @@ out/alflayout.obj: alf/alflayout.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h out/alfpanel.obj: alf/alfpanel.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h $(CXX) $(CFLAGS) -c -Fo$@ alf/alfpanel.cpp +out/alfspacer.obj: alf/alfspacer.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h + $(CXX) $(CFLAGS) -c -Fo$@ alf/alfspacer.cpp + out/widgetfactory.obj: widgetfactory.cpp alf/alf.h $(CXX) $(CFLAGS) -c -Fo$@ widgetfactory.cpp diff --git a/Makefile.vc6-ansi-31 b/Makefile.vc6-ansi-31 index dfc9269..0bc3c46 100644 --- a/Makefile.vc6-ansi-31 +++ b/Makefile.vc6-ansi-31 @@ -4,7 +4,7 @@ CXX = cl.exe CFLAGS = -O2 -GA -W3 -D_WIN32=0x0501 -D_WIN32_WINNT=0x0501 -D_WIN32_IE=0x0501 -nologo LDFLAGS = /link /subsystem:windows,3.10 /entry:_entry /fixed:no kernel32.lib user32.lib comctl32.lib shell32.lib gdi32.lib version.lib -out/widgetfactory.exe: out/widgetfactory.obj out/alfbutton.obj out/alfcombobox.obj out/alfcompat.obj out/alf.obj out/alfdpiaware.obj out/alfedit.obj out/alflabel.obj out/alflayout.obj out/alfpanel.obj +out/widgetfactory.exe: out/widgetfactory.obj out/alfbutton.obj out/alfcombobox.obj out/alfcompat.obj out/alf.obj out/alfdpiaware.obj out/alfedit.obj out/alflabel.obj out/alflayout.obj out/alfpanel.obj out/alfspacer.obj $(CXX) $(CFLAGS) -Fe$@ $** $(LDFLAGS) out/alfbutton.obj: alf/alfbutton.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h @@ -34,6 +34,9 @@ out/alflayout.obj: alf/alflayout.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h out/alfpanel.obj: alf/alfpanel.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h $(CXX) $(CFLAGS) -c -Fo$@ alf/alfpanel.cpp +out/alfspacer.obj: alf/alfspacer.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h + $(CXX) $(CFLAGS) -c -Fo$@ alf/alfspacer.cpp + out/widgetfactory.obj: widgetfactory.cpp alf/alf.h $(CXX) $(CFLAGS) -c -Fo$@ widgetfactory.cpp diff --git a/Makefile.vc6-nt31 b/Makefile.vc6-nt31 index 63a0f80..3e92b92 100644 --- a/Makefile.vc6-nt31 +++ b/Makefile.vc6-nt31 @@ -4,7 +4,7 @@ CXX = cl.exe CFLAGS = -O2 -GA -W3 -DUNICODE -D_UNICODE -D_WIN32=0x0501 -D_WIN32_WINNT=0x0501 -D_WIN32_IE=0x0501 -nologo LDFLAGS = /link /subsystem:windows,3.10 /entry:_entry kernel32.lib user32.lib comctl32.lib shell32.lib gdi32.lib version.lib -out/widgetfactory.exe: out/widgetfactory.obj out/alfbutton.obj out/alfcombobox.obj out/alfcompat.obj out/alf.obj out/alfdpiaware.obj out/alfedit.obj out/alflabel.obj out/alflayout.obj out/alfpanel.obj +out/widgetfactory.exe: out/widgetfactory.obj out/alfbutton.obj out/alfcombobox.obj out/alfcompat.obj out/alf.obj out/alfdpiaware.obj out/alfedit.obj out/alflabel.obj out/alflayout.obj out/alfpanel.obj out/alfspacer.obj $(CXX) $(CFLAGS) -Fe$@ $** $(LDFLAGS) out/alfbutton.obj: alf/alfbutton.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h @@ -34,6 +34,9 @@ out/alflayout.obj: alf/alflayout.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h out/alfpanel.obj: alf/alfpanel.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h $(CXX) $(CFLAGS) -c -Fo$@ alf/alfpanel.cpp +out/alfspacer.obj: alf/alfspacer.cpp alf/alfcompat.h alf/alf.h alf/alflayout.h alf/alflist.h alf/alfpriv.h + $(CXX) $(CFLAGS) -c -Fo$@ alf/alfspacer.cpp + out/widgetfactory.obj: widgetfactory.cpp alf/alf.h $(CXX) $(CFLAGS) -c -Fo$@ widgetfactory.cpp diff --git a/alf/alf.cpp b/alf/alf.cpp index 64b4cc4..6f8d28a 100644 --- a/alf/alf.cpp +++ b/alf/alf.cpp @@ -343,6 +343,7 @@ ALF_CreateApplication(HINSTANCE hInstance) ALF_RegisterComboClass(app); ALF_RegisterPanelClass(app); + ALF_RegisterSpacerClass(app); return app; } @@ -352,6 +353,7 @@ ALF_TeardownApplication(ALFAPP app) { UnregisterClass(app->comboClass, app->hInstance); UnregisterClass(app->panelClass, app->hInstance); + UnregisterClass(app->spacerClass, app->hInstance); HeapFree(GetProcessHeap(), 0, app); } diff --git a/alf/alf.h b/alf/alf.h index 79883be..0c32a20 100644 --- a/alf/alf.h +++ b/alf/alf.h @@ -250,6 +250,10 @@ ALF_ComboBoxSetText(HWND combo, const TCHAR *text); HWND ALF_AddPanel(HWND parent, WORD id, UINT x, UINT y); +// spacer +HWND +ALF_AddSpacer(HWND parent, WORD id, UINT x, UINT y, UINT cptWidth, UINT cptHeight, DWORD layoutFlags); + #ifdef __cplusplus } // extern C #endif diff --git a/alf/alfpriv.h b/alf/alfpriv.h index ec7a447..775d421 100644 --- a/alf/alfpriv.h +++ b/alf/alfpriv.h @@ -32,6 +32,7 @@ struct ALFAppPriv { HINSTANCE hInstance; TCHAR *comboClass; TCHAR *panelClass; + TCHAR *spacerClass; }; int @@ -49,6 +50,9 @@ ALF_RegisterComboClass(ALFAPP app); void ALF_RegisterPanelClass(ALFAPP app); +void +ALF_RegisterSpacerClass(ALFAPP app); + void ALF_BuildRandomClassName(const TCHAR *prefix, TCHAR *buf, DWORD cchBuf); diff --git a/alf/alfspacer.cpp b/alf/alfspacer.cpp new file mode 100644 index 0000000..545dfbc --- /dev/null +++ b/alf/alfspacer.cpp @@ -0,0 +1,58 @@ +#include "alfpriv.h" + +void +ALF_RegisterSpacerClass(ALFAPP app) +{ + WNDCLASS cls; + ZeroMemory(&cls, sizeof(cls)); + + TCHAR classNameBuf[256]; + ALF_BuildRandomClassName(TEXT("ALFSpacer"), classNameBuf, 256); + + cls.hInstance = app->hInstance; + cls.hCursor = LoadCursor(NULL, (LPTSTR)IDC_ARROW); + if (LOBYTE(LOWORD(GetVersion())) >= 4) { + cls.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); + } else { + // NT 3.x has white dialog backgrounds + cls.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + } + cls.lpszClassName = classNameBuf; + cls.cbWndExtra = sizeof(void*); + cls.lpfnWndProc = DefWindowProc; + + ATOM classatom = RegisterClass(&cls); + if (!classatom) + MessageBox(NULL, TEXT("FATAL: Could not register spacer class"), NULL, MB_OK); + + app->spacerClass = MAKEINTATOM(classatom); +} + +HWND +ALF_AddSpacer(HWND parent, WORD id, UINT x, UINT y, UINT cptWidth, UINT cptHeight, DWORD layoutFlags) +{ + ALFAPP app = ALF_ApplicationFromWindow(parent); + + HWND hwndSpacer = CreateWindowEx(0, + app->spacerClass, + TEXT(""), + WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, + 0, 0, 0, 0, + parent, + (HMENU)(int)id, + (HINSTANCE)GetWindowLongPtr(parent, GWLP_HINSTANCE), + (void*)app); + + ALFWidgetLayoutParams p; + ZeroMemory(&p, sizeof(p)); + p.hwnd = hwndSpacer; + p.x = x; + p.y = y; + p.width = cptWidth; + p.height = cptHeight; + p.flags = layoutFlags; + + ALF_AddWidgetEx(parent, &p); + + return hwndSpacer; +} diff --git a/widgetfactory.cpp b/widgetfactory.cpp index aa490d6..d973aac 100644 --- a/widgetfactory.cpp +++ b/widgetfactory.cpp @@ -162,6 +162,7 @@ WinMain ALF_AddButton(panel, ID_BC1, 0, 0, TEXT("1")); ALF_AddButton(panel, ID_BC2, 1, 0, TEXT("2")); ALF_AddButton(panel, ID_BC3, 2, 0, TEXT("3")); + ALF_AddSpacer(panel, (WORD)-1, 0, 1, 5000, 0, ALF_VEXPAND); ALF_ApplyFonts(win); ALF_RecalculateLayout(win); -- cgit v1.2.3