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类我还需要在想一下那个不理解
不过我现在可以做不存储的那些了
而且可以对话框里有对话框