《Windows编程循序渐进》——对话框应用程序2

  • 通用字体对话

声明一个LogFont和一个COLORREF私有变量:

给Button添加代码如下:

运行后我们发现设置字体后并不会产生效果:

Why?OnPaint会在这里进行响应:

添加代码如下:

运行,选择字体:

运行结果如下:

我们回顾一下代码结构:

我起初在处下断点运行,发现这个代码执行过程会断下两次,都是在要出现MFCFont对话框时,所以推断这个是专门用来画出主对话框的。

当我们设置完字体,代码运行到这里时:

显示的效果是这样的:

即只画出了主对话框,并没有显示出客户区,后边通过设置客户区的字体、颜色、内容等操作,来绘画出客户区:

  • 通用颜色对话框

这就是通用颜色对话框:

设置界面如下:

给对话框类添加私有成员:

还有添加一个私有成员函数:

Button按钮响应的代码如下:

因为需要在主对话框内绘制颜色方框,所以需要在OnPaint下面添加绘制的相关代码:

我们最好还要在初始化的时候就绘制出来这个区域, 于是添加代码:

这里只是初始绘制一个区域,而并非添加一个空间,所以在资源视图中是看不到这个区域的:

但一运行就会有这样的一个区域:

这些代码的执行流程如下:

其中,这段代码:

表示,一旦我们点击了颜色对话框的OK按钮(cdlg.Dodal()==IDOK),就会把当前已经选择了的颜色进行设置和记录:

并进入到Invalidate(),从而调用函数。这个函数中的这些代码:

会帮我们使用刚才保存的颜色,并新建画刷来绘制一个区域(这个区域已经被初始化过):

下面我们要添加的功能是根据三个编辑框中的数值,来确定绘制区域所要绘制出的颜色。那么我们就要给编辑框添加事件

添加change事件:

并添加代码:

取消掉私有成员Byte r,g,b。而去给三个编辑框添加变量:

这里的代码思路是,当编辑框中的数值改变,通过UpdateDate,改变后的数据就会被载入到内存,也就是r/g/b在这一瞬间就被重新赋值并写入内存了。然后再调用Invalidate将图重新画出来(重新画出来的过程在主对话框的OnPaint方法中有)

运行效果如下:

 

posted @ 2016-07-16 12:11  _No.47  阅读(384)  评论(0编辑  收藏  举报