MFC 几个知识点 二

 

 

Dialog1这个对话框类 我们在类向导 成员变量里 将Edit这个空间与m_nLineWidth绑定了

就是与这个控件绑定了

 

它的ID是

这样 就假如你在那个框里输入5  那DiaLog1类里的m_nLineWidth就变成5了

就是一种可视化控件 与看不见的变量的绑定 

这里会自动出现IDC_EDIT1与m_nLineWidth的绑定

并且 类自动生成了 这个成员变量

 

还有一点 你看到了 吗

就是CYLineDlg dlg了dlg我们定义的一个DIADLG类 对象

就他会有DoModal()这个成员函数

它只有两个返回值对应对话框最下面点确定还是取消

 

 

 

对话框与窗口view类的大关系传递已经做好了

接下来弄对话框类 与对话框类里的空间的数据传递

 

这是在DIALOG1类里的Radio1通过COMMAND消息生成的映射函数

 

IDC_RADIO1就是最上面那个李

可能有同学函数 那这些函数什么时候会执行啊

从视图上看是在 我们点“李”“佳”的时候

从程序代码上看的话是在

 

 

是在中间空出的那一行

因为if(dlg.DoModal()==IDOK)只有在你

点这个对话框的确定时才会执行

也就是说其他时间 他一直在等你 点那些控件

去改变东西

我们点那些控件触发On控件()函数数据改变好了

那假如我们想看预览图

预览图是在这个地方看

 

那需要系统给这个窗口发送一个WM_PAINT消息

但我们只发这个消息还不行

还有指定一个触发这个消息 生成的函数

即OnPaint()函数

它是在类向导里 的DIALOG1类 的双击

WM_PAINT消息 添加Command就会自动生成

OnPAINT()函数

如下图

 

 

 

然后在这里根据DIALOG类的变量调用GDI函数绘制就可以了

但是一般情况下

只有窗口有无效区域时才会发送WM_PAINT()消息触发OnPaint函数

但是我们想就是改了某个控件导致比如m_nLineWidth值改变了

m_nLineStyle 我们想在预览图看到效果 即想点了 控件

预览图就改变

那么很关键的就是在On控件名字()函数的结尾

调用一个函数

Invalidate() 它的英文意思是使区域无效

windowsAPI我们知道窗口某个区域无效 系统就会给窗口发送WM_PAINT消息 让该窗口重绘

那么自然而然就会调用OnPaint()函数了

 

那么这时我们根据 On控件名字()改变的m_nLineWidth或者m_nLineStyle;

去调用GDI函数就可以了

怎么说相当于 就是跟绘图有关的m_nLIneWidth 

m_nLineStyle 或者可能还有Radius Brush之类的数据

有三份

第一份 在Line或者Rect类的成员变量

第二份在DIALOG对话框里 

第三分在View类里

 

他们的关系是这样的的

一开始View类里会初始化自己的那些数据

如果不同过对话框改变的话

直接画 就会执行View类的OnDraw函数

这个是自动生成的函数

然后

实例化一个Line或者Rect对象

然后将View类的那一份数据赋值给Line里的那一份数据

然后Line对象根据赋值过后的数据去绘制

 

或者我们调用对话框

一开始View类里的那一份数据先传给DIADLG类

然后通过对DIADLG控件的点击

改变DIADLG类里的那一份数据 然后传给View类

在这个过程中 多余的就是

1 预览的实现时通过WM_paint COMMAND

去生成DIALOG类的OnPaint()函数

2 或者将某个控件与某个变量绑定

感觉也没别的了

关于存储的Doc类我还需要在想一下那个不理解 

不过我现在可以做不存储的那些了

而且可以对话框里有对话框

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值