求助: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'。
展开
 我来答
风轻云度
2008-05-27 · TA获得超过1423个赞
知道大有可为答主
回答量:1835
采纳率:0%
帮助的人:0
展开全部
1、获得IDD_GAMUT的窗口指针 pDlg
2、发送消息或者调用pDlg的成员函数来设置那两个变量
3、调用pDlg->Invalidate()让OnPain重画对应的变量。

补充:

你调用的方式不必这样,只需向CGumat发个重绘的消息,得到它的窗口句柄,然后PostMessage( hWnd, WM_PAINT,0,0);

我说的方式也可以这样,你在启动画图的对话框中启动一个定时器,在其中调用Invalidate这样也可以。
百度网友660f3e6
2008-05-27 · TA获得超过666个赞
知道小有建树答主
回答量:198
采纳率:0%
帮助的人:284万
展开全部
你说坐标值已经传过去了

假设m_Dlg为IDD_GAMUT的变量
那么直接m_Dlg.OnPaint();就可以了

*对不起,忘了受保护的成员函数了
那就发消息吧:
m_Dlg.SendMessage(WM_PAINT, NULL, NULL);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式