diff options
| -rw-r--r-- | alf/alf.h | 26 | ||||
| -rw-r--r-- | alf/alflabel.cpp | 12 | ||||
| -rw-r--r-- | alf/alfpanel.cpp | 45 | ||||
| -rw-r--r-- | alf/alfpriv.h | 3 | ||||
| -rw-r--r-- | widgetfactory.cpp | 538 |
5 files changed, 430 insertions, 194 deletions
@@ -21,12 +21,20 @@ typedef struct { } ALFWindowVTable; typedef struct { - void (*create)(void * /*closure*/, HWND /*panel*/); + void (*attachvtbl)(void * /*closure*/, HWND /*panel*/); void (*destroy)(void * /*closure*/, HWND /*panel*/); LRESULT (*message)(void * /*closure*/, HWND, UINT, WPARAM, LPARAM); + LRESULT (*command)(void * /*closure*/, HWND /*window*/, WORD /*notificationcode*/, WORD /*sourceid*/, HWND /*control*/); + LRESULT (*notify)(void * /*closure*/, HWND /*window*/, WPARAM /*sourceid*/, NMHDR *); void (*paint)(void * /*closure*/, HWND, HDC, RECT * /*rcPaint*/); + void (*windowposchanged)(void * /*closure*/, HWND, WINDOWPOS *); } ALFPanelVTable; +typedef struct { + const ALFPanelVTable *vtbl; + void *closure; +} ALFPanelSetVtblParams; + // layout flags #define ALF_LAYOUT_SIZE_FIXED 0x00 #define ALF_LAYOUT_SIZE_QUERY 0x01 @@ -111,6 +119,8 @@ typedef struct { #define ALF_WM_NTBK_GETFLAGS (ALF_WM__BASE + 201) #define ALF_WM_NTBK_SETFLAGS (ALF_WM__BASE + 202) +#define ALF_WM_USER (ALF_WM__BASE + 300) + typedef DWORD ALFColor; #define ALF_COLOR_TRANSPARENT ((ALFColor)-1) @@ -180,6 +190,12 @@ ALF_DefWindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); HWND ALF_AddLabel(HWND win, WORD id, int x, int y, const TCHAR *text); +DWORD +ALF_LabelStyle(HWND hwndLabel); + +void +ALF_LabelSetStyle(HWND hwndLabel, DWORD style); + HWND ALF_AddEdit(HWND win, WORD id, int x, int y, const TCHAR *text); @@ -328,6 +344,11 @@ ALF_LayoutColumnExpandNumerator(HWND parent, int colno); BOOL ALF_LayoutSetColumnExpandNumerator(HWND parent, int colno, int expand); + +void +ALF_FillRect(HDC dc, const RECT *rc, ALFColor color); + + // combo box HWND @@ -370,6 +391,9 @@ ALF_Panel_SetVTable(HWND panel, const ALFPanelVTable *vtbl, void *closure); LRESULT ALF_Panel_DefWindowProc(HWND panel, UINT msg, WPARAM wparam, LPARAM lparam); +void +ALF_Panel_DefPaint(HWND panel, HDC hDC, RECT *rcPaint); + // tab control HWND ALF_AddNotebook(HWND parent, WORD id, int x, int y); diff --git a/alf/alflabel.cpp b/alf/alflabel.cpp index 13c86ae..87d5baa 100644 --- a/alf/alflabel.cpp +++ b/alf/alflabel.cpp @@ -338,3 +338,15 @@ ALF_RegisterLabelClass(void) _alf_labelClass = MAKEINTATOM(classatom); } + +DWORD +ALF_LabelStyle(HWND hwndLabel) +{ + return (DWORD)SendMessage(hwndLabel, ALF_WM_LBL_GETSTYLE, 0, 0); +} + +void +ALF_LabelSetStyle(HWND hwndLabel, DWORD style) +{ + SendMessage(hwndLabel, ALF_WM_LBL_SETSTYLE, 0, (LPARAM)style); +} diff --git a/alf/alfpanel.cpp b/alf/alfpanel.cpp index 965264e..2f2ee68 100644 --- a/alf/alfpanel.cpp +++ b/alf/alfpanel.cpp @@ -21,21 +21,38 @@ ALF_Panel_ClearPriv(ALFPanelPriv *priv) } static void +ALF_Panel_InternalDefPaint(ALFPanelPriv *priv, HWND hwnd, HDC dc, RECT *r) +{ + if (priv->layout.bgcolor == ALF_COLOR_TRANSPARENT) { + ALF_Compat_DrawThemeParentBackground(hwnd, dc, r); + } else { + ALF_FillRect(dc, r, priv->layout.bgcolor); + } +} + + +void +ALF_Panel_DefPaint(HWND panel, HDC hDC, RECT *rcPaint) +{ + ALFPanelPriv *priv = (ALFPanelPriv*)GetWindowLongPtr(panel, 0); + ALF_Panel_InternalDefPaint(priv, panel, hDC, rcPaint); +} + +static void ALF_Panel_Paint(ALFPanelPriv *priv, HWND hwnd, HDC dc, RECT *r) { if (priv->vtbl && priv->vtbl->paint) { priv->vtbl->paint(priv->closure, hwnd, dc, r); - } else if (priv->layout.bgcolor == ALF_COLOR_TRANSPARENT) { - ALF_Compat_DrawThemeParentBackground(hwnd, dc, r); } else { - ALF_FillRect(dc, r, priv->layout.bgcolor); + ALF_Panel_InternalDefPaint(priv, hwnd, dc, r); } } void ALF_Panel_SetVTable(HWND panel, const ALFPanelVTable *vtbl, void *closure) { - SendMessage(panel, ALF_WM_PANEL_SETVTABLE, (WPARAM)vtbl, (LPARAM)closure); + ALFPanelSetVtblParams p = { vtbl, closure }; + SendMessage(panel, ALF_WM_PANEL_SETVTABLE, 0, (LPARAM)&p); } LRESULT @@ -43,11 +60,6 @@ ALF_Panel_DefWindowProc(HWND window, UINT msg, WPARAM wparam, LPARAM lparam) { ALFPanelPriv *priv = (ALFPanelPriv *)GetWindowLongPtr(window, 0); - if (msg == WM_CREATE) { - if (priv->vtbl && priv->vtbl->create) - priv->vtbl->create(priv->closure, window); - } - if (msg == WM_DESTROY) { if (priv->vtbl && priv->vtbl->destroy) priv->vtbl->destroy(priv->closure, window); @@ -57,10 +69,6 @@ ALF_Panel_DefWindowProc(HWND window, UINT msg, WPARAM wparam, LPARAM lparam) return TRUE; } - if (msg == WM_SETTEXT) { - InvalidateRect(window, NULL, TRUE); - } - if (msg == WM_PRINTCLIENT) { RECT r = { 0, 0, 0, 0 }; GetClientRect(window, &r); @@ -82,8 +90,15 @@ ALF_Panel_DefWindowProc(HWND window, UINT msg, WPARAM wparam, LPARAM lparam) } if (msg == ALF_WM_PANEL_SETVTABLE) { - priv->vtbl = (const ALFPanelVTable *)wparam; - priv->closure = (void *)lparam; + const ALFPanelSetVtblParams *params = (const ALFPanelSetVtblParams *)lparam; + if (!params) + return FALSE; + + priv->vtbl = params->vtbl; + priv->closure = params->closure; + if (priv->vtbl->attachvtbl) { + priv->vtbl->attachvtbl(priv->closure, window); + } return TRUE; } diff --git a/alf/alfpriv.h b/alf/alfpriv.h index c2ab557..2c79fcd 100644 --- a/alf/alfpriv.h +++ b/alf/alfpriv.h @@ -49,6 +49,3 @@ ALF_BuildUniqueNameW(WCHAR *buf, const WCHAR *prefix, ULONG_PTR uniquifier); BOOL ALF_ShouldMessageBubble(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); - -void -ALF_FillRect(HDC dc, const RECT *rc, ALFColor color); diff --git a/widgetfactory.cpp b/widgetfactory.cpp index de7efe2..2273806 100644 --- a/widgetfactory.cpp +++ b/widgetfactory.cpp @@ -1,31 +1,23 @@ #include "alf/alf.h" enum { - ID_LBLHELLO, - ID_LBL2, - ID_LBL3, - ID_ED1, - ID_B1, - ID_B2, - ID_B3, - ID_B4, ID_COMBO1, - ID_LBL4, ID_COMBO2, - ID_LBL5, - ID_LBL6, - ID_BC1, - ID_BC2, - ID_BC3, - ID_BC4, - ID_BC5, + ID_LBLCOMBOTEXT, + ID_BTNCOMBOCLEAR, ID_NOTEBOOK, + ID_HELLO, ID_B_TABBGSOLID, ID_B_TABBGTEXTURE, IDM_FILE, IDM_FILE_CLOSE, IDM_HELP, IDM_HELP_ABOUT, + IDM_BACKGROUND, + IDM_BACKGROUND_INHERIT, + IDM_BACKGROUND_GRADIENT, + IDM_BACKGROUND_GREEN, + IDM_BACKGROUND_BLUE, ID__MAX }; @@ -36,35 +28,15 @@ static HBRUSH white; BOOL (WINAPI *fnGradientFill)(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG) = NULL; -LRESULT -handleMessage(void *closure, HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - (void)closure; +enum PanelBackgroundMode { + BG_INHERIT, + BG_GRADIENT, + BG_SOLID_GREEN, + BG_SOLID_BLUE +}; - if (msg == WM_CTLCOLORSTATIC) { - WORD id = (WORD)GetDlgCtrlID((HWND)lparam); - HDC hdcStatic = (HDC)wparam; - if (id == ID_LBLHELLO) { - SetTextColor(hdcStatic, RGB(0,0,0)); - SetBkColor(hdcStatic, RGB(255,0,0)); - return (LRESULT)red; - } else if (id == ID_LBL2) { - SetTextColor(hdcStatic, RGB(0,0,0)); - SetBkColor(hdcStatic, RGB(0,255,0)); - return (LRESULT)green; - } /*else if (id == ID_LBL3) { - SetTextColor(hdcStatic, RGB(255,255,255)); - SetBkColor(hdcStatic, RGB(0,0,255)); - return (LRESULT)blue; - } else { - SetTextColor(hdcStatic, RGB(0,0,0)); - SetBkColor(hdcStatic, RGB(255,255,255)); - return (LRESULT)white; - }*/ - } +#define FM_PANEL_SET_BGMODE (ALF_WM_USER + 1) - return ALF_DefWindowProc(hwnd, msg, wparam, lparam); -} static LRESULT handleCommand(void *closure, HWND window, WORD notificationcode, WORD sourceid, HWND control) @@ -74,25 +46,17 @@ handleCommand(void *closure, HWND window, WORD notificationcode, WORD sourceid, if (notificationcode == CBN_SELCHANGE && sourceid == ID_COMBO2) { TCHAR *text = ALF_ComboBoxCurrentText(control); - ALF_SetWidgetText(window, ID_LBL6, text); + ALF_SetWidgetText(window, ID_LBLCOMBOTEXT, text); ALF_Free(text); } - if (control != NULL && sourceid == ID_B4) { + if (control != NULL && sourceid == ID_BTNCOMBOCLEAR) { HWND combo = ALF_WidgetHwndById(window, ID_COMBO2); ALF_ComboBoxSetCurrentIndex(combo, -1); } - if (sourceid == ID_B2) { + if (sourceid == ID_HELLO) { MessageBox(window, TEXT("Hello World!"), TEXT("Hello"), MB_ICONASTERISK|MB_OK); } - if (control != NULL && sourceid == ID_B3) { - ALFColor oldcolor = ALF_BackgroundColor(window); - if (oldcolor == ALF_COLOR_TRANSPARENT) { - ALF_SetBackgroundColor(window, ALF_COLOR_SYS(COLOR_BTNFACE)); - } else { - ALF_SetBackgroundColor(window, ALF_COLOR_TRANSPARENT); - } - } if (control != NULL && sourceid == ID_B_TABBGSOLID) { HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK); ALF_NotebookAddFlag(nb, ALF_NOTEBOOK_SOLID_TAB_BACKGROUND); @@ -106,19 +70,45 @@ handleCommand(void *closure, HWND window, WORD notificationcode, WORD sourceid, SendMessage(window, WM_CLOSE, 0, 0); } + if (sourceid == IDM_BACKGROUND_BLUE) { + HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK); + HWND panel = ALF_NotebookSelectedPanel(nb); + SendMessage(panel, FM_PANEL_SET_BGMODE, 0, (LPARAM)BG_SOLID_BLUE); + } + + if (sourceid == IDM_BACKGROUND_GREEN) { + HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK); + HWND panel = ALF_NotebookSelectedPanel(nb); + SendMessage(panel, FM_PANEL_SET_BGMODE, 0, (LPARAM)BG_SOLID_GREEN); + } + + if (sourceid == IDM_BACKGROUND_INHERIT) { + HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK); + HWND panel = ALF_NotebookSelectedPanel(nb); + SendMessage(panel, FM_PANEL_SET_BGMODE, 0, (LPARAM)BG_INHERIT); + } + + if (sourceid == IDM_BACKGROUND_GRADIENT) { + HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK); + HWND panel = ALF_NotebookSelectedPanel(nb); + SendMessage(panel, FM_PANEL_SET_BGMODE, 0, (LPARAM)BG_GRADIENT); + } + return 0; } -static void -handlePaint(void *closure, HWND window, HDC dc, RECT *rcPaint) -{ - (void)closure; +/* common stuff */ +typedef struct { + DWORD bgmode; +} CommonPanelPriv; - ALFColor color = ALF_BackgroundColor(window); +static void commonPanelPaint(void *closure, HWND hwndPanel, HDC dc, RECT *rcPaint) +{ + CommonPanelPriv *priv = (CommonPanelPriv *)closure; - if (color == ALF_COLOR_TRANSPARENT) { + if (priv->bgmode == BG_GRADIENT) { RECT rcClient; - GetClientRect(window, &rcClient); + GetClientRect(hwndPanel, &rcClient); if (fnGradientFill) { TRIVERTEX vertex[6]; @@ -192,125 +182,106 @@ handlePaint(void *closure, HWND window, HDC dc, RECT *rcPaint) } } } else { - if (rcPaint) { - SetBkColor(dc, ALF_ColorToGdi(color)); - ExtTextOut(dc, 0, 0, ETO_OPAQUE, rcPaint, TEXT(""), 0, NULL); - } else { - RECT rcClient; - GetClientRect(window, &rcClient); - - SetBkColor(dc, ALF_ColorToGdi(color)); - ExtTextOut(dc, 0, 0, ETO_OPAQUE, &rcClient, TEXT(""), 0, NULL); - } - } -} - -static void handleWindowPosChanged(void *closure, HWND window, WINDOWPOS *pos) -{ - (void)closure; - - if (!(pos->flags & SWP_NOSIZE)) { - ALFColor bgcolor = ALF_BackgroundColor(window); - - if (bgcolor == ALF_COLOR_TRANSPARENT) - ALF_InvalidateBackground(window); + ALF_Panel_DefPaint(hwndPanel, dc, rcPaint); } } -int CALLBACK -#ifdef UNICODE -wWinMain -#else -WinMain -#endif -(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) +static LRESULT +commonPanelMessage(void *closure, HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { - (void)hPrevInstance; - (void)lpCmdLine; - (void)nCmdShow; - - ALF_SetDpiAwareness(ALF_DPI_AWARENESS_PER_MONITOR_AWARE_V2); - - red = CreateSolidBrush(RGB(255,0,0)); - green = CreateSolidBrush(RGB(0,255,0)); - blue = CreateSolidBrush(RGB(0,0,255)); - white = CreateSolidBrush(RGB(255,255,255)); - - if (LOBYTE(LOWORD(GetVersion())) >= 4) { - HMODULE hMsimg32 = LoadLibraryA("msimg32.dll"); - if (hMsimg32) { - *((void**)&fnGradientFill) = (void*)GetProcAddress(hMsimg32, "GradientFill"); + CommonPanelPriv *priv = (CommonPanelPriv *)closure; + + if (msg == FM_PANEL_SET_BGMODE) { + priv->bgmode = (DWORD)lparam; + + switch (priv->bgmode) { + case BG_INHERIT: + ALF_AddWidgetLayoutFlag(GetParent(hwnd), hwnd, ALF_LAYOUT_INHERITBGCOLOR); + ALF_InvalidateBackground(hwnd); + break; + case BG_GRADIENT: + ALF_SetBackgroundColor(hwnd, ALF_COLOR_TRANSPARENT); + ALF_InvalidateBackground(hwnd); + break; + case BG_SOLID_BLUE: + ALF_SetBackgroundColor(hwnd, ALF_COLOR_RGB(0, 0, 255)); + break; + case BG_SOLID_GREEN: + ALF_SetBackgroundColor(hwnd, ALF_COLOR_RGB(0, 255, 0)); + break; } + return TRUE; } - ALFWindowClassParams cparams; - ZeroMemory(&cparams, sizeof(cparams)); - - //cparams.className = TEXT("DummyClass"); - cparams.vtbl.message = handleMessage; - cparams.vtbl.command = handleCommand; - cparams.vtbl.paint = handlePaint; - cparams.vtbl.windowposchanged = handleWindowPosChanged; - - ALF_Initialize(); - - LPCTSTR clazz = ALF_RegisterWindowClass(hInstance, &cparams); - if (!clazz) - MessageBox(0, TEXT("couldn't create window class!"), 0, MB_ICONHAND|MB_OK); - - HWND win = ALF_InstantiateWindow(hInstance, clazz, NULL, NULL); - if (!win) - MessageBox(0, TEXT("couldn't create main window!"), 0, MB_ICONHAND|MB_OK); - - ALF_AddLabel(win, ID_LBL2, 1, 0, TEXT("Hello, 2!\nblub")); - - HWND hwndLabel = CreateWindow( - TEXT("STATIC"), - TEXT("Hello World!"), - WS_CHILD | WS_VISIBLE | SS_LEFT, - 0, 0, 50, 25, - win, - (HMENU)ID_LBLHELLO, - hInstance, - NULL); - ALF_AddWidget(win, 0, 0, hwndLabel, 5000, 1000, ALF_LAYOUT_INHERITFONT); + if (msg == WM_SIZE && priv->bgmode == BG_GRADIENT) { + ALF_InvalidateBackground(hwnd); + } - ALF_AddLabel(win, ID_LBL3, 0, 1, TEXT("Good Morning my &Angel!")); + return ALF_Panel_DefWindowProc(hwnd, msg, wparam, lparam); +} - ALF_AddEdit(win, ID_ED1, 1, 1, TEXT("Happy Birthday!")); +static void +commonPanelDestroy(void *closure, HWND window) +{ + (void)window; + ALF_Free(closure); +} - ALF_AddButton(win, ID_B1, 3, 1, TEXT("&Go Go Go!")); - ALF_AddButton(win, ID_B2, 0, 2, TEXT("Oh m&y god,\r\nwho the hell cares?")); +/* button panel */ - ALF_AddLabel(win, ID_LBL4, 0, 3, TEXT("&Editable Combo Box:")); - HWND hwndCombo1 = ALF_AddEditableComboBox(win, ID_COMBO1, 1, 3, TEXT("Hello!")); - ALF_AddButton(win, ID_B3, 3, 3, TEXT("Change Background")); +static void +buttonPanelAttach(void *closure, HWND panel) +{ + (void)closure; - ALF_ComboBoxInsertString(hwndCombo1, 0, TEXT("Hello World!")); - ALF_ComboBoxInsertString(hwndCombo1, -1, TEXT("Goodbye World!")); - ALF_ComboBoxInsertString(hwndCombo1, 1, TEXT("The quick brown fox jumps over the lazy dog")); + ALF_AddLabel(panel, (WORD)-1, 0, 2, TEXT("normal")); + ALF_AddLabel(panel, (WORD)-1, 0, 4, TEXT("disabled")); + ALF_AddLabel(panel, (WORD)-1, 2, 0, TEXT("ALF")); + ALF_AddLabel(panel, (WORD)-1, 4, 0, TEXT("native")); + ALF_AddLabel(panel, (WORD)-1, 0, 6, TEXT("layout dummy")); - ALF_AddLabel(win, ID_LBL5, 0, 4, TEXT("Selection-Only Combo Box:")); - HWND hwndCombo2 = ALF_AddSelectionOnlyComboBox(win, ID_COMBO2, 1, 4); - ALF_AddButton(win, ID_B4, 3, 4, TEXT("Lol")); + ALF_AddButton(panel, ID_HELLO, 2, 2, TEXT("&Hello, World!")); + HWND bDisabled = ALF_AddButton(panel, (WORD)-1, 2, 4, TEXT("Hello, World!")); + EnableWindow(bDisabled, FALSE); - /*HWND b4 = ALF_WidgetAtLayoutPosition(win, 2, 4); - ALF_SetWidgetLayoutSize(win, b4, 6427, 0);*/ + HWND hwndNb1 = CreateWindowEx(0, + TEXT("BUTTON"), + TEXT("H&ello, World!"), + WS_CHILD | WS_TABSTOP | WS_VISIBLE | BS_PUSHBUTTON, + 0, 0, 100, 100, + panel, + (HMENU)(WORD)-1, + (HINSTANCE)GetModuleHandle(NULL), + NULL); + HWND hwndNb2 = CreateWindowEx(0, + TEXT("BUTTON"), + TEXT("Hello, World!"), + WS_CHILD | WS_TABSTOP | WS_VISIBLE | BS_PUSHBUTTON, + 0, 0, 100, 100, + panel, + (HMENU)(WORD)-1, + (HINSTANCE)GetModuleHandle(NULL), + NULL); + EnableWindow(hwndNb2, FALSE); - ALF_ComboBoxAddString(hwndCombo2, TEXT("Hello World!")); - ALF_ComboBoxAddString(hwndCombo2, TEXT("Goodbye World!")); - ALF_ComboBoxAddString(hwndCombo2, TEXT("The quick brown fox jumps over the lazy dog")); + ALF_AddWidget(panel, 4, 2, hwndNb1, 0, 0, ALF_LAYOUT_INHERITFONT | ALF_LAYOUT_TRANSPARENTBG); + ALF_AddWidget(panel, 4, 4, hwndNb2, 0, 0, ALF_LAYOUT_INHERITFONT | ALF_LAYOUT_TRANSPARENTBG); - HWND hwndLbl6 = ALF_AddLabel(win, ID_LBL6, 0, 5, TEXT("[ComboBox2 value]")); - ALF_SetBackgroundColor(hwndLbl6, ALF_COLOR_RGB(0, 0, 255)); - ALF_SetTextColor(hwndLbl6, ALF_COLOR_RGB(255, 255, 255)); + ALF_AddButton(panel, (WORD)-1, 4, 6, TEXT("Hello, World!")); - ALF_AddCheckbox(win, (WORD)-1, 1, 5, TEXT("Some Checkbox with a very very really very very long text")); + ALF_AddButton(panel, (WORD)-1, 4, 8, TEXT("Multiline\r\nButton")); - //ALF_AddWidgetLayoutFlag(win, ALF_WidgetHwndById(win, ID_LBL6), ALF_VEXPAND); - //ALF_AddWidgetLayoutFlag(win, ALF_WidgetHwndById(win, ID_B1), ALF_HEXPAND); + ALF_LayoutSetRowMinSize(panel, 1, 825); + ALF_LayoutSetRowMinSize(panel, 3, 825); + ALF_LayoutSetRowMinSize(panel, 5, 825); + ALF_LayoutSetRowMinSize(panel, 7, 825); + ALF_LayoutSetColumnMinSize(panel, 1, 825); + ALF_LayoutSetColumnMinSize(panel, 3, 825); + ALF_LayoutSetColumnExpandNumerator(panel, 9, 1); + ALF_LayoutSetRowExpandNumerator(panel, 9, 1); - HWND panel = ALF_AddPanel(win, (WORD)-1, 1, 2); + // TODO: recreate old button box + /*HWND panel = ALF_AddPanel(win, (WORD)-1, 1, 2); 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")); @@ -337,11 +308,129 @@ WinMain NULL); EnableWindow(hwndBc5, FALSE); ALF_AddWidget(panel, 3, 0, hwndBc4, 1000, 0, ALF_LAYOUT_INHERITFONT); - ALF_AddWidget(panel, 4, 0, hwndBc5, 1000, 0, ALF_LAYOUT_INHERITFONT); + ALF_AddWidget(panel, 4, 0, hwndBc5, 1000, 0, ALF_LAYOUT_INHERITFONT);*/ +} + +static ALFPanelVTable buttonPanelVtbl = { + buttonPanelAttach, + commonPanelDestroy, + commonPanelMessage, + NULL, + NULL, + commonPanelPaint, + NULL +}; + +static void +buttonPanelAddToNotebook(HWND hwndNotebook) +{ + HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Buttons")); + CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1); + ALF_Panel_SetVTable(panel, &buttonPanelVtbl, priv); +} + +/* label panel */ + +static void +labelPanelAttach(void *closure, HWND panel) +{ + (void)closure; + + ALF_AddLabel(panel, (WORD)-1, 0, 2, TEXT("N&ormal")); + HWND l = ALF_AddLabel(panel, (WORD)-1, 0, 4, TEXT("Disabled")); + EnableWindow(l, FALSE); + + ALF_AddEdit(panel, (WORD)-1, 3, 2, TEXT("Baseline Comparison")); + l = ALF_AddLabel(panel, (WORD)-1, 3, 4, TEXT("Left Comparison")); + ALF_LabelSetStyle(l, ALF_LABEL_ALIGN_LEFT_LIKE_EDIT | ALF_LABEL_ALIGN_TOP); + + l = ALF_AddLabel(panel, (WORD)-1, 0, 6, TEXT("Colored")); + ALF_SetBackgroundColor(l, ALF_COLOR_RGB(0, 0, 255)); + ALF_SetTextColor(l, ALF_COLOR_RGB(255, 255, 255)); + + // TODO: demo right, center, bottom alignment +} + +static ALFPanelVTable labelPanelVtbl = { + labelPanelAttach, + commonPanelDestroy, + commonPanelMessage, + NULL, + NULL, + commonPanelPaint, + NULL +}; + +static void +labelPanelAddToNotebook(HWND hwndNotebook) +{ + HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Label")); + CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1); + ALF_Panel_SetVTable(panel, &labelPanelVtbl, priv); +} + +/* combo box panel */ + +static void +comboPanelAttach(void *closure, HWND panel) +{ + (void)closure; + + ALF_AddLabel(panel, (WORD)-1, 0, 2, TEXT("&Editable Combo Box:")); + HWND hwndCombo1 = ALF_AddEditableComboBox(panel, ID_COMBO1, 2, 2, TEXT("Hello!")); + + ALF_ComboBoxInsertString(hwndCombo1, 0, TEXT("Hello World!")); + ALF_ComboBoxInsertString(hwndCombo1, -1, TEXT("Goodbye World!")); + ALF_ComboBoxInsertString(hwndCombo1, 1, TEXT("The quick brown fox jumps over the lazy dog")); + + ALF_AddLabel(panel, (WORD)-1, 0, 4, TEXT("Selection-Only Combo Box:")); + HWND hwndCombo2 = ALF_AddSelectionOnlyComboBox(panel, ID_COMBO2, 2, 4); + ALF_AddButton(panel, ID_BTNCOMBOCLEAR, 4, 4, TEXT("Clear")); + + ALF_ComboBoxAddString(hwndCombo2, TEXT("Hello World!")); + ALF_ComboBoxAddString(hwndCombo2, TEXT("Goodbye World!")); + ALF_ComboBoxAddString(hwndCombo2, TEXT("The quick brown fox jumps over the lazy dog")); + + ALF_AddLabel(panel, ID_LBLCOMBOTEXT, 2, 6, TEXT("[ComboBox2 value]")); + + ALF_ComboBoxSetText(hwndCombo2, TEXT("Goodbye World!")); + + ALF_LayoutSetRowMinSize(panel, 1, 825); + ALF_LayoutSetRowMinSize(panel, 3, 825); + ALF_LayoutSetRowMinSize(panel, 5, 825); + ALF_LayoutSetRowMinSize(panel, 7, 825); + ALF_LayoutSetColumnMinSize(panel, 1, 825); + ALF_LayoutSetColumnMinSize(panel, 3, 825); + ALF_LayoutSetColumnExpandNumerator(panel, 2, 1); + ALF_LayoutSetRowExpandNumerator(panel, 9, 1); +} - EnableWindow(ALF_WidgetHwndById(win, ID_BC2), FALSE); +static ALFPanelVTable comboPanelVtbl = { + comboPanelAttach, + commonPanelDestroy, + commonPanelMessage, + NULL, + NULL, + commonPanelPaint, + NULL +}; - HWND hwndTab = ALF_AddNotebook(win, ID_NOTEBOOK, 1, 7); +static void +comboPanelAddToNotebook(HWND hwndNotebook) +{ + HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Combo Box")); + CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1); + ALF_Panel_SetVTable(panel, &comboPanelVtbl, priv); +} + +/* notebook panel */ + +static void +notebookPanelAttach(void *closure, HWND panel) +{ + (void)closure; + + HWND hwndTab = ALF_AddNotebook(panel, (WORD)-1, 0, 0); HWND hwndTabPanel0 = ALF_NotebookAddTab(hwndTab, TEXT("Notebook Debug")); HWND hwndTabPanel1 = ALF_NotebookAddTab(hwndTab, TEXT("Tab 1")); HWND hwndTabPanel2 = ALF_NotebookAddTab(hwndTab, TEXT("Tab 2")); @@ -359,41 +448,140 @@ WinMain ALF_AddLabel(hwndTabPanel2, (WORD)-1, 0, 0, TEXT("Goodbye, &World!")); ALF_AddEdit(hwndTabPanel2, (WORD)-1, 1, 0, TEXT("lol")); - ALF_LayoutSetRowExpandNumerator(win, 7, 1); - ALF_AddLabel(hwndTabPanel1, (WORD)-1, 0, 1, TEXT("Blabla")); ALF_LayoutSetRowExpandNumerator(hwndTabPanel1, 1, 1); ALF_AddLabel(hwndTabPanel1, (WORD)-1, 0, 2, TEXT("No 3")); ALF_AddEdit(hwndTabPanel1, (WORD)-1, 0, 3, TEXT("Dummy")); ALF_SetText(hwndTabPanel2, TEXT("Panel Text Demo Test Test Test")); +} - HWND l = ALF_AddLabel(win, (WORD)-1, 3, 7, TEXT("Hello There")); - SendMessage(l, ALF_WM_LBL_SETSTYLE, 0, ALF_LABEL_ALIGN_HCENTER | ALF_LABEL_ALIGN_VCENTER); +static ALFPanelVTable notebookPanelVtbl = { + notebookPanelAttach, + commonPanelDestroy, + commonPanelMessage, + NULL, + NULL, + commonPanelPaint, + NULL +}; - ALF_SetDefaultButton(win, ID_B2); +static void +notebookPanelAddToNotebook(HWND hwndNotebook) +{ + HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Notebook")); + CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1); + ALF_Panel_SetVTable(panel, ¬ebookPanelVtbl, priv); +} - ALF_ComboBoxSetText(hwndCombo2, TEXT("Goodbye World!")); +/* checkbox panel */ + +static void +checkboxPanelAttach(void *closure, HWND panel) +{ + (void)closure; + + ALF_AddCheckbox(panel, (WORD)-1, 1, 2, TEXT("Some Checkbox with a very very really very very long text")); + + HWND l = ALF_AddLabel(panel, (WORD)-1, 1, 4, TEXT("Width checker")); + ALF_SetBackgroundColor(l, ALF_COLOR_RGB(0, 0, 255)); + ALF_SetTextColor(l, ALF_COLOR_RGB(255, 255, 255)); + + ALF_LayoutSetRowMinSize(panel, 1, 825); + ALF_LayoutSetRowMinSize(panel, 3, 825); + ALF_LayoutSetColumnExpandNumerator(panel, 9, 1); + ALF_LayoutSetRowExpandNumerator(panel, 9, 1); +} + +static ALFPanelVTable checkboxPanelVtbl = { + checkboxPanelAttach, + commonPanelDestroy, + commonPanelMessage, + NULL, + NULL, + commonPanelPaint, + NULL +}; + +static void +checkboxPanelAddToNotebook(HWND hwndNotebook) +{ + HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Checkbox")); + CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1); + ALF_Panel_SetVTable(panel, &checkboxPanelVtbl, priv); +} + +int CALLBACK +#ifdef UNICODE +wWinMain +#else +WinMain +#endif +(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) +{ + (void)hPrevInstance; + (void)lpCmdLine; + (void)nCmdShow; + + ALF_SetDpiAwareness(ALF_DPI_AWARENESS_PER_MONITOR_AWARE_V2); + + red = CreateSolidBrush(RGB(255,0,0)); + green = CreateSolidBrush(RGB(0,255,0)); + blue = CreateSolidBrush(RGB(0,0,255)); + white = CreateSolidBrush(RGB(255,255,255)); + + if (LOBYTE(LOWORD(GetVersion())) >= 4) { + HMODULE hMsimg32 = LoadLibraryA("msimg32.dll"); + if (hMsimg32) { + *((void**)&fnGradientFill) = (void*)GetProcAddress(hMsimg32, "GradientFill"); + } + } - ALF_LayoutSetColumnMinSize(win, 2, 825); - ALF_LayoutSetColumnExpandNumerator(win, 1, 4); - ALF_LayoutSetColumnExpandNumerator(win, 3, 1); + ALFWindowClassParams cparams; + ZeroMemory(&cparams, sizeof(cparams)); - EnableWindow(ALF_WidgetHwndById(win, ID_LBL3), FALSE); + //cparams.className = TEXT("DummyClass"); + cparams.vtbl.command = handleCommand; + + ALF_Initialize(); + + LPCTSTR clazz = ALF_RegisterWindowClass(hInstance, &cparams); + if (!clazz) + MessageBox(0, TEXT("couldn't create window class!"), 0, MB_ICONHAND|MB_OK); + + HWND win = ALF_InstantiateWindow(hInstance, clazz, NULL, NULL); + if (!win) + MessageBox(0, TEXT("couldn't create main window!"), 0, MB_ICONHAND|MB_OK); + + HWND hwndNtbk = ALF_AddNotebook(win, ID_NOTEBOOK, 0, 0); + buttonPanelAddToNotebook(hwndNtbk); + labelPanelAddToNotebook(hwndNtbk); + comboPanelAddToNotebook(hwndNtbk); + notebookPanelAddToNotebook(hwndNtbk); + checkboxPanelAddToNotebook(hwndNtbk); + + ALF_SetDefaultButton(win, ID_HELLO); ALF_ResizeWindow(win, 1, 1); HMENU mainmenu = CreateMenu(); HMENU filemenu = CreateMenu(); HMENU helpmenu = CreateMenu(); + HMENU bgmenu = CreateMenu(); - AppendMenu(filemenu, MF_STRING, ID_B2, TEXT("Hello")); + AppendMenu(filemenu, MF_STRING, ID_HELLO, TEXT("Hello")); AppendMenu(filemenu, MF_SEPARATOR, 0, 0); AppendMenu(filemenu, MF_STRING, IDM_FILE_CLOSE, TEXT("&Close\tAlt+F4")); AppendMenu(helpmenu, MF_STRING, IDM_HELP_ABOUT, TEXT("&About")); + AppendMenu(bgmenu, MF_STRING, IDM_BACKGROUND_INHERIT, TEXT("(Default)")); + AppendMenu(bgmenu, MF_STRING, IDM_BACKGROUND_GRADIENT, TEXT("Gradient")); + AppendMenu(bgmenu, MF_STRING, IDM_BACKGROUND_BLUE, TEXT("Blue")); + AppendMenu(bgmenu, MF_STRING, IDM_BACKGROUND_GREEN, TEXT("Green")); + AppendMenu(mainmenu, MF_POPUP, (UINT_PTR)filemenu, TEXT("&File")); + AppendMenu(mainmenu, MF_POPUP, (UINT_PTR)bgmenu, TEXT("Background")); AppendMenu(mainmenu, MF_POPUP, (UINT_PTR)helpmenu, TEXT("&Help")); SetMenu(win, mainmenu); |
