[vtkusers] RenderWindowInteractor and Win32
Dr. Peter Böttcher
p.boettcher at anat.vetmed.uni-muenchen.de
Tue Feb 20 17:31:53 EST 2001
Dear VTK-Users!
I would like to implement vtkWin32RenderWindowInteractor in a
MFC-Application. Everything works good except the keystrokes. Any key
operation gives only a bell sound and no message is passed to the
MainDialog (::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)).
Any idea?
Thanks Peter.
The following is a abstract of my code:
BOOL CVtkTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
vtkConeSource* cone = vtkConeSource::New();
vtkPolyDataMapper* mapper = vtkPolyDataMapper::New();
mapper->SetInput(cone->GetOutput());
vtkActor* actor = vtkActor::New();
actor->SetMapper(mapper);
this->Renderer->AddActor(actor);
this->RenderWindow->SetParentId(this->m_hWnd);
this->RenderWindow->SetWindowId(this->m_hWnd);
this->RenderWindow->WindowInitialize();
this->RenderWindow->AddRenderer(Renderer);
this->Interactor->SetRenderWindow(RenderWindow);
return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll
den Fokus erhalten
}
void CVtkTestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // Gerätekontext für Zeichnen
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Symbol in Client-Rechteck zentrieren
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Symbol zeichnen
dc.DrawIcon(x, y, m_hIcon);
}
else
{
if (!this->Interactor->GetInitialized())
{
this->Interactor->SetRenderWindow(this->RenderWindow);
WNDPROC OldProc = (WNDPROC)GetWindowLong(this->m_hWnd,GWL_WNDPROC);
this->Interactor->Initialize();
SetWindowLong(this->m_hWnd,GWL_WNDPROC,(LONG)OldProc);
}
this->RenderWindow->Render();
CDialog::OnPaint();
}
}
LRESULT CVtkTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM
lParam)
{
switch (message)
{
//case WM_PAINT:
case WM_CHAR:
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_MBUTTONDOWN:
case WM_MBUTTONUP:
case WM_RBUTTONDOWN:
case WM_RBUTTONUP:
case WM_MOUSEMOVE:
case WM_TIMER:
if (this->Interactor->GetInitialized())
{
return vtkHandleMessage2(this->m_hWnd, message, wParam, lParam,
this->Interactor);
}
break;
}
return CDialog::WindowProc(message, wParam, lParam);
}
More information about the vtkusers
mailing list