#pragma once #include "alf.h" #include "alflist.h" typedef struct { ALFListHeader list; HWND hwnd; int x; int y; int width; int height; DWORD flags; } ALFWidgetPriv; typedef struct { HWND hwnd; int x; int y; int width; int height; DWORD flags; } ALFAddWidgetParams; typedef struct { // properties set by user int requestedMinWidth; int requestedExpandNumerator; DWORD requestedFlags; // calculated properties int calculatedMinWidth; int calculatedExpandNumerator; // allocated size for layout application int allocatedWidth; int allocatedPosition; } ALFLayoutRowOrColumn; #define ALF_LAYOUT_NEED_RECALC ((DWORD)1) #define ALF_LAYOUT_NEED_REAPPLY ((DWORD)2) typedef struct { ALFListHeader widgets; ALFLayoutRowOrColumn *columns; ALFLayoutRowOrColumn *rows; int nColumns; int nRows; int totalMinWidth; int totalMinHeight; int columnExpandDenominator; int rowExpandDenominator; int biggestColumnNo; int biggestRowNo; DWORD layoutValididityFlags; int dpi; } ALFLayout; void ALF_Layout_Init(ALFLayout *layout); void ALF_Layout_Clear(ALFLayout *layout); void ALF_Layout_GetMinSize(ALFLayout *layout, HWND window, SIZE *size); void ALF_Layout_Apply(ALFLayout *layout, HWND window); void ALF_Layout_AddWidget(ALFLayout *layout, HWND window, const ALFAddWidgetParams *params); BOOL ALF_Layout_RemoveWidget(ALFLayout *layout, HWND window, HWND widget, BOOL destroy); BOOL ALF_Layout_HandleMessage(ALFLayout *layout, HWND window, UINT msg, WPARAM wparam, LPARAM lparam, LRESULT *ret); HWND ALF_Layout_WidgetAtPos(ALFLayout *layout, int x, int y); void ALF_Layout_Invalidate(ALFLayout *layout, HWND window); BOOL ALF_Layout_Validate(ALFLayout *layout, HWND window);