MFC子窗口调用父窗口控件问题,望大神解救~~~
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC子窗口调用父窗口控件问题,望大神解救~~~相关的知识,希望对你有一定的参考价值。
参考技术A 你可以把在父窗口的指针保存在子窗口的类里面(增加一个数据成员),然后就能用指针调用播放函数了。MFC里的窗口类都有一个指向父窗口的指针,通过
CWnd::GetParent()
获得,指针在创建窗口的时候初始化。
如果你的控件不是标准的VC++控件,可以尝试自己添加这样一个成员,实现类似功能。 参考技术B 除了将父窗口指针保存在子窗口里面之外,
更好的办法是:
将父窗口的HWND保存于子窗口里面,然后在子窗口中发送消息,
由父窗口响应消息.
它的好处在于:
接口化,
以便子窗口不用相互依赖太多. 参考技术C 你好!
子窗口保存父窗口的指针,子窗口需要包含父窗口所在文件的头文件,而父窗口需要调用子窗口,父窗口需要包含子窗口的指针,这种互相包含一般会出错。而通过
CWnd::GetParent()
一般只能获得父窗口,很难得到里面的控件指针,因此,楼上方法不可靠。
可以在子窗口定义一个控件指针,这个指针指向父窗口的那个控件,这样就可以操作了。
希望对你有所帮助,望采纳。
将窗口(glfwCreateWindow)作为子嵌入到 C++ MFC 父窗体
【中文标题】将窗口(glfwCreateWindow)作为子嵌入到 C++ MFC 父窗体【英文标题】:embed window(glfwCreateWindow) as child to C++ MFC parent form 【发布时间】:2017-09-11 09:21:53 【问题描述】:请参考此链接
Embedding a GLFW window inside windows forms
如何使用VC++将glfw窗口嵌入到Parent窗体中?
【问题讨论】:
【参考方案1】:试试这个:
-
调用
glfwWindowHint()
将GLFW_DECORATED
和GLFW_VISIBLE
设置为false
。
致电glfwCreateWindow()
。
调用glfwGetWin32Window()
获取OpenGL 窗口的本机句柄。
调用 SetParent()
将您的表单设置为 OpenGL 窗口的新父级。
调用GetWindowLong()
/ SetWindowLong()
删除WS_POPUP
并为OpenGL 窗口添加WS_CHILDWINDOW
样式。
调用ShowWindow()
最终使OpenGL 窗口可见。
我是从 github.com/Chronial/foo_chronflow :: EngineWindow.cpp 那里得到的。
您也可以调用 SetWindowPos()
来调整 OpenGL 窗口在表单中的位置。
【讨论】:
我会实施你的方法并更新你。这正是我想要的 收到错误消息“glfwGetWin32Window()”未定义。我尝试在#includezett42 帖子中的链接已经失效,所以这里有一个更完整的 sn-p
glfwWindowHint(GLFW_DECORATED, GLFW_FALSE);
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
GLFWwindow* pWindow = glfwCreateWindow(width, height, "", NULL, NULL);
HWND hwNative = glfwGetWin32Window(m_pWindow);
SetParent(hwNative, hwParentWindow);
long style = GetWindowLong(hwNative, GWL_STYLE);
style &= ~WS_POPUP; // remove popup style
style |= WS_CHILDWINDOW; // add childwindow style
SetWindowLong(hwNative, GWL_STYLE, style);
... any other initialisation code (e.g enable/disable gl features) ...
ShowWindow(hwNative, SW_SHOW);
【讨论】:
谢谢,我也修复了链接。以上是关于MFC子窗口调用父窗口控件问题,望大神解救~~~的主要内容,如果未能解决你的问题,请参考以下文章
将窗口(glfwCreateWindow)作为子嵌入到 C++ MFC 父窗体