COpenGLControl类的两个实例之间的动态数据交换

时间:2013-08-28 17:34:41

标签: c++ opengl real-time dynamic-data multiple-instances

跟随我的another question假设我的班级中有两个公共成员数据用作模式:

bool WantToSetRectangle;
bool WantToDrawRectangle;  

我还有两个公共成员数据,这些数据是带有4个成员的向量,用于设置矩形和绘制矩形。

vector<int>ViewRectangle;
vector<int>RectangleToDraw; 

这是在每个导航任务(如缩放,平移等)之后运行的类OnDraw函数的实现。

void COpenGLControl::OnDraw(CDC *pDC)
{
// TODO: Camera controls
wglMakeCurrent(hdc,hrc);
glLoadIdentity();
gluLookAt(0,0,1,0,0,0,0,1,0);
glTranslatef(m_fPosX, m_fPosY, 0.0f);
glScalef(m_fZoom,m_fZoom,1.0);
if (WantToSetRectangle)
    setViewRectangle();
if (WantToDrawRectangle)
    DrawRectangleOnTopOfTexture();
wglMakeCurrent(NULL, NULL);
}  

现在我在COpenGLControl中创建了两个类CDialogEx的实例:

COpenGLControl m_oglWindow1;
COpenGLControl m_oglWindow2;  

my another question的第一张图片中看到m_oglWindow1是较大的窗口,而m_oglWindow2是较小的窗口。我按如下方式设置了两个窗口的模式:(这些模式在构造函数中设置为false

m_oglWindow1.WantToSetRectangle = true;
m_oglWindow2.WantToDrawRectangle = true;  

每次调用onDraw的{​​{1}}函数时,都会设置m_oglWindow1。这些数据应该动态传递给ViewRectangle RectangleToDraw,然后立即调用m_oglWindow2 OnDraw函数来在较小的窗口上绘制范围矩形始终处于m-oglWindow2模式 请记住,对于像Full Extent这样的任务,我可以在Fixed Zoom in的按钮点击处理程序中轻松写出来:

CDialogEx

但在void CMyOpenGLTestDlg::OnBnClickedButton4() { // TODO: Add your control notification handler code here m_oglWindow1.FixedZoomOut(); m_oglWindow2.RectangleToDraw = m_oglWindow1.ViewRectangle; m_oglWindow2.OnDraw(NULL); } panzoom in to the point等使用zoom out of the pointmouse-event handlers实施的其他任务中,我需要某种依据两个类实例之间的时间数据交换:

COpenGLControl

1 个答案:

答案 0 :(得分:0)

每个控件都可以通知父对话框需要更新另一个控件。

GetParent()->PostMessage(UWM_UPDATE2, 0, 0);

用户定义的消息是:

#define UWM_UPDATE1 (WM_APP + 1)
#define UWM_UPDATE2 (WM_APP + 2)

如果将ON_MESSAGE放入其消息映射中,该对话框可以处理这些消息。

ON_MESSAGE(UWM_UPDATE2, OnUpdate2)

LRESULT CMyOpenGLTestDlg::OnUpdate2(WPARAM, LPARAM)
{


}