ppescher / resizablelib

A set of MFC classes to easily make resizable windows
Other
55 stars 27 forks source link

Document the use of ResizableLib in mpc-hc #31

Open adipose opened 6 days ago

adipose commented 6 days ago

Feel free to close this, I'm trying to document the changes we've internally made to a copy of your lib from 2014.

  1. CResizableDialog inherits from CCmdUIDialog instead of CDialog.
  2. CResizableDialog::OnSize has an extra Invalidate() call for some redraw bugs. Have to track down the cause.
  3. CResizableDialog uses __super instead of CDialog (you could do the same without causing any changes, but for us it calls the correct parent method)
  4. CResizableState ReadState and WriteState to support custom storage ids.
  5. ResizableWndState adds an ability to set the show command to SW_HIDE
  6. ResizableWndState updated to use different signature to CResizableState methods
adipose commented 6 days ago

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!

ppescher commented 6 days ago

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 ;-)

adipose commented 6 days ago

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.

adipose commented 5 days ago

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:

  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.