[OpenGL + Windows Forms]

1

Witam,
tworze aplikacje z wykorzystaniem Win Forms, w której na panelu wyświetlam wizualizację pewnego przedmiotu utworzoną w OpenGL. Chciałbym móc manipulować położeniem przedmiotu i kamery za pomocą klawiatury i myszy. W tej chwili trzeba klikać na przyciskach, które utworzyłem, ale chciałbym się ich pozbyć. Podejrzewam, że ze obraz z OpenGl jest tworzony "nad panelem" zwykłe eventy nie działają.
Czy zna ktoś jakiś dobry sposób na przechwytywanie zdarzeń myszy i klawiatury w takiej sytuacji?

Jako podstawę tworzonej aplikacji przyjąlem to: http://www.codeproject.com/KB/miscctrl/OpenGLViewWinForms.aspx
Z góry dziękuję za pomoc.

0

z tego co widzę użyta jest klasa NativeWindow, która nie ma gotowych żadnych eventów. Musisz więc dodać do klasy okna funkcję

protected: virtual void WndProc(Message %m) override
{
            switch (m.Msg)
            {
              // tutaj obsługa różnych komunikatów
            }
            NativeWindow::WndProc(m);
}

Miłej zabawy z komunikatami WinAPI.

0

Napisałem coś takiego:

protected: virtual void WndProc(System::Message %m) override
{
switch(m.Msg)
{
case WM_NCCREATE:
MessageBox::Show(m.ToString());
break;
case WM_KEYDOWN:
MessageBox::Show("kEY");
break;
case WM_LBUTTONUP:
MessageBox::Show("O to chodzi");
break;
case WM_PAINT:
MessageBox::Show("Paint");
break;
case WM_SIZE:
MessageBox::Show("Size");
break;
case WM_MOUSEMOVE:
MessageBox::Show("Move");

	  }
	  Form::WndProc(m);

}

Problem w tym, że reaguje to tylko na komunikaty WM_SIZE, WM_NCCREATE, WM_PAINT ale na mysz i klawiaturę już nie. Co robię nie tak?

0

Sorry, że odpowiadam trochę sam sobie ale:
jeśli zmienię na NativeWindow::WndProc(m); to VSC++ zwraca mi error z komunikatem candidate function not accesible.

To mój pierwszy kontakt z WinApi :/

0

i ta ostatnia linijka wskazuje na źródło problemu: ma być NativeWindow, tylko że WndProc ma się znaleźć w klasie COpenGL, nie w formie.

0

Wielkie dzięki, działa tak jak chciałem :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1