diff options
| author | Jonas Kümmerlin <jonas@kuemmerlin.eu> | 2020-05-29 23:43:00 +0200 |
|---|---|---|
| committer | Jonas Kümmerlin <jonas@kuemmerlin.eu> | 2020-05-29 23:43:00 +0200 |
| commit | c9ebff8e7de093e7705aab6208593fae048ad98d (patch) | |
| tree | 06f641c182e4013e95c7fa1f255e4adbd32a67f2 /alf/alfcombobox.cpp | |
| parent | 46326d57e0c912f265595ffed375d211bbe23f44 (diff) | |
controls: subclass generic "ALFControl" window
The idea is that the compiler can strip unused controls when linking
statically, but the window class initialization functions blocked that.
Diffstat (limited to 'alf/alfcombobox.cpp')
| -rw-r--r-- | alf/alfcombobox.cpp | 44 |
1 files changed, 9 insertions, 35 deletions
diff --git a/alf/alfcombobox.cpp b/alf/alfcombobox.cpp index 3ce7326..2b24fa7 100644 --- a/alf/alfcombobox.cpp +++ b/alf/alfcombobox.cpp @@ -11,8 +11,6 @@ #define ALF_CB_GETSTYLE (ALF_WM__BASE + 207) #define ALF_CB_FINDSTRINGEXACT (ALF_WM__BASE + 208) -TCHAR *_alf_comboClass = NULL; - typedef struct { DWORD comboStyle; } ALFComboCreateParams; @@ -83,7 +81,7 @@ ALF__ComboWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) ALFComboPriv *priv = (ALFComboPriv *)GetWindowLongPtr(hwnd, 0); if (uMsg == WM_CREATE) { - ALFComboCreateParams *params = (ALFComboCreateParams*)((CREATESTRUCT*)lParam)->lpCreateParams; + ALFComboCreateParams *params = (ALFComboCreateParams*)((ALFControlCreateParams *)((CREATESTRUCT*)lParam)->lpCreateParams)->param; priv = ALF_Combo_InitializePriv(hwnd, params); SetWindowLongPtr(hwnd, 0, (LONG_PTR)priv); @@ -300,44 +298,20 @@ ALF__ComboWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } -void -ALF_RegisterComboClass(void) -{ - WNDCLASS cls; - ZeroMemory(&cls, sizeof(cls)); - - TCHAR classNameBuf[256]; - ALF_BuildUniqueName(classNameBuf, TEXT("ALFComboBox."), (ULONG_PTR)&_alf_comboClass); - - cls.hInstance = ALF_HINSTANCE; - cls.hCursor = LoadCursor(NULL, (LPTSTR)IDC_ARROW); - cls.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); - cls.lpszClassName = classNameBuf; - cls.cbWndExtra = sizeof(void*); - cls.lpfnWndProc = ALF__ComboWindowProc; - - ATOM classatom = RegisterClass(&cls); - if (!classatom) - MessageBox(NULL, TEXT("FATAL: Could not register Combo class"), NULL, MB_OK); - - _alf_comboClass = MAKEINTATOM(classatom); -} - static HWND ALF_InternalAddComboBox(HWND win, WORD id, int x, int y, DWORD style, const TCHAR *defaultText) { ALFComboCreateParams cp; cp.comboStyle = style; - HWND hwndCombo = CreateWindowEx(WS_EX_CONTROLPARENT, - _alf_comboClass, - TEXT(""), - WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, - 0, 0, 0, 0, - win, - (HMENU)(ULONG_PTR)id, - ALF_HINSTANCE, - &cp); + HWND hwndCombo = ALF_CreateControlWindow(WS_EX_CONTROLPARENT, + TEXT(""), + WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, + 0, 0, 0, 0, + win, + (HMENU)(ULONG_PTR)id, + ALF__ComboWindowProc, + &cp); if (defaultText) SetWindowText(hwndCombo, defaultText); |
