没有合适的资源?快使用搜索试试~ 我知道了~
首页基于MFC的OpenGL绘图
资源详情
资源评论
资源推荐

基于
的
绘图
本文更新版本请点击
置顶 《基于
的
编程》系列文章
一、简介
是通过设备句柄( 以下简称)来绘图,而 则需要绘制
环境(,以下简称)。每一个 命令需要传给它一个 ,但与
不同, 使用当前绘制环境。一旦在一个线程中指定 了一个当前 ,在此线
程中其后所有的 命令都使用相同的当前 。虽然在单一窗口中可以使用多个 ,
但在单一线程中只有一个当前 。下面我将首先产生一个 并使之成为当前 ,
这将分为三个步骤:设置窗口像素格式;产生 ;设置为当前 。
二、 中的 基本框架
、首先创建工程
用 ! 产生一个 "#" 项目,其他默认即可。
$、将此工程所需的 文件和库加入到工程中
在工程菜单中,选择%&'下的()项。单击*标签,选择!'目录,
在 +,-+!.&') 的编辑框中输入'/$0'+'&/$0'+'&0'+
'!&0'+(注意,输入双引号中的内容,各个库用空格分开;否则会出现链接错误),选
择1结束。然后打开文件)!203,加入下列头文件:
4'&5'6'037
4'&5'6'&037
/、改写 8! 函数并给视图类添加成员函数和成员变量

需要窗口加上 (98:";(创建父窗口使用的 <) 风格,用于
重绘时裁剪子窗口所覆盖的区域)和 (98(%;((创建子窗口使用的 <) 风格,
用于重绘时剪裁其他子窗口所覆盖的区域)风格。把 8! 改写成如 下所示:
%=><??8!<"@"(@A@B)
C
--@?2.3<'!))).')3+.=2.
--3"@"(@A@)
)0).'DE(98:";D(98(%;(F
&><??8!<)F
G
产生一个 的第一步是定义窗口的像素格式。像素格式决定窗口着所显示的图形在内存
中是如何表示的。由像素格式控制的参数包括:颜色深度、缓冲模式和所支持的绘画接口。在
下面将有对这些参数的设置。我们先在 =>< 的类中添加一个保护型的成员函
数 %(<8'=!:3(用鼠标右键添加)和保护型的成员变量:
=98'F并编辑其中的代码如下:
%=><??(<8'=!:3
C--定义窗口的像素格式
8#"@"(8@')E
C
) 28#"@"(8@H
H
899@9;D89(A88@98";D
89A%"%A"D89(A88@9H
89@I8"9%H
$JH
KHKHKHKHKHKH
KH
KH

KH
KHKHKHKH
/$H
KH
KH
89;98;"H
KH
KHKHK
GF
3)L7=98'E3)8'=!3HB')F
23)L7=98'EEK
C
3)L7=98'EF
2)+8'=!3H3)L
7=98'H) 28#"@"(8@HB')EEK
C
&("F
G
G
2(8'=!3H3)L7=98'HB')EE("
C
&("F
G
&@A"F
J、用 '!)) ! 添加 9"@" 的消息处理函数 !
至此, 工程的基本框架就建好了。但如果你现在运行此工程,则它与一般的
程序看起来没有什么两样。

M、代码解释
现在我们可以看一看 )+L8'=! 提供有哪几种像素格式,并对代码进行一些
解释:
8#"@"(8@ 包括了定义像素格式的全部信息。
'!) 定义了与像素格式兼容的设备和接口。
通常的 发行版本并不包括所有的标志N!。<'!) 能接收以下标志:
899@9;使之能在窗口或者其他设备窗口画图;
899@9%@8使之能在内存中的位图画图;
89(A88@9使之能调用 函数(注:如果指定了 89A%"%A",
这个选项将无效);
89(A88@9使之能调用 函数;
89";"9@假如这种象素格式由 <) 函数库或由第三方硬件设
备驱动程序支持,则需指定这一项;
89;""98"@@"告诉缓冲区是否需要调色板,本程序假设颜色是使用 $J 或 /$ 位
色,并且不会覆盖调色板;
89;""9(I(@"98"@@"这个标志指明缓冲区是否把系统调色板当作它自身调色
板的一部分;
89A%"%A"指明使用了双缓冲区(注: 不能在使用了双缓冲区的窗口中
画图);
89(@""指明左、右缓冲区是否按立体图像来组织。
8'@. 定义显示颜色的方法。89@I8"9% 意味着每一位+组代表着红、绿、
蓝各分量的值。89@I8"9;"#意味着每一位组代表着在彩色查找表中的索引值。
本例都是采用了 89@I8"9% 方式。
● '%) 定义了指定一个颜色的位数。对 % 来说,位数是在颜色中红、绿、蓝
各分量所占的位数。对颜色的索引值来说,指的是表中的颜色数。
剩余15页未读,继续阅读














安全验证
文档复制为VIP权益,开通VIP直接复制

评论2