#include "alf/alf.h" enum { ID_COMBO1, ID_COMBO2, 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 }; static HBRUSH red; static HBRUSH green; static HBRUSH blue; static HBRUSH white; BOOL (WINAPI *fnGradientFill)(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG) = NULL; enum PanelBackgroundMode { BG_INHERIT, BG_GRADIENT, BG_SOLID_GREEN, BG_SOLID_BLUE }; #define FM_PANEL_SET_BGMODE (ALF_WM_USER + 1) static LRESULT handleCommand(void *closure, HWND window, WORD notificationcode, WORD sourceid, HWND control) { (void)closure; if (notificationcode == CBN_SELCHANGE && sourceid == ID_COMBO2) { TCHAR *text = ALF_ComboBoxCurrentText(control); ALF_SetWidgetText(window, ID_LBLCOMBOTEXT, text); ALF_Free(text); } if (control != NULL && sourceid == ID_BTNCOMBOCLEAR) { HWND combo = ALF_WidgetHwndById(window, ID_COMBO2); ALF_ComboBoxSetCurrentIndex(combo, -1); } if (sourceid == ID_HELLO) { MessageBox(window, TEXT("Hello World!"), TEXT("Hello"), MB_ICONASTERISK|MB_OK); } if (control != NULL && sourceid == ID_B_TABBGSOLID) { HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK); ALF_NotebookAddFlag(nb, ALF_NOTEBOOK_SOLID_TAB_BACKGROUND); } if (control != NULL && sourceid == ID_B_TABBGTEXTURE) { HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK); ALF_NotebookRemoveFlag(nb, ALF_NOTEBOOK_SOLID_TAB_BACKGROUND); } if (sourceid == IDM_FILE_CLOSE) { 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; } /* common stuff */ typedef struct { DWORD bgmode; } CommonPanelPriv; static void commonPanelPaint(void *closure, HWND hwndPanel, HDC dc, RECT *rcPaint) { CommonPanelPriv *priv = (CommonPanelPriv *)closure; if (priv->bgmode == BG_GRADIENT) { RECT rcClient; GetClientRect(hwndPanel, &rcClient); if (fnGradientFill) { TRIVERTEX vertex[6]; vertex[0].x = rcClient.left; vertex[0].y = rcClient.top; vertex[0].Red = 0xff00; vertex[0].Green = 0x8000; vertex[0].Blue = 0x0000; vertex[0].Alpha = 0x0000; vertex[1].x = rcClient.left; vertex[1].y = rcClient.bottom; vertex[1].Red = 0x9000; vertex[1].Green = 0x0000; vertex[1].Blue = 0x9000; vertex[1].Alpha = 0x0000; vertex[2].x = rcClient.right; vertex[2].y = rcClient.top; vertex[2].Red = 0x9000; vertex[2].Green = 0x0000; vertex[2].Blue = 0x9000; vertex[2].Alpha = 0x0000; vertex[3].x = rcClient.right; vertex[3].y = rcClient.bottom; vertex[3].Red = 0x0000; vertex[3].Green = 0xd000; vertex[3].Blue = 0xd000; vertex[3].Alpha = 0x0000; vertex[4].x = rcClient.left; vertex[4].y = rcClient.bottom; vertex[4].Red = 0x9000; vertex[4].Green = 0x0000; vertex[4].Blue = 0x9000; vertex[4].Alpha = 0x0000; vertex[5].x = rcClient.right; vertex[5].y = rcClient.top; vertex[5].Red = 0x9000; vertex[5].Green = 0x0000; vertex[5].Blue = 0x9000; vertex[5].Alpha = 0x0000; GRADIENT_TRIANGLE gTriangle[2]; gTriangle[0].Vertex1 = 0; gTriangle[0].Vertex2 = 1; gTriangle[0].Vertex3 = 2; gTriangle[1].Vertex1 = 3; gTriangle[1].Vertex2 = 4; gTriangle[1].Vertex3 = 5; fnGradientFill(dc, vertex, 6, gTriangle, 2, GRADIENT_FILL_TRIANGLE); } else { HBRUSH white = (HBRUSH)GetStockObject(WHITE_BRUSH); HBRUSH gray = (HBRUSH)GetStockObject(GRAY_BRUSH); int s = 10; for (int y = rcClient.top; y < rcClient.bottom; y += 2*s) { for (int x = rcClient.left; x < rcClient.right; x += 2*s) { RECT a = { x, y, x + s, y + s }; RECT b = { x + s, y, x + s + s, y + s }; RECT c = { x, y + s, x + s, y + s + s }; RECT d = { x + s, y + s, x + s + s, y + s + s }; FillRect(dc, &a, white); FillRect(dc, &b, gray); FillRect(dc, &c, gray); FillRect(dc, &d, white); } } } } else { ALF_Panel_DefPaint(hwndPanel, dc, rcPaint); } } static LRESULT commonPanelMessage(void *closure, HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { 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; } if (msg == WM_SIZE && priv->bgmode == BG_GRADIENT) { ALF_InvalidateBackground(hwnd); } return ALF_Panel_DefWindowProc(hwnd, msg, wparam, lparam); } static void commonPanelDestroy(void *closure, HWND window) { (void)window; ALF_Free(closure); } /* button panel */ static void buttonPanelAttach(void *closure, HWND outerPanel) { (void)closure; HWND b; HWND panel; ALF_PanelSetEdge(outerPanel, BDR_SUNKENOUTER); panel = ALF_AddPanel(outerPanel, (WORD)-1, 0, 0); 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")); b = ALF_AddButton(panel, ID_HELLO, 2, 2, TEXT("&Hello, World!")); ALF_SetWidgetLayoutMinSize(panel, b, 0, 0); b = ALF_AddButton(panel, (WORD)-1, 2, 4, TEXT("Hello, World!")); EnableWindow(b, FALSE); ALF_SetWidgetLayoutMinSize(panel, b, 0, 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_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); b = ALF_AddButton(panel, (WORD)-1, 4, 6, TEXT("Hello, World!")); ALF_SetWidgetLayoutMinSize(panel, b, 0, 0); b = ALF_AddButton(panel, (WORD)-1, 2, 8, TEXT("Multiline\r\nButton")); ALF_SetWidgetLayoutMinSize(panel, b, 0, 0); HWND hwndNb3 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("Multiline\r\nButton"), WS_CHILD | WS_TABSTOP | WS_VISIBLE | BS_PUSHBUTTON | BS_MULTILINE, 0, 0, 100, 100, panel, (HMENU)(WORD)-1, (HINSTANCE)GetModuleHandle(NULL), NULL); ALF_AddWidget(panel, 4, 8, hwndNb3, 0, 0, ALF_LAYOUT_INHERITFONT | ALF_LAYOUT_TRANSPARENTBG); ALF_LayoutSetRowMinSize(panel, 1, 825); ALF_LayoutSetRowMinSize(panel, 3, 825); ALF_LayoutSetRowMinSize(panel, 5, 825); ALF_LayoutSetRowMinSize(panel, 7, 825); ALF_LayoutSetRowMinSize(panel, 9, 825); ALF_LayoutSetColumnMinSize(panel, 1, 825); ALF_LayoutSetColumnMinSize(panel, 3, 825); ALF_LayoutSetColumnExpandNumerator(panel, 9, 1); ALF_PanelSetEdge(panel, BDR_RAISEDINNER); panel = ALF_AddPanel(outerPanel, (WORD)-1, 0, 1); ALF_AddButton(panel, (WORD)-1, 2, 2, TEXT("Standard")); HWND hwndNb4 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("Standard"), WS_CHILD | WS_TABSTOP | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 100, 100, panel, (HMENU)(WORD)-1, (HINSTANCE)GetModuleHandle(NULL), NULL); ALF_AddWidget(panel, 4, 2, hwndNb4, 5625, 1725, ALF_LAYOUT_INHERITFONT | ALF_LAYOUT_TRANSPARENTBG); ALF_AddButton(panel, (WORD)-1, 2, 4, TEXT("Expanding")); HWND hwndNb5 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("Expanding"), WS_CHILD | WS_TABSTOP | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 100, 100, panel, (HMENU)(WORD)-1, (HINSTANCE)GetModuleHandle(NULL), NULL); ALF_AddWidget(panel, 4, 4, hwndNb5, 0, 0, ALF_LAYOUT_INHERITFONT | ALF_LAYOUT_TRANSPARENTBG); ALF_AddButton(panel, (WORD)-1, 2, 6, TEXT("Expanding\r\nMultiline")); HWND hwndNb6 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("Expanding\r\nMultiline"), WS_CHILD | WS_TABSTOP | WS_VISIBLE | BS_PUSHBUTTON | BS_MULTILINE, 0, 0, 100, 100, panel, (HMENU)(WORD)-1, (HINSTANCE)GetModuleHandle(NULL), NULL); ALF_AddWidget(panel, 4, 6, hwndNb6, 0, 0, ALF_LAYOUT_INHERITFONT | ALF_LAYOUT_TRANSPARENTBG); 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, 4, 1); ALF_LayoutSetRowExpandNumerator(panel, 6, 1); ALF_PanelSetEdge(panel, BDR_RAISEDINNER); ALF_LayoutSetRowExpandNumerator(outerPanel, 1, 1); // 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")); ALF_LayoutSetRowExpandNumerator(panel, 1, 1); HWND hwndBc4 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("4"), WS_CHILD | WS_TABSTOP | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 100, 100, panel, (HMENU)(int)ID_BC4, (HINSTANCE)GetWindowLongPtr(panel, GWLP_HINSTANCE), NULL); HWND hwndBc5 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("5"), WS_CHILD | WS_TABSTOP | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 100, 100, panel, (HMENU)(int)ID_BC5, (HINSTANCE)GetWindowLongPtr(panel, GWLP_HINSTANCE), 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);*/ } 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_PanelSetVTable(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_PanelSetVTable(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); } static ALFPanelVTable comboPanelVtbl = { comboPanelAttach, commonPanelDestroy, commonPanelMessage, NULL, NULL, commonPanelPaint, NULL }; static void comboPanelAddToNotebook(HWND hwndNotebook) { HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Combo Box")); CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1); ALF_PanelSetVTable(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")); HWND hwndTabPanel3 = ALF_NotebookAddTab(hwndTab, TEXT("Another tab")); ALF_NotebookAddTab(hwndTab, TEXT("Yet another empty tab")); ALF_SetBackgroundColor(hwndTabPanel3, ALF_COLOR_RGB(0, 255, 0)); ALF_AddButton(hwndTabPanel0, ID_B_TABBGSOLID, 0, 0, TEXT("Solid tab background")); ALF_AddButton(hwndTabPanel0, ID_B_TABBGTEXTURE, 0, 1, TEXT("Textured tab background")); ALF_LayoutSetRowExpandNumerator(hwndTabPanel0, 2, 1); ALF_LayoutSetColumnExpandNumerator(hwndTabPanel0, 1, 1); ALF_AddLabel(hwndTabPanel1, (WORD)-1, 0, 0, TEXT("Hello World!")); ALF_AddLabel(hwndTabPanel2, (WORD)-1, 0, 0, TEXT("Goodbye, &World!")); ALF_AddEdit(hwndTabPanel2, (WORD)-1, 1, 0, TEXT("lol")); 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")); } static ALFPanelVTable notebookPanelVtbl = { notebookPanelAttach, commonPanelDestroy, commonPanelMessage, NULL, NULL, commonPanelPaint, NULL }; static void notebookPanelAddToNotebook(HWND hwndNotebook) { HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Notebook")); CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1); ALF_PanelSetVTable(panel, ¬ebookPanelVtbl, priv); } /* 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_PanelSetVTable(panel, &checkboxPanelVtbl, priv); } /* groupbox panel */ static void groupboxPanelAttach(void *closure, HWND panel) { (void)closure; ALF_AddLabel(panel, (WORD)-1, 1, 1, TEXT("ALF")); ALF_AddLabel(panel, (WORD)-1, 3, 1, TEXT("native")); HWND hwndGb0 = ALF_AddGroupBox(panel, (WORD)-1, 1, 3, TEXT("Test Bo&x")); HWND hwndGb1 = CreateWindowEx(WS_EX_TRANSPARENT, TEXT("BUTTON"), TEXT("Test Box"), WS_CHILD | WS_TABSTOP | WS_VISIBLE | BS_GROUPBOX, 0, 0, 100, 100, panel, (HMENU)(WORD)-1, (HINSTANCE)GetModuleHandle(NULL), NULL); ALF_AddWidget(panel, 3, 3, hwndGb1, 0, 0, ALF_LAYOUT_INHERITFONT | ALF_LAYOUT_TRANSPARENTBG); ALF_AddEdit(hwndGb0, (WORD)-1, 0, 0, TEXT("Dummy")); HWND hwndGb3 = ALF_AddGroupBox(panel, (WORD)-1, 1, 5, TEXT("Disabled")); EnableWindow(hwndGb3, FALSE); HWND hwndGb2 = CreateWindowEx(WS_EX_TRANSPARENT, TEXT("BUTTON"), TEXT("Disabled"), WS_CHILD | WS_TABSTOP | WS_VISIBLE | BS_GROUPBOX, 0, 0, 100, 100, panel, (HMENU)(WORD)-1, (HINSTANCE)GetModuleHandle(NULL), NULL); ALF_AddWidget(panel, 3, 5, hwndGb2, 0, 0, ALF_LAYOUT_INHERITFONT | ALF_LAYOUT_TRANSPARENTBG); EnableWindow(hwndGb2, FALSE); ALF_LayoutSetRowMinSize(panel, 0, 825); ALF_LayoutSetRowMinSize(panel, 2, 825); ALF_LayoutSetRowMinSize(panel, 4, 825); ALF_LayoutSetRowMinSize(panel, 6, 825); ALF_LayoutSetColumnMinSize(panel, 0, 825); ALF_LayoutSetColumnMinSize(panel, 2, 825); ALF_LayoutSetColumnMinSize(panel, 4, 825); ALF_LayoutSetRowExpandNumerator(panel, 3, 1); ALF_LayoutSetRowExpandNumerator(panel, 5, 1); ALF_LayoutSetColumnExpandNumerator(panel, 1, 1); ALF_LayoutSetColumnExpandNumerator(panel, 3, 1); } static ALFPanelVTable groupboxPanelVtbl = { groupboxPanelAttach, commonPanelDestroy, commonPanelMessage, NULL, NULL, commonPanelPaint, NULL }; static void groupboxPanelAddToNotebook(HWND hwndNotebook) { HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("GroupBox")); CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1); ALF_PanelSetVTable(panel, &groupboxPanelVtbl, 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"); } } ALFWindowClassParams cparams; ZeroMemory(&cparams, sizeof(cparams)); //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); groupboxPanelAddToNotebook(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_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); ALF_ShowModal(win); ALF_DestroyWindow(win); ALF_UnregisterWindowClass(hInstance, clazz); ALF_UnInitialize(); return 0; } void WINAPI _entry(void) { ExitProcess((UINT) #ifdef UNICODE wWinMain #else WinMain #endif (GetModuleHandle(NULL), NULL, GetCommandLine(), SW_SHOW)); }