{"slug": "mfc", "name": "MFC", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 3, "commenters": 9, "warners": 4, "score": -0.308, "rising": -0.98, "first": "2025-12-08", "latest": "2026-08-09", "why": "Keep using Win32, MFC (yes it is in a better state than WinUI 3.0 with C++), WinForms, WPF", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 3, "neutral": 1, "compare": 1, "warn": 4}, "spark": [0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "Keep using Win32, MFC (yes it is in a better state than WinUI 3.0 with C++), WinForms, WPF", "kind": "", "icon": true, "domain": null, "github_repo": null, "official_url": "https://learn.microsoft.com/en-us/cpp/mfc/mfc-desktop-applications", "pricing": "", "aliases": ["MFC"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 759680898, "item_id": 47480056, "url": "https://news.ycombinator.com/item?id=47480056", "by": "pjmlp", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "Keep using Win32, MFC (yes it is in a better state than WinUI 3.0 with C++), WinForms, WPF", "excerpt": "Again, unless you have existing Windows 8/10 applications that were written against WinRT, UAP or UWP[0], that make use of WinUI 2.0, forget about touching anything related to WinUI 3.0 or WinAppSDK, stay away from the marketing. Exception being the few APIs that have been introduced in Win32 that instead of COM, actually depend on WinRT like the new MIDI 2.0 or Windows ML. Keep using Win32, MFC (yes it is in a bette", "context": "", "use_case": "Windows desktop apps", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 752695457, "item_id": 47043466, "url": "https://news.ycombinator.com/item?id=47043466", "by": "jezek2", "date": "2026-02-16", "version": null, "stance": "recommend", "quote": "MFC which was okay to me despite the hate", "excerpt": "Interestingly I've never used Visual Studio on Windows (only for a brief time for ARM based PDAs where I could experience the infamous MFC which was okay to me despite the hate). I've used Borland C++ and Watcom C/C++ back in the day and MinGW after that. Also COM was invented for interoperation between languages/compilers. Being a good citizen means to not use the inherently unstable C++ ABI directly. You can use C ", "context": "", "use_case": "", "switched_from": "", "story": "I Fixed Windows Native Development"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 759724785, "item_id": 47482799, "url": "https://news.ycombinator.com/item?id=47482799", "by": "domenicd", "date": "2026-03-22", "version": null, "stance": "warn", "quote": "From what I understand, Win32/MFC/WinForms inherently are stuck around Vista visuals, with no dark mode support.", "excerpt": "From what I understand, Win32/MFC/WinForms inherently are stuck around Vista visuals, with no dark mode support. Win32/MFC also have no high-DPI support, so you get gross upscaling. (WinForms supposedly has some support for high DPI, but with many open issues. [1]) Now, I'm not 100% sure, since there are so many commenters in this thread saying \"just use Win32/MFC like a real man\". (Most of them ignoring the memory s", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 749968050, "item_id": 46873003, "url": "https://news.ycombinator.com/item?id=46873003", "by": "super256", "date": "2026-02-03", "version": null, "stance": "warn", "quote": "Of course you can still build on MFC or Win32, but meh.", "excerpt": "Also, modern native UIs became looking garbage on desktops / laptops, where you usually want a high information density. Just look at this TreeView in WinUI2 (w/ fluent design) vs a TreeView in the good old event viewer. It just wastes SO MUCH space! https://f003.backblazeb2.com/file/sharexxx/ShareX/2026/02/mmc_L0FCkgFN4HoG2RgZyd.png And imo it's just so much easier to write a webapp, than fiddle with WinUI. Of cours", "context": "", "use_case": "", "switched_from": "", "story": "The Codex App"}, {"id": 744463008, "item_id": 46528938, "url": "https://news.ycombinator.com/item?id=46528938", "by": "DonHopkins", "date": "2026-01-07", "version": null, "stance": "warn", "quote": "how beautiful and elegant and easy to learn and transparent to debug the Microsoft C++ MFC COM/OLE/IDispatch/ActiveX object system macrology is. /s", "excerpt": "You can always use macros! Just look at how beautiful and elegant and easy to learn and transparent to debug the Microsoft C++ MFC COM/OLE/IDispatch/ActiveX object system macrology is. /s https://learn.microsoft.com/en-us/cpp/mfc/tn038-mfc-ole-iunknown-implementation?view=msvc-170", "context": "", "use_case": "C++ application framework", "switched_from": "", "story": "Stop Designing Languages. Write Libraries Instead (2016)"}, {"id": 739172976, "item_id": 46198311, "url": "https://news.ycombinator.com/item?id=46198311", "by": "kevstev", "date": "2025-12-08", "version": null, "stance": "warn", "quote": "how unintuitive say MFC (Microsoft Foundation Classes- big in the win9x days) apis were", "excerpt": "I also find that docs have gotten a lot better over time as well. I feel that Y2K era of numerous large tomes was largely to fill in the gap left after software publishers stopped shipping even their full price boxed software with meaty manuals, assuming I guess that help menus and GUI context (or maybe even Clippy) would get you there. Even some of the enterprisey software- Oracle comes to mind- would ship with like", "context": "", "use_case": "Windows C++ UI framework", "switched_from": "", "story": "No more O'Reilly subscriptions for me"}]}], "who": [], "tags": [], "use_cases": ["windows desktop apps", "c++ application framework", "windows c++ ui framework"], "compared": [{"slug": "win32", "name": "Win32", "co": 4, "switched_from": 0, "switched_to": 0}, {"slug": "wtl", "name": "WTL", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "qt", "name": "Qt", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "windows-forms", "name": "Windows Forms", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=47475938", "title": "Windows native app development is a mess", "mentions": 4}, {"url": "https://news.ycombinator.com/item?id=49164687", "title": "Assert(): A Modern How To", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47022891", "title": "I Fixed Windows Native Development", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46859054", "title": "The Codex App", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46525640", "title": "Stop Designing Languages. Write Libraries Instead (2016)", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46194063", "title": "No more O'Reilly subscriptions for me", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {"warn": 1}, "2026-01": {"warn": 1}, "2026-02": {"warn": 1, "recommend": 1}, "2026-03": {"recommend": 2, "compare": 1, "warn": 1}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {}, "2026-08": {"neutral": 1}, "2026-09": {}, "2026-10": {}}, "versions": [], "version_unnamed": 0, "family_ref": null, "runs_on": null, "lines": [], "quotes": [{"id": 787705504, "item_id": 49231594, "url": "https://news.ycombinator.com/item?id=49231594", "by": "rramadass", "date": "2026-08-09", "version": null, "stance": "neutral", "quote": "The ASSERT (note caps) macro in Microsoft MFC library does this.", "excerpt": "The ASSERT (note caps) macro in Microsoft MFC library does this. It uses a \"INT 3\" instruction (x86/x64) via \"AfxDebugBreak\" to invoke the debugger. Since the above is a well-known technique, it has now been generalized and standardized via \"std::breakpoint\" in C++26 - https://en.cppreference.com/cpp/utility/breakpoint This function standardizes many similar existing facilities: __builtin_debugtrap from LLVM, DebugBr", "context": "", "use_case": "", "switched_from": "", "story": "Assert(): A Modern How To"}, {"id": 759724785, "item_id": 47482799, "url": "https://news.ycombinator.com/item?id=47482799", "by": "domenicd", "date": "2026-03-22", "version": null, "stance": "warn", "quote": "From what I understand, Win32/MFC/WinForms inherently are stuck around Vista visuals, with no dark mode support.", "excerpt": "From what I understand, Win32/MFC/WinForms inherently are stuck around Vista visuals, with no dark mode support. Win32/MFC also have no high-DPI support, so you get gross upscaling. (WinForms supposedly has some support for high DPI, but with many open issues. [1]) Now, I'm not 100% sure, since there are so many commenters in this thread saying \"just use Win32/MFC like a real man\". (Most of them ignoring the memory s", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 759703201, "item_id": 47481450, "url": "https://news.ycombinator.com/item?id=47481450", "by": "ww520", "date": "2026-03-22", "version": null, "stance": "compare", "quote": "lighter than MFC", "excerpt": "The last time I built a native Windows app years ago, I used WTL 3.0. It\u2019s a light weight wrapper on the native Win32 API, lighter than MFC. It took out the unpleasantness of working directly on Win32 API and wrapped it in a simple OO framework. It had access to all features of Win32. It could produce runtime binary in dozens of K, instead of MB or GB. Microsoft released it open source later on. Looking at the reposi", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 759686834, "item_id": 47480427, "url": "https://news.ycombinator.com/item?id=47480427", "by": "nozzlegear", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "", "excerpt": "Just wanted to add a shoutout to WinJS for posterity, with which I built a Windows 8 app that I had published to the Windows Store for a brief period of time. Then they open-sourced the UI part of WinJS and decided it was just a web framework instead of an officially supported method for building Windows apps iirc, which was the end of my foray into the Windows store. https://github.com/winjs/winjs", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 759680898, "item_id": 47480056, "url": "https://news.ycombinator.com/item?id=47480056", "by": "pjmlp", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "Keep using Win32, MFC (yes it is in a better state than WinUI 3.0 with C++), WinForms, WPF", "excerpt": "Again, unless you have existing Windows 8/10 applications that were written against WinRT, UAP or UWP[0], that make use of WinUI 2.0, forget about touching anything related to WinUI 3.0 or WinAppSDK, stay away from the marketing. Exception being the few APIs that have been introduced in Win32 that instead of COM, actually depend on WinRT like the new MIDI 2.0 or Windows ML. Keep using Win32, MFC (yes it is in a bette", "context": "", "use_case": "Windows desktop apps", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 752695457, "item_id": 47043466, "url": "https://news.ycombinator.com/item?id=47043466", "by": "jezek2", "date": "2026-02-16", "version": null, "stance": "recommend", "quote": "MFC which was okay to me despite the hate", "excerpt": "Interestingly I've never used Visual Studio on Windows (only for a brief time for ARM based PDAs where I could experience the infamous MFC which was okay to me despite the hate). I've used Borland C++ and Watcom C/C++ back in the day and MinGW after that. Also COM was invented for interoperation between languages/compilers. Being a good citizen means to not use the inherently unstable C++ ABI directly. You can use C ", "context": "", "use_case": "", "switched_from": "", "story": "I Fixed Windows Native Development"}, {"id": 749968050, "item_id": 46873003, "url": "https://news.ycombinator.com/item?id=46873003", "by": "super256", "date": "2026-02-03", "version": null, "stance": "warn", "quote": "Of course you can still build on MFC or Win32, but meh.", "excerpt": "Also, modern native UIs became looking garbage on desktops / laptops, where you usually want a high information density. Just look at this TreeView in WinUI2 (w/ fluent design) vs a TreeView in the good old event viewer. It just wastes SO MUCH space! https://f003.backblazeb2.com/file/sharexxx/ShareX/2026/02/mmc_L0FCkgFN4HoG2RgZyd.png And imo it's just so much easier to write a webapp, than fiddle with WinUI. Of cours", "context": "", "use_case": "", "switched_from": "", "story": "The Codex App"}, {"id": 744463008, "item_id": 46528938, "url": "https://news.ycombinator.com/item?id=46528938", "by": "DonHopkins", "date": "2026-01-07", "version": null, "stance": "warn", "quote": "how beautiful and elegant and easy to learn and transparent to debug the Microsoft C++ MFC COM/OLE/IDispatch/ActiveX object system macrology is. /s", "excerpt": "You can always use macros! Just look at how beautiful and elegant and easy to learn and transparent to debug the Microsoft C++ MFC COM/OLE/IDispatch/ActiveX object system macrology is. /s https://learn.microsoft.com/en-us/cpp/mfc/tn038-mfc-ole-iunknown-implementation?view=msvc-170", "context": "", "use_case": "C++ application framework", "switched_from": "", "story": "Stop Designing Languages. Write Libraries Instead (2016)"}, {"id": 739172976, "item_id": 46198311, "url": "https://news.ycombinator.com/item?id=46198311", "by": "kevstev", "date": "2025-12-08", "version": null, "stance": "warn", "quote": "how unintuitive say MFC (Microsoft Foundation Classes- big in the win9x days) apis were", "excerpt": "I also find that docs have gotten a lot better over time as well. I feel that Y2K era of numerous large tomes was largely to fill in the gap left after software publishers stopped shipping even their full price boxed software with meaty manuals, assuming I guess that help menus and GUI context (or maybe even Clippy) would get you there. Even some of the enterprisey software- Oracle comes to mind- would ship with like", "context": "", "use_case": "Windows C++ UI framework", "switched_from": "", "story": "No more O'Reilly subscriptions for me"}]}