From 8ead043a524ffedc634663779a49730cc5da8d97 Mon Sep 17 00:00:00 2001 From: Jonas Kümmerlin Date: Fri, 28 Dec 2018 22:55:27 +0100 Subject: create class name automatically --- Makefile.mingw | 2 +- Makefile.vc6 | 2 +- alf/alf.cpp | 26 ++++++++++++++++++++++++-- alf/alf.h | 2 +- makemakefile.sh | 4 ++-- widgetfactory.cpp | 6 +++--- 6 files changed, 32 insertions(+), 10 deletions(-) diff --git a/Makefile.mingw b/Makefile.mingw index 5a0d289..796496a 100644 --- a/Makefile.mingw +++ b/Makefile.mingw @@ -2,7 +2,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 +LDFLAGS = -luser32 -lcomctl32 -lshell32 -lrpcrt4 -lversion -static out/widgetfactory.exe: out/widgetfactory.o out/alfbutton.o out/alfcompat.o out/alf.o out/alfdpiaware.o out/alfedit.o out/alflabel.o $(CXX) $(CFLAGS) -o $@ $^ $(LDFLAGS) diff --git a/Makefile.vc6 b/Makefile.vc6 index c007c6a..a01e605 100644 --- a/Makefile.vc6 +++ b/Makefile.vc6 @@ -2,7 +2,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 kernel32.lib user32.lib comctl32.lib shell32.lib gdi32.lib version.lib +LDFLAGS = /link kernel32.lib user32.lib comctl32.lib shell32.lib gdi32.lib version.lib rpcrt4.lib out/widgetfactory.exe: out/widgetfactory.obj out/alfbutton.obj out/alfcompat.obj out/alf.obj out/alfdpiaware.obj out/alfedit.obj out/alflabel.obj $(CXX) $(CFLAGS) -Fe$@ $** $(LDFLAGS) diff --git a/alf/alf.cpp b/alf/alf.cpp index 78eed99..fbc7822 100644 --- a/alf/alf.cpp +++ b/alf/alf.cpp @@ -1,5 +1,7 @@ #include "alfpriv.h" +#include + /* ALF App and Window */ static void @@ -527,13 +529,33 @@ ALF_RegisterWindowClass(ALFAPP app, const ALFWindowClassParams *params) WNDCLASS cls; ZeroMemory(&cls, sizeof(cls)); - // TODO: autogenerate class name + const TCHAR *classNamePtr = params->className; + TCHAR classNameBuf[256]; + if (!classNamePtr) { + ZeroMemory(classNameBuf, sizeof(classNameBuf)); + classNamePtr = classNameBuf; + + UUID uuid; + UuidCreate(&uuid); + +#ifdef UNICODE + unsigned short *uuidstr = NULL; +#else + unsigned char *uuidstr = NULL; +#endif + UuidToString(&uuid, &uuidstr); + + lstrcpy(classNameBuf, TEXT("ALFWindow.")); + lstrcat(classNameBuf, (LPCTSTR)uuidstr); + + RpcStringFree(&uuidstr); + } cls.style = params->classStyle; cls.hInstance = app->hInstance; cls.hCursor = LoadCursor(NULL, (LPTSTR)IDC_ARROW); cls.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); - cls.lpszClassName = params->className; + cls.lpszClassName = classNamePtr; cls.cbWndExtra = sizeof(void*); cls.cbClsExtra = sizeof(void*)*2; cls.lpfnWndProc = DefWindowProc; diff --git a/alf/alf.h b/alf/alf.h index 6730445..5f7ce61 100644 --- a/alf/alf.h +++ b/alf/alf.h @@ -47,7 +47,7 @@ typedef struct { #define ALF_WM_APPLYSIZE (ALF_WM__BASE + 12) typedef struct { - const WCHAR *className; + const TCHAR *className; UINT classStyle; ALFWindowVTable vtbl; } ALFWindowClassParams; diff --git a/makemakefile.sh b/makemakefile.sh index 9f182d5..cfeb0b1 100755 --- a/makemakefile.sh +++ b/makemakefile.sh @@ -13,7 +13,7 @@ ALF_VC6_OBJECTS=$(for i in $ALF_SOURCES; do printf ' out/%s.obj' "$(basename "$i printf '\n' printf 'CXX = i686-w64-mingw32-c++\n' printf 'CFLAGS = -std=c++98 -Wall -Wextra -mwindows -municode -DUNICODE -D_UNICODE -fno-exceptions -fno-rtti -gstabs\n' - printf 'LDFLAGS = -luser32 -lcomctl32 -lshell32 -lversion -static\n' + printf 'LDFLAGS = -luser32 -lcomctl32 -lshell32 -lrpcrt4 -lversion -static\n' printf '\n' printf 'out/widgetfactory.exe: out/widgetfactory.o %s\n' "$ALF_MINGW_OBJECTS" printf '\t$(CXX) $(CFLAGS) -o $@ $^ $(LDFLAGS)\n' @@ -37,7 +37,7 @@ ALF_VC6_OBJECTS=$(for i in $ALF_SOURCES; do printf ' out/%s.obj' "$(basename "$i printf '\n' printf 'CXX = cl.exe\n' printf 'CFLAGS = -O2 -GA -W3 -DUNICODE -D_UNICODE -D_WIN32=0x0501 -D_WIN32_WINNT=0x0501 -D_WIN32_IE=0x0501 -nologo\n' - printf 'LDFLAGS = /link kernel32.lib user32.lib comctl32.lib shell32.lib gdi32.lib version.lib\n' + printf 'LDFLAGS = /link kernel32.lib user32.lib comctl32.lib shell32.lib gdi32.lib version.lib rpcrt4.lib\n' printf '\n' printf 'out/widgetfactory.exe: out/widgetfactory.obj %s\n' "$ALF_VC6_OBJECTS" diff --git a/widgetfactory.cpp b/widgetfactory.cpp index a6c4a81..631326c 100644 --- a/widgetfactory.cpp +++ b/widgetfactory.cpp @@ -62,14 +62,14 @@ wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCm ALFWindowClassParams cparams; ZeroMemory(&cparams, sizeof(cparams)); - cparams.className = TEXT("DummyClass"); + //cparams.className = TEXT("DummyClass"); cparams.vtbl.message = handleMessage; ALFAPP app = ALF_CreateApplication(hInstance); - ALF_RegisterWindowClass(app, &cparams); + LPCTSTR clazz = ALF_RegisterWindowClass(app, &cparams); - HWND win = ALF_InstantiateWindow(app, TEXT("DummyClass"), NULL, NULL); + HWND win = ALF_InstantiateWindow(app, clazz, NULL, NULL); ALF_AddLabel(win, ID_LBL2, 1, 0, L"Hello, 2!\nblub"); -- cgit v1.2.3