Comments (2)
This is a very interesting problem. Yes, you understanding is correct: there is a circular reference happening though all that chain, which can be summarized as: window has closures which have window.
I noticed you are only allowed to register event handlers before the
HWND
has been created. I wonder, would it make any sense that, when theHWND
is destroyed, you drop all the event handlers?
Yes, it does make sense, and that's indeed what I implemented. The only caveat is that this dropping – ultimately calling Vec::clear
to release all closures – must be done after the very last possible message to be processed, which according to our much cherished Raymond Chen (and my own observations) is WM_NCDESTROY
. And not just that: the cleanup must happen only after any user-defined WM_NCDESTROY
have been executed themselves, otherwise they would be lost (with their potential cleanups, leading to leaks). Oh and to make it even more robust, the struct pointer is cleaned before the closures cleanup, so any weird messages after WM_NCDESTROY
won't be handled.
Although I’m not sure how well that would work with dynamic creation and destruction of controls
Not really a concern – dynamically created controls are not allowed by the library (at least by now), because, as you said, most events belong to the parent window, and handling that scenario has proven to be extremely complex. Maybe I'll implement this in the future, but I know it would require a complete rework of the message plumbing.
Your example now runs fine, and I found no side-effects on any of my own programs. Please let me know if this solution works for you.
Thank you very much for your time and effort.
from winsafe.
Everything you said makes sense to me; thank you for all your work on winsafe
!
from winsafe.
Related Issues (20)
- Incorrect message parameters for WM_CHAR and friends HOT 1
- GetDlgCtrlId fails if the child window’s ID is actually zero HOT 1
- WindowControlOpts::ctrl_id does not auto-generate an ID
- Feature request: GetSystemMetricsForDpi HOT 2
- WindowModal::show_modal never returns
- how to create a UpDown/Spin control HOT 6
- as_mut may be unsound HOT 1
- ListBox:: new() ListBoxOpts list_box_style field ignores co::WS::HSCROLL flag when present HOT 3
- Custom color on for class_bg_brush on WindowMainOpts HOT 1
- ...Guard::new should be unsafe and leak should not be HOT 2
- Question concerning creating a DC, getting a ListBox's selected font, and invoking GetSystemMetrics(SM_SM_CXBORDER) HOT 2
- code panics on adding root to treeview HOT 1
- Add EnableScrollBar function
- How to Custom msg_id ? HOT 1
- How to close a process? HOT 7
- How to pass a RECT as a parameter in MapWindowPoints? HOT 4
- FindWindow always encounters an error HOT 2
- Missing StretchDIBits from Windows GDI HOT 2
- Use microsoft windows-rs crate? HOT 2
- Add `GetVolumePathName` function HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from winsafe.