简短的版本-
我有一个OpenGL窗口,它是使用WinApi调用创建的。我更愿意保持这种方式,而不是将OpenGL包装成VCL形式。
为了提供一些首选菜单和文件对话框,我使用了VCL表单和典型的对话框(TOpenDialog、TSaveDialog)。
我想知道的是,如何让这些窗体和对话框将我的OpenGL窗口视为它们的所有者?
我曾试图将窗口句柄传递给表单,但我确信我这样做不恰当,因为这没有任何效果。
Form1 := TForm1.Create(nil);
Form1.ParentWindow := hwnd; //handle to OpenGL Window
VCL表单需要什么才能将本机窗口视为其所有者?
长期版本-
我的应用程序有两种模式。独立模式,其中它自己运行。其次,还有一种插件模式
在主机应用程序的进程空间中运行
.
在独立模式下,我对VCL窗体和对话框没有任何问题。尽管它们的所有权是不确定的,但它不会以任何方式影响可用性。
当处于插件模式时,我发现主机应用程序将
取得控制权
我的VCL表格,以及Open&保存对话框。
因此,当在主机的进程空间中运行时,我的VCL表单呈现得非常奇怪。我试图手动修复它们,但它们不会对样式更改做出响应。
编辑-对话框详细信息
我主要关心的是VCL表单的呈现,但如果对话框有用的话,这里有一些关于对话框的更多细节。
我正在执行这样的对话框:
if FileOpenDialog.Execute(hwnd) then
Begin
//open up file
End;
而且没有效果。对话框的作用与我没有传递句柄的情况相同。请记住,我使用的是Delphi 2006,而这个版本的Delphi仍然使用Windows XP中引入的旧文件对话框。
最后,当作为插件运行时,我的“打开/保存”对话框将出现
就好像它们属于主机应用程序一样
在任务栏上。因此,主机有一个任务栏选项卡。我的应用程序也有它自己的选项卡。当我执行它时,我的打开对话框会附加在主机的选项卡上。
图像
独立模式下的首选项菜单:
首选项菜单作为主机中的插件:
如果我能简单地改变黑色文本的颜色,那就足够了,但我似乎做不到。