OpenGL вид на форму C#
Как отобразить перенасыщенное окно в Windows Form?
glutCreateWindow ("Пример") создать другую форму,
glutCreateSubWindow (hwnd, 0, 0, 100, 100), где hwnd является дескриптором моей основной формы окна в C#, я получаю исключение AccessViolation.
Программа Glut находится в C++ DLL. Мое приложение находится на C# WPF. Мне нужно отобразить перенасыщение в моей форме C#
Код C++:
extern "C"
{
__declspec(dllexport) int InitGlut(int hwnd, int top, int left, int width, int height)
{
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(top,left);
glutInitWindowSize(320,320);
//glutCreateWindow("Example");
glutCreateSubWindow(hwnd, top, left, width, height);
glutDisplayFunc(renderScene);
glutMainLoop();
return 0;
}
}
Код C#:
const string pathToDll = "../../../Release/MyDLL.dll";
[DllImport(pathToDll)]
public static extern int InitGlut(IntPtr hwnd, int top, int left, int width, int height);
private void Window_Loaded(object sender, RoutedEventArgs e)
{
IntPtr hwnd = new WindowInteropHelper(Application.Current.MainWindow).Handle;
InitGlut(hwnd, 0, 0, 100, 100);
}
1 ответ
Решение
Похоже, вы размещаете объект Win32 в форме WPF. Да, это требует обходных путей.
Вы видели руководство по взаимодействию WPF и Win32 на MSDN?
http://msdn.microsoft.com/en-us/library/ms742522.aspx
Вам также нужно проверить класс HwndHost:
http://msdn.microsoft.com/en-us/library/system.windows.interop.hwndhost.aspx