📄 tutorial_01.htm
字号:
<td width="100%"><img src="Tutorial_01_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td background="Tutorial_01_files/l.gif"><img src="Tutorial_01_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">如果无法删除着色描述表的话,将弹出错误消息告知我们RC未能成功删除。然后hRC被设为NULL。</td>
<td background="Tutorial_01_files/r.gif"><img src="Tutorial_01_files/r.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_01_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_01_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/br.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<font color="#aaffaa" size="3">
<pre> MessageBox(NULL,"释放RC失败。","关闭错误",MB_OK | MB_ICONINFORMATION);
}
hRC=NULL; <font color="#ffffaa">// 将RC设为 NULL</font>
}
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_01_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_01_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td background="Tutorial_01_files/l.gif"><img src="Tutorial_01_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">现在我们查看是否存在设备描述表,如果有尝试释放它。如果不能释放设备描述表将弹出错误消息,然后hDC设为NULL。</td>
<td background="Tutorial_01_files/r.gif"><img src="Tutorial_01_files/r.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_01_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_01_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/br.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<font color="#aaffaa" size="3">
</font><pre><font color="#aaffaa" size="3"> if (hDC && !ReleaseDC(hWnd,hDC)) <font color="#ffffaa">// 我们能否释放 DC?</font>
{
MessageBox(NULL,"释放DC失败。","关闭错误",MB_OK | MB_ICONINFORMATION);
hDC=NULL; <font color="#ffffaa">// 将 DC 设为 NULL</font>
}
</font></pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_01_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_01_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td background="Tutorial_01_files/l.gif"><img src="Tutorial_01_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">现在我们来查看是否存在窗口句柄,我们调用 DestroyWindow( hWnd )来尝试销毁窗口。如果不能的话弹出错误窗口,然后hWnd被设为NULL。</td>
<td background="Tutorial_01_files/r.gif"><img src="Tutorial_01_files/r.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_01_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_01_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/br.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<font color="#aaffaa" size="3">
<pre> if (hWnd && !DestroyWindow(hWnd)) <font color="#ffffaa">// 能否销毁窗口?</font>
{
MessageBox(NULL,"释放窗口句柄失败。","关闭错误",MB_OK | MB_ICONINFORMATION);
hWnd=NULL; <font color="#ffffaa"> // 将 hWnd 设为 NULL</font>
}
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_01_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_01_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td background="Tutorial_01_files/l.gif"><img src="Tutorial_01_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">最后要做的事是注销我们的窗口类。这允许我们正常销毁窗口,接着在打开其他窗口时,不会收到诸如"Windows
Class already registered"(窗口类已注册)的错误消息。</td>
<td background="Tutorial_01_files/r.gif"><img src="Tutorial_01_files/r.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_01_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_01_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/br.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<font color="#aaffaa" size="3">
<pre> if (!UnregisterClass("OpenG",hInstance)) <font color="#ffffaa">// 能否注销类?</font>
{
MessageBox(NULL,"不能注销窗口类。","关闭错误",MB_OK | MB_ICONINFORMATION);
hInstance=NULL; <font color="#ffffaa"> // 将 hInstance 设为 NULL</font>
}
}
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_01_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_01_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td background="Tutorial_01_files/l.gif"><img src="Tutorial_01_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">接
下来的代码段创建我们的OpenGL窗口。我花了很多时间来做决定是否创建固定的全屏模式这样不需要许多额外的代码,还是创建一个容易定制的友好的窗口但
需要更多的代码。当然最后我选择了后者。我经常在EMail中收到诸如此类的问题:怎样创建窗口而不使用全屏幕?怎样改变窗口的标题栏?怎样改变窗口的分
辨率或pixel format(象素格式)?以下的代码完成了所有这一切!尽管最好要学学材质,这会让您写自己的OpenGL程序变得容易的多! <p>正如您所见,此过程返回布尔变量(TRUE 或 FALSE)。他还带有5个参数:窗口的标题栏,窗口的宽度,窗口的高度,色彩位数(16/24/32),和全屏标志(TRUE
--全屏模式, FALSE--窗口模式 )。返回的布尔值告诉我们窗口是否成功创建。</p></td>
<td background="Tutorial_01_files/r.gif"><img src="Tutorial_01_files/r.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_01_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_01_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/br.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<font color="#aaffaa" size="3">
<pre>BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
{
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_01_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_01_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td background="Tutorial_01_files/l.gif"><img src="Tutorial_01_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">当我们要求Windows为我们寻找相匹配的象素格式时,Windows寻找结束后将模式值保存在变量PixelFormat中。</td>
<td background="Tutorial_01_files/r.gif"><img src="Tutorial_01_files/r.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_01_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_01_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/br.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<font color="#aaffaa" size="3">
<pre> GLuint PixelFormat; <font color="#ffffaa">// 保存查找匹配的结果</font>
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_01_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_01_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td background="Tutorial_01_files/l.gif"><img src="Tutorial_01_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">wc用来保存我们的窗口类的结构。窗口类结构中保存着我们的窗口信息。通过改变类的不同字段我们可以改变窗口的外观和行为。每个窗口都属于一个窗口类。当您创建窗口时,您必须为窗口注册类。</td>
<td background="Tutorial_01_files/r.gif"><img src="Tutorial_01_files/r.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_01_files/bl.gif" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_01_files/bc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/br.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<font color="#aaffaa" size="3">
<pre> WNDCLASS wc; <font color="#ffffaa">// 窗口类结构</font>
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img src="Tutorial_01_files/tl.jpg" height="28" width="28"></td>
<td width="100%"><img src="Tutorial_01_files/tc.gif" height="28" width="100%"></td>
<td><img src="Tutorial_01_files/tr.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td background="Tutorial_01_files/l.gif"><img src="Tutorial_01_files/l.gif" height="28" width="28"></td>
<td valign="top" width="100%">dwExStyle和dwStyle存放扩展和通常的窗口风格信息。我使用变量来存放风格的目的是为了能够根据我需要创建的窗口类型(是全屏幕下的弹出窗口还是窗口模式下的带边框的普通窗口);来改变窗口的风格。</td>
<td background="Tutorial_01_files/r.gif"><img src="Tutorial_01_files/r.gif" height="28" width="28"></td>
</tr>
</tbody>
</table>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -