resizablelib
resizablelib copied to clipboard
Document the use of ResizableLib in mpc-hc
Feel free to close this, I'm trying to document the changes we've internally made to a copy of your lib from 2014.
CResizableDialoginherits fromCCmdUIDialoginstead ofCDialog.CResizableDialog::OnSizehas an extra Invalidate() call for some redraw bugs. Have to track down the cause.CResizableDialoguses __super instead ofCDialog(you could do the same without causing any changes, but for us it calls the correct parent method)CResizableStateReadStateandWriteStateto support custom storage ids.ResizableWndStateadds an ability to set the show command to SW_HIDEResizableWndStateupdated to use different signature toCResizableStatemethods
Merging your latest to mpc-hc here: https://github.com/clsid2/mpc-hc/pull/2885
Note, mpc-hc only uses about 26 files from resizablelib. I'm not sure how many of the newer files were in the original version that was adopted by mpc-hc!
Thanks, I will have a look at your changes and see what can be included. It's always nice to see this library being used in real projects! Especially since I'm a user of MPC-HC ;-)
Thanks, I will have a look at your changes and see what can be included. It's always nice to see this library being used in real projects! Especially since I'm a user of MPC-HC ;-)
Awesome, thank you! Good to know you are a customer! I have always thought resizelib was an old abandoned project so it's nice to meet you.
CCmdUIDialog derives from CDialog. It has the following changes:
DefWindowProc sends a single message WM_KICKIDLE during WM_INITDIALOG
WM_KICKIDLE handler added, which calls UpdateDialogControls(this, false); (see https://deweymao.github.io/c/c++/2018/02/24/wm_kickidle_for_updating_mfc_dialog_controls.html for an explanation of the basic handler)
OnInitMenuPopup that seems identical to the one suggested here:
https://learn.microsoft.com/en-us/troubleshoot/developer/visualstudio/cpp/libraries/cannot-change-state-menu-item
This particular code seems like it's essentially fixing a bug/shortcoming of CDialog and menus.
Possible solutions for mpc-hc:
- Implement
CResizableCMDUIDialogthe same way you implementedCResizableDialogbut deriving fromCCmdUIDialog - Derive
CResizableCMDUIDialogfromCResizableDialogand add the same features fromCCmdUIDialog - You add
CCmdUIDialogor equivalent to ResizeLib and create aCResizableCMDUIDialog - We continue to merge your code to ours but change
CDialogtoCResizableDialog. Preferably if you could changeCDialog::to__super::it makes this merging easier.
@ppescher
Hi, I have another question. Would you consider adding #ifdefs to the codebase that identify MPC-HC specific code? It might be easier, specifically for CCmdUIDialog. Although...I do think CCmdUIDialog is a natural upgrade to CDialog so including it in your project wouldn't be a terrible idea, either!
Possible solutions for mpc-hc:
1. Implement `CResizableCMDUIDialog` the same way you implemented `CResizableDialog` but deriving from `CCmdUIDialog` 2. Derive `CResizableCMDUIDialog` from `CResizableDialog` and add the same features from `CCmdUIDialog` 3. You add `CCmdUIDialog` or equivalent to ResizeLib and create a `CResizableCMDUIDialog` 4. We continue to merge your code to ours but change `CDialog` to `CResizableDialog`. Preferably if you could change `CDialog::` to `__super::` it makes this merging easier.
Could you not change CCmdUIDialog to derive from CResizableDialog? Does it break things?
Possible solutions for mpc-hc:
1. Implement `CResizableCMDUIDialog` the same way you implemented `CResizableDialog` but deriving from `CCmdUIDialog` 2. Derive `CResizableCMDUIDialog` from `CResizableDialog` and add the same features from `CCmdUIDialog` 3. You add `CCmdUIDialog` or equivalent to ResizeLib and create a `CResizableCMDUIDialog` 4. We continue to merge your code to ours but change `CDialog` to `CResizableDialog`. Preferably if you could change `CDialog::` to `__super::` it makes this merging easier.Could you not change CCmdUIDialog to derive from CResizableDialog? Does it break things?
I probably could. The trick would be if we have any non-resizing cases that derive from it. I count one, the CFavoriteAddDlg, which perhaps I could make be resizable.
@ppescher , I did try deriving classes from CResizableDialog. The result was they became resizable, where previously they had not been. So at that point the issue becomes: they resize but are not designed to resize, so it just increases the window size without moving widgets anywhere.
I'm not sure if the library supports the concept of something that derives from CResizableDialog without resizing...not sure there is much point, other than code reuse.
https://github.com/clsid2/mpc-hc/pull/3350
Thanks for the support! We now use the unmodified library!