Application and Window
create a Windows app; open a native window.
mwfl::WindowBase mwfl::RunApplication<mwfl/window.h> <mwfl/application.h>Browse all 46 public capability slices. Each card connects intent to exact C++20 symbols, headers, runnable code, usage guidance, contracts, and automated evidence.
Showing all 46 capabilities.
create a Windows app; open a native window.
mwfl::WindowBase mwfl::RunApplication<mwfl/window.h> <mwfl/application.h>build a form; validate input; bind controls.
mwfl::ControlHost mwfl::ValueBinding mwfl::ValidationResult<mwfl/control_host.h> <mwfl/binding.h>Rules: controls, model values, and bindings need compatible lifetimes.
responsive layout; row; column; overlay.
mwfl::Row mwfl::Column mwfl::Overlay mwfl::Stretch<mwfl/layout.h>Rules: layout uses DIPs and references already-created HWNDs.
menu; toolbar; keyboard shortcut; shared action.
mwfl::Command mwfl::CommandSet mwfl::Toolbar mwfl::Menu<mwfl/command.h> <mwfl/command_controls.h> <mwfl/desktop.h>Rules: Command is the source for text enabled checked visible image and shortcut state; a toolbar borrows its ImageList; rebuild a menu to show a command after removing it.
Tests: mwfl.command</code>, <code>mwfl.modern_api</code>, <code>mwfl.desktop
background worker; update UI from thread; notify window.
mwfl::WindowWakeup<mwfl/wakeup.h>Rules: workers never access UI wrappers; TryWake false is normal during shutdown.
open file; save file; choose folder; clipboard; file drop; window placement.
mwfl::FileDialogOptions mwfl::SavedWindowPlacement<mwfl/desktop.h>custom dialog; modal form; modeless window; resizable dialog.
mwfl::Dialog mwfl::DialogOptions mwfl::DialogCallbacks mwfl::DialogResult<mwfl/dialog.h>Rules: the owner HWND is borrowed; the wrapper owns a modeless HWND; callbacks and child controls stay on the creating UI thread.
Tests: mwfl.dialog_native
dark mode; automatic system theme switching; native control themes; menu themes; custom drawing palette; mica; high contrast; accessible name; DPI.
mwfl::AppearanceOptions mwfl::AppearanceState mwfl::AppearancePalette mwfl::ResolveAppearance mwfl::GetWindowAppearance mwfl::ApplyWindowAppearanceBestEffort mwfl::ApplyNativeControlAppearance mwfl::SetAccessibleName<mwfl/appearance.h> <mwfl/dpi.h>Rules: WindowBase automatically reapplies its retained appearance after system theme messages; native and third-party visual styles remain best effort; High Contrast takes precedence.
Tests: mwfl.appearance</code>, <code>mwfl.appearance_lifecycle
property sheet; settings pages; Apply OK Cancel; modeless settings.
mwfl::PropertyPage mwfl::PropertySheetModel mwfl::PropertySheetDialog mwfl::PropertySheetResult<mwfl/property_sheet.h>Rules: page IDs are stable and nonzero; page HWNDs are borrowed and lazily created; modeless operations stay on the creating UI thread.
Tests: mwfl.property_sheet_model</code>, <code>mwfl.property_sheet_native</code>, <code>mwfl.settings_application_model</code>, <code>mwfl.settings_application_gui
task dialog; confirmation dialog; progress dialog; radio choice; verification checkbox.
mwfl::TaskDialogOptions mwfl::TaskDialogController mwfl::TaskDialogEvent mwfl::TaskDialogResult mwfl::ShowTaskDialog<mwfl/control_resources.h>Rules: the owner HWND is borrowed; the controller is callback-scoped and UI-thread-only; keep_open only changes button-close handling.
Tests: mwfl.task_dialog
tooltip; balloon tooltip; image list; context menu; popup command.
mwfl::Tooltip mwfl::TooltipOptions mwfl::ImageList mwfl::Menu mwfl::PopupMenuResult<mwfl/control_resources.h> <mwfl/desktop.h>Rules: ImageList owns its HIMAGELIST and toolbar borrowing requires it to outlive the toolbar; Tooltip owns text and its HWND but borrows owner and tools; tooltip text does not replace an accessible name.
Tests: mwfl.control_resources_native</code>, <code>mwfl.modern_api</code>, <code>mwfl.desktop
host a third-party HWND; forward native notifications; manage child focus and resize.
mwfl::NativeHost mwfl::NativeHostStateModel<mwfl/native_host.h>Rules: the host owns its container and borrows one direct-child HWND; host and child must share a UI thread and process; Detach does not destroy or reparent.
Tests: mwfl.native_host_model</code>, <code>mwfl.native_host_native
track an open document; prompt for unsaved changes; coordinate save before close.
mwfl::DocumentState mwfl::DocumentTransition mwfl::UnsavedChangesChoice<mwfl/document.h>Rules: applications own contents and perform file I/O; record opened or saved state only after I/O succeeds; the model belongs to the document coordination thread.
Tests: mwfl.document
manage multiple documents; move a document between windows; recently closed documents; active document state.
mwfl::DocumentWorkspaceModel mwfl::DocumentId mwfl::WorkspaceId mwfl::DocumentTransferPlan mwfl::TransferDocument<mwfl/document_workspace.h>Rules: UI-thread logical model owns metadata snapshots only; applications own contents undo buffers and page HWNDs keyed by stable DocumentId; Windows paths deduplicate case-insensitively after lexical normalization.
Tests: mwfl.document_workspace</code>, <code>mwfl.document_workspace_gui</code>, <code>mwfl.package_consumer
route a command to the active document; close all documents safely; save dirty documents before shutdown.
mwfl::BuildActiveDocumentCommandProjection mwfl::ApplyActiveDocumentCommandProjection mwfl::RouteActiveDocument mwfl::BuildCoordinatedClosePlan mwfl::CommitCoordinatedCloseAfterSaves mwfl::ExecuteCoordinatedClose<mwfl/document_coordination.h>Rules: route stable IDs and never capture document pointers; handlers and save I/O remain application-owned; asynchronous applications finish every planned save before CommitCoordinatedCloseAfterSaves.
Tests: mwfl.document_coordination</code>, <code>mwfl.package_consumer
restore multiple documents; persist workspace sessions; validate changed session files; recover recently closed documents.
mwfl::DocumentSession mwfl::WorkspaceSession mwfl::SaveDocumentSessionAtomic mwfl::LoadDocumentSession mwfl::RestoreWorkspaceSession<mwfl/document_session.h>Rules: schema and input sizes are bounded; atomic replacement preserves the previous complete file; unknown extension records are tolerated.
Tests: mwfl.document_session</code>, <code>mwfl.package_consumer
show documents in native tabs; move a document page between windows; route native tab selection; arrange document pages.
mwfl::DocumentTabWorkspaceAdapter mwfl::DocumentPageBinding mwfl::TransferDocumentWithPage<mwfl/document_tabs.h>Rules: the adapter borrows all HWNDs; pages share the TabControl parent on the creating UI thread; native item data stores stable integer IDs and never pointers.
Tests: mwfl.document_tabs_native</code>, <code>mwfl.document_workspace_gui</code>, <code>mwfl.package_consumer
track application tabs; keep stable tab identity; synchronize a native tab control.
mwfl::TabWorkspaceModel mwfl::TabId mwfl::TabControl<mwfl/tab_workspace.h> <mwfl/navigation_controls.h>Rules: zero is not a valid TabId; the model does not own documents or page HWNDs; returned views expire on mutation.
Tests: mwfl.tab_workspace</code>, <code>mwfl.modern_api
compose two resizable panes; enforce pane minimum sizes; support keyboard splitter movement.
mwfl::Splitter mwfl::SplitterModel mwfl::SplitterNotification<mwfl/splitter.h>Rules: positions and constraints are DIPs; the splitter owns its container HWND and borrows direct-child pane HWNDs; attached pane notifications commands and context menus forward to the parent.
Tests: mwfl.splitter</code>, <code>mwfl.splitter_native</code>, <code>mwfl.explorer_gui
tree with stable item identity; multi-select report view; virtual ListView; sort or label-edit native rows.
mwfl::TreeItemId mwfl::TreeView mwfl::ListItemId mwfl::ListView mwfl::VirtualListModel<mwfl/navigation_controls.h>Rules: IDs are unique stable and nonzero; ListView is multi-select unless LVS_SINGLESEL is requested; virtual models are shared and authoritative.
Tests: mwfl.navigation_model</code>, <code>mwfl.navigation_native</code>, <code>mwfl.explorer_model</code>, <code>mwfl.explorer_gui
associate typed values with native choices; select by application value; avoid unsafe native item pointers.
mwfl::SelectionAdapter mwfl::SelectionEntry<mwfl/selection.h> <mwfl/controls.h> <mwfl/navigation_controls.h>Rules: the adapter owns labels and values while the control owns only native labels; the adapter must be the exclusive item mutator; all adapter and control operations stay on the control UI thread.
Tests: mwfl.selection</code>, <code>mwfl.modern_api</code>, <code>mwfl.package_consumer
open a text document; save a text document safely; detect an external file change.
mwfl::ReadTextFile mwfl::WriteTextFileAtomic mwfl::TextFile mwfl::FileStamp<mwfl/text_file.h>Rules: malformed Unicode is rejected; save uses a flushed sibling temporary and atomic replacement; pass the read FileStamp to detect stale editor content.
Tests: mwfl.text_file
find text; replace text; implement an editor find dialog.
mwfl::FindTextMatch mwfl::TextMatchesAt mwfl::ReplaceAllText<mwfl/text_search.h>Rules: empty queries never match; whole-word treats letters, digits, and underscore as word characters; replace-all advances after inserted text.
Tests: mwfl.text_search
undo text edits; redo text edits; track whether undo returned to the saved text.
mwfl::TextHistory<mwfl/text_history.h>Rules: history stores bounded snapshots; new edits truncate the redo branch; returned views expire on mutation.
Tests: mwfl.text_history
show recent files; persist recent files; restore editor settings.
mwfl::RecentFileList mwfl::LoadRecentFilesFromRegistry mwfl::SaveRecentFilesToRegistry<mwfl/recent_files.h>Rules: root registry handles are borrowed; schema version is validated; paths are deduplicated with Windows case-insensitive comparison.
Tests: mwfl.recent_files
allow only one application instance; forward a file to the existing window; activate an existing application.
mwfl::SingleInstance mwfl::ActivationResult mwfl::ActivationStatus<mwfl/single_instance.h>Rules: register only the primary top-level window; activation payloads are bounded copied UTF-16; same-user UIPI access denial is reported.
Tests: mwfl.single_instance
build a text editor; build an SDI document application; test a real native application; package a native executable.
mwfl::DocumentState mwfl::CommandSet mwfl::StatusBar mwfl::ReadTextFile mwfl::SingleInstance<mwfl/document.h> <mwfl/command.h> <mwfl/command_controls.h> <mwfl/text_file.h> <mwfl/single_instance.h>Rules: start from templates/basic-app; mark document state only after successful I/O; optional preference failures never discard document content.
Tests: mwfl.notepad_gui</code>, <code>mwfl.text_file</code>, <code>mwfl.document</code>, <code>mwfl.package_consumer
Direct2D drawing; DPI-aware canvas; recover rendering resources; export application drawing data.
mwfl::D2DHost mwfl::D2DHostOptions mwfl::D2DRenderContext mwfl::D2DRenderStateModel<mwfl/d2d_host.h>Rules: request the d2d package component and link mwfl::d2d; the core target does not link Direct2D; D2DHost owns BeginDraw and EndDraw.
Tests: mwfl.d2d_host_model</code>, <code>mwfl.d2d_host_native</code>, <code>mwfl.drawing_model</code>, <code>mwfl.drawing_gui
Direct3D rendering; swap chain; on-demand GPU frame; device-loss recovery; WARP fallback.
mwfl::D3DHost mwfl::D3DHostOptions mwfl::D3DFrameContext mwfl::D3DFrameResult mwfl::D3DRenderStateModel<mwfl/d3d_host.h>Rules: request the d3d package component and link mwfl::d3d; RenderFrame is on-demand; handle every structured frame status.
Tests: mwfl.d3d_host_model</code>, <code>mwfl.d3d_host_native</code>, <code>mwfl.package_consumer
decode an image; image viewer; zoom and pan; fit image; reject huge images; recover a GPU bitmap.
mwfl::DecodedImage mwfl::ImageDecodeOptions mwfl::DecodeImageFile mwfl::ImageViewportModel mwfl::D2DHost<mwfl/imaging.h> <mwfl/d2d_host.h>Rules: request imaging and d2d package components; COM must be initialized before WIC decode; default normalized pixel budget is 256 MiB.
Tests: mwfl.imaging_model</code>, <code>mwfl.imaging_decode</code>, <code>mwfl.image_viewer_gui</code>, <code>mwfl.d2d_host_native
record an enhanced metafile; play an EMF; export PNG with GDI plus; manage GDI plus startup.
mwfl::EnhancedMetafile mwfl::RecordEnhancedMetafile mwfl::PlayEnhancedMetafile mwfl::GdiPlusSession mwfl::ExportGdiPlusPng<mwfl/graphics.h>Rules: request the graphics component and link mwfl::graphics; EnhancedMetafile exclusively owns its handle; recording HDC and Graphics are callback scoped.
Tests: mwfl.graphics</code>, <code>mwfl.graphics_interop_gui</code>, <code>mwfl.integration_stress</code>, <code>mwfl.package_consumer
tray icon; notification area; background utility; balloon notification; Explorer restart.
mwfl::TrayIcon mwfl::TrayIconOptions mwfl::TrayIconEvent mwfl::TrayNotification mwfl::TrayIconStateModel<mwfl/tray_icon.h>Rules: use a stable application GUID; the owner HWND and HICON are borrowed; mutations and destruction stay on the creating UI thread.
Tests: mwfl.tray_icon_state</code>, <code>mwfl.tray_icon_native</code>, <code>mwfl.hot_corners_self_test
print a document; build print preview; enumerate printers; cancel printing.
mwfl::PrintPage mwfl::PrintPreviewModel mwfl::PrinterSettings mwfl::PrintJob mwfl::PrintPages<mwfl/printing.h> <mwfl/printing_native.h> <mwfl/printing_settings.h>Rules: request the printing component and link mwfl::printing; document and pagination remain printer independent; printer HDCs are borrowed by render callbacks.
Tests: mwfl.printing_model</code>, <code>mwfl.printing_job</code>, <code>mwfl.printing_settings</code>, <code>mwfl.printing_gui
OLE drag and drop; transfer Unicode text; transfer file lists; custom clipboard format.
mwfl::OleDataObjectBuilder mwfl::CreateOleDropSource mwfl::CreateOleDropTarget mwfl::OleDropTargetRegistration mwfl::DoOleDragDrop<mwfl/ole_data.h> <mwfl/ole_drag_drop.h>Rules: request the ole component and link mwfl::ole; run with ComApartment::ole_sta; STGMEDIUM ownership follows COM transfer rules.
Tests: mwfl.ole_data</code>, <code>mwfl.ole_drag_drop</code>, <code>mwfl.ole_drag_drop_gui</code>, <code>mwfl.package_consumer
versioned settings; file association; Jump List; recent documents; taskbar progress.
mwfl::VersionedSettingsStore mwfl::RegisterPerUserFileAssociation mwfl::CommitJumpList mwfl::TaskbarWindowIntegration<mwfl/settings_store.h> <mwfl/file_association.h> <mwfl/shell_integration.h>Rules: request the shell component and link mwfl::shell; persistent mutations are explicit per-user and reversible; owner markers prevent removal of foreign registry state.
Tests: mwfl.settings_store</code>, <code>mwfl.file_association</code>, <code>mwfl.shell_integration</code>, <code>mwfl.shell_integration_gui
add taskbar thumbnail buttons; register taskbar tabs; recover after Explorer restart; launch contextual Help safely.
mwfl::TaskbarWindowIntegration mwfl::TaskbarThumbnailButton mwfl::HelpRequest mwfl::ValidateHelpRequest mwfl::LaunchHelp<mwfl/shell_integration.h> <mwfl/help.h>Rules: request the shell component and link mwfl::shell; taskbar calls stay on the creating STA UI thread; reapply application-owned state after TaskbarCreated.
Tests: mwfl.shell_integration</code>, <code>mwfl.help</code>, <code>mwfl.shell_integration_gui</code>, <code>mwfl.integration_stress
inspect a SQLite database; browse database schema; run read-only SQL; export query results to CSV.
mwfl::TreeView mwfl::ListView mwfl::TextBox mwfl::CommandSet mwfl::ShowOpenFileDialog mwfl::ShowSaveFileDialog<mwfl/navigation_controls.h> <mwfl/controls.h> <mwfl/command.h> <mwfl/desktop.h>Rules: WinSQLite remains an application dependency; open user databases read-only; permit one sqlite3_stmt_readonly statement at a time.
Tests: sqlite-viewer.model (external repository)</code>, <code>sqlite-viewer.gui (external repository)
inspect binary files; edit bytes safely; search hexadecimal patterns; interpret selected bytes; save with a backup.
mwfl::NativeControl mwfl::WindowBase mwfl::ShowOpenFileDialog mwfl::ShowSaveFileDialog mwfl::AppearanceState mwfl::EnableFileDrop<mwfl/controls.h> <mwfl/window.h> <mwfl/desktop.h> <mwfl/appearance.h>Rules: open files read-only by default; enable overwrite editing only after explicit confirmation; bound whole-file memory to 256 MiB.
Tests: hex-editor.model (external repository)</code>, <code>hex-editor.gui (external repository)
compare files; compare folders; find changed files; show a side-by-side text diff; copy a verified difference.
mwfl::VirtualListModel mwfl::ListView mwfl::WindowWakeup mwfl::ShowFolderDialog mwfl::SetAccessibleName<mwfl/navigation_controls.h> <mwfl/async.h> <mwfl/desktop.h> <mwfl/appearance.h>Rules: perform recursive scans away from the UI thread; handoff progress and results through WindowWakeup; do not follow symbolic links implicitly.
Tests: folder-compare.model (external repository)
host web content; build a browser; detect missing WebView2 Runtime; recover a WebView2 process.
mwfl::WebView2Host mwfl::WebView2RuntimeInfo mwfl::WebView2InitializationResult mwfl::WebView2HostCallbacks<mwfl/webview2.h>Rules: enable MWFL_BUILD_WEBVIEW2 and link mwfl::webview2; SDK 1.0.4129.50 is hash-pinned; operations and callbacks stay on the creating STA thread.
Tests: mwfl.webview2_model</code>, <code>mwfl.webview2_native</code>, <code>mwfl.browser_gui</code>, <code>mwfl.package_consumer
view local PDF documents; build a tabbed PDF reader; open dropped PDF files; recover a PDF rendering process.
mwfl::WebView2Host mwfl::TabWorkspaceModel mwfl::TabControl mwfl::ShowOpenFileDialog mwfl::EnableFileDrop<mwfl/webview2.h> <mwfl/tab_workspace.h> <mwfl/navigation_controls.h> <mwfl/desktop.h>Rules: enable MWFL_BUILD_WEBVIEW2 and initialize STA; PDF paths remain local and become file URIs only after explicit open or drop; the tab model is authoritative.
Tests: pdf-reader.gui (external repository)</code>, <code>mwfl.webview2_native
build a source editor; host Scintilla; handle editor notifications; search and replace code.
mwfl::ScintillaRuntime mwfl::ScintillaEditor mwfl::ScintillaNotification mwfl::ScintillaTextRange<mwfl/scintilla.h>Rules: enable MWFL_BUILD_SCINTILLA link mwfl::scintilla and deploy Scintilla.dll; Scintilla 5.6.5 archives are hash-pinned; public strings convert strictly between UTF-16 and UTF-8.
Tests: mwfl.scintilla_text</code>, <code>mwfl.scintilla_native</code>, <code>mwfl.code_editor_gui</code>, <code>mwfl.package_consumer
edit Markdown; preview Markdown; syntax color Markdown; build a local-first document editor; compose Scintilla and WebView2.
mwfl::ScintillaEditor mwfl::WebView2Host mwfl::TabWorkspaceModel mwfl::TabControl mwfl::DocumentState mwfl::ReadTextFile mwfl::WriteTextFileAtomic<mwfl/scintilla.h> <mwfl/webview2.h> <mwfl/tab_workspace.h> <mwfl/navigation_controls.h> <mwfl/document.h> <mwfl/text_file.h>Rules: enable both MWFL_BUILD_SCINTILLA and MWFL_BUILD_WEBVIEW2; deploy Scintilla.dll and Lexilla.dll beside the executable; the Lexilla Markdown lexer and light/dark palettes stay application-owned.
Tests: markdown-editor.renderer (external repository)
build an IDE workspace; dock and float tool panels; auto-hide panels; save and restore a docking layout.
mwfl::DockLayoutModel mwfl::DockNativeWorkspaceAdapter mwfl::DockDragSession mwfl::DockPreviewWindow mwfl::DockKeyboardSession mwfl::DockFloatingWindow mwfl::DockAutoHideController mwfl::SaveDockingSessionAtomic<mwfl/docking_workspace.h> <mwfl/docking_native.h> <mwfl/docking_drag.h> <mwfl/docking_preview.h> <mwfl/docking_keyboard.h> <mwfl/docking_floating.h> <mwfl/docking_auto_hide.h> <mwfl/docking_session.h>Rules: Windows 10+ and C++20; stable IDs are nonzero and never derived from HWNDs or pointers; the model owns metadata while applications own panel content and HWNDs.
Tests: mwfl.docking_workspace</code>, <code>mwfl.docking_session</code>, <code>mwfl.docking_monitor</code>, <code>mwfl.docking_drag
build a Windows Ribbon application; map Ribbon commands; use application modes; show contextual Ribbon state.
mwfl::RibbonCommandModel mwfl::RibbonFrameworkHost mwfl::RibbonCommandBinding mwfl::RibbonRecentItem<mwfl/ribbon.h>Rules: request the ribbon component and link mwfl::ribbon; compile UICC resources into the executable; initialize STA on the creating UI thread.
Tests: mwfl.ribbon_model</code>, <code>mwfl.ribbon_native</code>, <code>mwfl.ribbon_workspace_gui</code>, <code>mwfl.package_consumer
build a traditional MDI application; route an active MDI child; arrange MDI children; close dirty MDI documents.
mwfl::MdiWorkspaceModel mwfl::MdiHost mwfl::MdiChildId mwfl::RouteMdiActiveChild<mwfl/mdi.h>Rules: prefer DocumentWorkspaceModel for new products; request the mdi component and link mwfl::mdi; application documents and views remain application owned.
Tests: mwfl.mdi_model</code>, <code>mwfl.mdi_native</code>, <code>mwfl.mdi_workspace_gui</code>, <code>mwfl.package_consumer
The core target stays small. Rendering, imaging, printing, OLE, Shell, Ribbon, MDI, graphics, WebView2, and Scintilla remain explicit components.
find_package(mwfl CONFIG REQUIRED COMPONENTS printing ole shell)
target_link_libraries(my_app PRIVATE
mwfl::ui
mwfl::printing
mwfl::ole
mwfl::shell)These lists are generated from every checked-in recipe and tutorial, so specialized workflows remain discoverable even when one capability card links a broader guide.