在我的项目中,我已经有一个用C ++ \ CLI包装的本机C ++库,然后在我的WPF应用程序中引用。在我的应用程序中,我显示了一个水色Winforms面板:
<WindowsFormsHost x:Name="openGLWF">
<winForms:Panel x:Name="openGLPanel1"
Dock="Fill"
BackColor="Aqua" Paint="Panel_Paint" />
</WindowsFormsHost>
我要做的是让面板用于从我的本机库中绘制我的OpenGL内容。我一直在搜索那些暗示可行的书籍,但我发现的“解决方案”并不彻底,而且实施起来太模糊。
注意: 用户 gbjbaanb 标记了 5年前回答的可能重复后,我的问题与他引用的“原始”处理.NET不同4.0和Winforms,我正在处理.NET 4.5.2和WPF,里面有Winforms面板。
答案 0 :(得分:0)
工作流程与每个Windows控件或窗口基本相同。唯一的区别是,一个人不必构造hwnd,因为这已经由WinForms控件完成了。因此,在Windows窗体控件上创建OpenGL上下文的示例可能如下所示(C ++ / CLI):
public void InitGL(System::Windows::Forms::UserControl^ userControl)
{
HWND hwnd = (HWND)userControl->Handle.ToPointer();
HDC hdc = GetDC(hwnd);
//From now on everything is similar to initializing a context on any other hdc
PIXELFORMATDESCRIPTOR pfd;
ZeroMemory(&pfd, sizeof(pfd));
pfd.nSize = sizeof(pfd);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 32;
pfd.cDepthBits = 24;
int iFormat = ChoosePixelFormat(hdc, &pfd);
SetPixelFormat(hdc, iFormat, &pfd);
HGLRC hrc = wglCreateContext(hdc);
wglMakeCurrent(hdc, hrc);
//From now on we have a valid OpenGL context
//Do other stuff like glewInit etc. now
}
请注意,此代码与here类似,已在重复的答案建议中进行了链接。