我正在尝试使用 PCL Visializer,因为它位于 MFC CStatic 控件内:
pcl::visualization::PCLVisualizer::Ptr simpleVis(pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud , HWND hParent_display )
{
// --------------------------------------------
// -----Open 3D viewer and add point cloud-----
// --------------------------------------------
pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
if (hParent_display) {
SetParent((HWND)viewer->getRenderWindow()->GetGenericWindowId(), hParent_display);
viewer->setWindowBorders(false);
viewer->getRenderWindow()->SetParentId(hParent_display);
//viewer->setPosition(-10, -50); // Hacky way to hide the window borders
viewer->setBackgroundColor(0, 0, 0);
viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
viewer->addCoordinateSystem(1.0);
viewer->initCameraParameters();
}
return (viewer);
}
我在MFC中调用上面的函数
OnInitDialog()
,如下所示:
viewer = simpleVis(basic_cloud_ptr , GetDlgItem(IDC_STATIC_3D_VIWER)->m_hWnd);
这就是结果:
如您所见,子窗口标题栏是可见的,用户可以使用鼠标移动它。
viewer->setWindowBorders(false);
不起作用。
使用 viewer->setPosition(-10, -50);
隐藏标题栏,但我不确定这是否是实现该目的的正确方法。
有没有更好的方法来集成展示台?
我不确定你的
viewer->setWindowBorders(false);
是做什么的。
我会使用普通的 Win32 API 来删除标题栏。
请注意,修改样式后需要重新绘制该窗框:
SetWindowPos(hwnd,0,0,0,0,0,SWP_DRAWFRAME|SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);