首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2013-03-04 
MFC中在对话框上把点动态显示的问题 右下角的浮动框里嵌入了一个对话框,背景是一张地图图片。现在要根据坐

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。

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

热点排行