Using an MFC custom control from Qt
-
Until I can re-implement a complex MFC custom control in native Qt, I need to be able to continue to use it.
The usage of the control is to either take over a CStatic control in a dialog by invoking it's
BOOL CreateFromStatic(CWnd * static)
member function,
or as is probably more appropriate here to invoke this mf:
BOOL Create(RECT const & r, CWnd * parent, UINT id,
DWORD dwStyle = WS_CHILD | WS_VISIBLE);I can extract a RECT from the widget that I wish to take over (a QLabel), but I'm not clear how I can create a CWND that I can use to refer to the "this" QWidget as its parent. I can readily extract my own hwnd by calling winId() but can I use CWND::Attach() against a just created CWND to do create a useable CWND for this purpose?
Thanks
David -
@Perdrix said in Using an MFC custom control from Qt:
can I use CWND::Attach() against a just created CWND to do create a useable CWND for this purpose?
What happens if you try it?
Note: This is not officially supported by Qt, so I won't be surprised if you encounter strange behaviours.
-
@Perdrix
https://forum.qt.io/topic/76525/cwnd-to-qwidgetSeparately, I don't know whether it's relevant but you may wish to look through https://docs.huihoo.com/qt/solutions/4/qtwinmigrate/winmigrate-walkthrough.html
-
@Perdrix said in Using an MFC custom control from Qt:
What's the recommended approach for hosting an MFC CWND derived window with a QWidget? Surely this must have come up before?
MFC and Qt are quite different frameworks and combining them is challenging. I don't have the experience to do it "correctly"; I'm not sure if anyone in this forum has that experience.
Thank you @JonB for providing links to what others have tried before. The source code for the Qt/MFC Migration Framework used by the walkthrough can be found at https://github.com/qtproject/qt-solutions/tree/master/qtwinmigrate . Unfortunately, it is no longer maintained so there is currently no officially-supported way to merge CWND and QWidget.
-
I'm using qmfcapp and qwinwidget as they seem to be the only way to go.
I'm frankly quite shocked that you don't support those anymore - this must be a very common requirement for everyone who's converting their code to Qt!
I'm also a bit surprised that there's no expertise on porting to Qt here either ...
David
-
Just want to add to what @JKSH said above (.. they are quite different frameworks):
I used MFC and Visual C++ for almost 20 years before waking up to Qt and initially tried to port some code over, however all the MFC macros like message maps etc I could just toss and same for MVC stuff, so the only type of code that I did port was CString juggling (CString and QString are probably the most similar in vein parts of their respective frameworks).
-
Hi
What does this complex MFC custom control do ?
Mixing MFC and Qt might end up being a bigger job than to recreate
this control in Qt. -
One of them is a class derived from this: https://www.codeproject.com/articles/555/wndimage-control.
It adds mouse tracking, hit-testing, wheel zooming and "4-corners" mode that zooms into the four corners of the image.
With four corners not enabled:
https://www.codeproject.com/articles/555/wndimage-control
With four corners enabled:
The image is populated from an internally calculated windows bitmap (BITMAPINFO) derived from a 32bit floating point representation of an image. We'd obviously need to have a non-Windows in storage bitmap representation (maybe a Pixmap?) that could be built dynamically from our internal representation.
David
-
Hi
The https://doc.qt.io/qt-5/graphicsview.html
would give panning / zooming and and mouse tracking for (almost) free.is the 4 zoom area like a lens effect that zoom the area while you can pan the image around or is it more static ?
-
@Perdrix
Hi
Well its also good to have many items but can also be
used for a single item like an image