读书人

MFC中在对话框下把点动态显示的有关问

发布时间: 2013-03-04 17:22:12 作者: rapoo

MFC中在对话框上把点动态显示的问题

右下角的浮动框里嵌入了一个对话框,背景是一张地图图片。现在要根据坐标(x,y)的值在对话框上动态的以点显示轨迹。(X,Y)的坐标是在文件MainFrm.cpp文件中的CMainFrame类的ShowAux()方法中得到的,定时器每隔1秒就会(x,y)值是不断的变化的,也就是说点的位置是变动的,请问如何实现这样的功能?
如图所示,通过对话框类的OnPaint()方法可以实现在对话框上画线的效果
MFC中在对话框下把点动态显示的有关问题


void CPaneDialog::OnPaint()
{
CPaintDC dc(this);
dc.MoveTo(0,0);
dc.LineTo(100.123,340.8976);
//dc.LineTo(x,y); //想实现的效果,可以画线至(x,y)坐标

}

现在的问题是:
1、如何将CMainFrame类的ShowAux()方法中的(x,y)的值以合适的方式传到void CPaneDialog::OnPaint()方法中??

实践不通的方法有:
1、在对话框类中重写带两个参数的OnPaint(float x,float y)方法测试证明没有任何效果
void CPaneDialog::OnPaint(float x,float y)
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用CDialog::OnPaint()
dc.MoveTo(0,0);
dc.LineTo(x,y);

CDialog::OnPaint();
//CDialog::OnPaint(float x,float y);
}
2、想着是不是可以通过设置全局变量的方法在ShowAux()方法中将坐标x,y的值存入其中,然后在OnPaint()方法中直接调用?不清楚该如何来写 动态显示 MFC界面 Dialog动态画线 Dialog动态画点
[解决办法]
class CMainFrame;// 此处只引用,在cpp中才把加#include "MainFrm.h",这样就不会出现相互嵌套
class CPaneDialog
{
CMainFrame *m_pFrame;
}

LRESULT CMainFrame::OnDockingPaneNotify(WPARAM wParam, LPARAM lParam)
{
if (wParam == XTP_DPN_SHOWWINDOW)
{
// get a pointer to the docking pane being shown.
CXTPDockingPane* pPane= (CXTPDockingPane*)lParam;
if (!pPane->IsValid())
{
switch (pPane->GetID())
{

case ID_VIEW_POSITIONVIEW:
{
if (!::IsWindow(m_dlgPane.m_hWnd))
{

m_dlgPane.Create(IDD_DIALOG2, this);
m_dlgPane.m_pFrame = this;//这里把CMainFrame传过去,所以
}
pPane->Attach(&m_dlgPane);
break;
}
}


}

return TRUE;
}
return FALSE;
}
[解决办法]
在子窗体内创建公有变量:x1,y1。

在父窗体获得(x,y)坐标的同时,拷贝一份给子窗体的x1、y1。

这样,子窗体绘图时就不需要访问父窗体的成员了。

读书人网 >VC/MFC

热点推荐