OpenGL вид на форму C # - PullRequest
       16

OpenGL вид на форму C #

2 голосов
/ 21 апреля 2011

Как отобразить перенасыщенное окно в 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 Ответ

1 голос
/ 22 апреля 2011

Похоже, вы размещаете объект 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

...