
求助:MFC主窗口向子窗口传递数值并自动更新
在IDD_MO_DLG窗口(程序主窗口)中有一个Button和两个EditBox,EditBox分别关联Float型变量:m_x、m_y。在主窗口中每按一下Button就...
在IDD_MO_DLG窗口(程序主窗口)中有一个Button和两个EditBox,EditBox分别关联Float型变量:m_x、m_y。
在主窗口中每按一下Button就产生两个新的值CIEx,CIEy并赋给m_x、m_y。
主窗口菜单项调用非模态对话框IDD_GAMUT,在IDD_GAMUT中使用CIEx,CIEy绘制坐标图:
在Gumat.cpp文件开始位置添加变量声明:extern float CIEx,CIEy;
然后给IDD_GUMAT窗口添加了WM_PAINT消息响应,然后在OnPaint函数中添加了如下代码:
// TODO: Add your message handler code here
//假设点(30,400)为原点,X轴355个像素点为一个坐标单位,Y轴345个像素点为一个坐标单位,
POINT pt;
pt.x=30 ;
pt.y=400;
CRect rect1(pt.x+CIEx*355-2,pt.y -CIEy*345-2,pt.x +CIEx*355+2,pt.y-CIEy*345+2);//以坐标点为中点建rect.
dc.Draw3dRect(rect1,0x000000,0x000000);//填充rect
按以上方法可以把数据传到IDD_GAMUT窗口,而且打开IDD_GAMUT窗口也可以显示打开IDD_GAMUT前的CIEx,CIEy值画的坐标。
现在,如何实现不关闭IDD_GAMUT的情况下,点击主窗口的Button,让IDD_GAMUT自动更新CIEx、CIEy值并重新绘制坐标点呢?
最好能给出详细的解决操作步骤和代码。谢谢大家!
现在最主要的是怎么让GUMAT窗口根据主窗口产生的值自动更新坐标图呢?
嗯,谢谢两位的回答。
1楼所说三个步骤都该在程序的什么位置添加什么代码呢?可不可以详说一下?非常感谢!
2楼,我不知道我下面的做法对不对,请请教:
在主窗口的Button控件内加入这两句代码后
CGumat Gumat;
Gumat.OnPaint();
第二句出现error C2248: 'OnPaint' : cannot access protected member declared in class 'CGumat'。 展开
在主窗口中每按一下Button就产生两个新的值CIEx,CIEy并赋给m_x、m_y。
主窗口菜单项调用非模态对话框IDD_GAMUT,在IDD_GAMUT中使用CIEx,CIEy绘制坐标图:
在Gumat.cpp文件开始位置添加变量声明:extern float CIEx,CIEy;
然后给IDD_GUMAT窗口添加了WM_PAINT消息响应,然后在OnPaint函数中添加了如下代码:
// TODO: Add your message handler code here
//假设点(30,400)为原点,X轴355个像素点为一个坐标单位,Y轴345个像素点为一个坐标单位,
POINT pt;
pt.x=30 ;
pt.y=400;
CRect rect1(pt.x+CIEx*355-2,pt.y -CIEy*345-2,pt.x +CIEx*355+2,pt.y-CIEy*345+2);//以坐标点为中点建rect.
dc.Draw3dRect(rect1,0x000000,0x000000);//填充rect
按以上方法可以把数据传到IDD_GAMUT窗口,而且打开IDD_GAMUT窗口也可以显示打开IDD_GAMUT前的CIEx,CIEy值画的坐标。
现在,如何实现不关闭IDD_GAMUT的情况下,点击主窗口的Button,让IDD_GAMUT自动更新CIEx、CIEy值并重新绘制坐标点呢?
最好能给出详细的解决操作步骤和代码。谢谢大家!
现在最主要的是怎么让GUMAT窗口根据主窗口产生的值自动更新坐标图呢?
嗯,谢谢两位的回答。
1楼所说三个步骤都该在程序的什么位置添加什么代码呢?可不可以详说一下?非常感谢!
2楼,我不知道我下面的做法对不对,请请教:
在主窗口的Button控件内加入这两句代码后
CGumat Gumat;
Gumat.OnPaint();
第二句出现error C2248: 'OnPaint' : cannot access protected member declared in class 'CGumat'。 展开
2个回答
展开全部
1、获得IDD_GAMUT的窗口指针 pDlg
2、发送消息或者调用pDlg的成员函数来设置那两个变量
3、调用pDlg->Invalidate()让OnPain重画对应的变量。
补充:
你调用的方式不必这样,只需向CGumat发个重绘的消息,得到它的窗口句柄,然后PostMessage( hWnd, WM_PAINT,0,0);
我说的方式也可以这样,你在启动画图的对话框中启动一个定时器,在其中调用Invalidate这样也可以。
2、发送消息或者调用pDlg的成员函数来设置那两个变量
3、调用pDlg->Invalidate()让OnPain重画对应的变量。
补充:
你调用的方式不必这样,只需向CGumat发个重绘的消息,得到它的窗口句柄,然后PostMessage( hWnd, WM_PAINT,0,0);
我说的方式也可以这样,你在启动画图的对话框中启动一个定时器,在其中调用Invalidate这样也可以。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询