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_DECORATEDGLFW_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()”未定义。我尝试在#include 之后包含#include 但没有运气。我需要定义任何特定的宏吗? 我已经包含了#define GLFW_EXPOSE_NATIVE_WGL #define GLFW_EXPOSE_NATIVE_WIN32,现在看起来还可以 @LittleQuest 太好了。如果此答案对您有用,请单击复选标记按钮接受。 :当然。我确信这个方法会起作用,但 glfwGetWin32Window 返回 NULL。试图找出问题所在。【参考方案2】:

zett42 帖子中的链接已经失效,所以这里有一个更完整的 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子窗口调用父窗口控件问题,望大神解救~~~的主要内容,如果未能解决你的问题,请参考以下文章

在mfc中 为啥关闭子窗口连带把主窗口关闭了??

将窗口(glfwCreateWindow)作为子嵌入到 C++ MFC 父窗体

子窗口将消息转发给父窗口

MFC 如何向子窗口发送消息,子窗口是在tab control下的模态窗口?

如何在父窗口中运行子窗口

父窗口如何调用子窗口里的js方法