⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 win32编程基础知识.htm

📁 win32编程宝典,很好的文档哦,真是太复杂了,呵呵呵呵呵呵呵
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<TD width="77%">窗口有单线边框 </TD></TR>
<TR>
<TD width="23%">WS_CAPTION</TD>
<TD width="77%">窗口有标题栏 </TD></TR>
<TR>
<TD width="23%">WS_CHILD</TD>
<TD width="77%">该窗口为子窗口,不能与WS_POPUP同时使用 </TD></TR>
<TR>
<TD width="23%">WS_DISABLED </TD>
<TD width="77%">该窗口为无效,即对用户操作不产生任何反应</TD></TR>
<TR>
<TD width="23%">WS_HSCROLL</TD>
<TD width="77%">窗口有水平滚动条 </TD></TR>
<TR>
<TD width="23%">WS_ICONIC</TD>
<TD width="77%">窗口初始化为最小化 </TD></TR>
<TR>
<TD width="23%">WS_MAXIMIZE </TD>
<TD width="77%">窗口初始化为最大化 </TD></TR>
<TR>
<TD width="23%">WS_MAXIMIZEBOX </TD>
<TD width="77%">窗口有最大化按钮 </TD></TR>
<TR>
<TD width="23%">WS_MINIMIZE</TD>
<TD width="77%">与WS_MAXIMIZE一样 </TD></TR>
<TR>
<TD width="23%">WS_MINIMIZEBOX</TD>
<TD width="77%">窗口有最小化按钮 </TD></TR>
<TR>
<TD width="23%">WS_SIZEBOX</TD>
<TD width="77%">边框可进行大小控制的窗口 </TD></TR>
<TR>
<TD width="23%">WS_SYSMENU</TD>
<TD width="77%">创建一个有系统菜单的窗口,必须与WS_CAPTION风格同时使用 </TD></TR>
<TR>
<TD width="23%">WS_THICKFRAME</TD>
<TD width="77%">创建一个大小可控制的窗口,与WS_SIZEBOX 风格一样.</TD></TR>
<TR>
<TD width="23%">WS_TILED</TD>
<TD width="77%">创建一个层叠式窗口,有标题栏 </TD></TR>
<TR>
<TD width="23%">WS_VISIBLE</TD>
<TD width="77%">窗口为可见 </TD></TR>
<TR>
<TD rowSpan=2>WS_VSCROLL</TD>
<TD rowSpan=2>窗口有垂直滚动条 </TD></TR>
<TR></TR></TBODY></TABLE><BR>  程序中使用了WS_OVERLAPPEDWINDOW标志,它是创建一个普通窗口常用的标志。而在DirectX编程中,我们常用的是WS_POPUP,用这个标志创建的窗口没有标题栏和系统菜单,如果设定窗口为最大化,客户区可以占满整个屏幕,以满足DirectX编程的需要。<BR><BR>  CreateWindow()函数后面的参数中,仍用到了该应用程序的实例句柄hInstance。<BR><BR>  如果窗口创建成功,返回值是新窗口的句柄,否则返回NULL。<BR><BR><br>  <B>显示和更新窗口 </B><BR><BR>  窗口创建后,并不会在屏幕上显示出来,要真正把窗口显示在屏幕上,还得使用ShowWindow()函数,其原型如下: <BR><BR>
<TABLE cellspacing=0 cellpadding=0 border=0 align=center class=txcode>
<TBODY>
<TR>
<TD>BOOL ShowWindow( HWND hWnd, int nCmdShow ); </TD></TR></TBODY></TABLE><BR>  参数hWnd指定要显示得窗口的句柄,nCmdShow表示窗口的显示方式,这里指定为从WinMain()函数的nCmdShow所传递而来的值。<BR><BR>  由于ShowWindow()函数的执行优先级不高,所以当系统正忙着执行其它的任务时,窗口不会立即显示出来,此时,调用UpdateWindow()函数以可以立即显示窗口。其函数原型如下:<BR><BR>
<TABLE cellspacing=0 cellpadding=0 border=0 align=center class=txcode>
<TBODY>
<TR>
<TD>BOOL UpdateWindow( HWND hWnd ); </TD></TR></TBODY></TABLE><BR>  <B>消息循环 </B><BR><BR>  在Win32编程中,消息循环是相当重要的一个概念,看似很难,但是使用起来却是非常简单。在WinMain()函数中,调用InitWindow()函数成功的创建了应用程序主窗口之后,就要启动消息循环,其代码如下:<BR><BR>
<TABLE cellspacing=0 cellpadding=0 border=0 align=center class=txcode>
<TBODY>
<TR>
<TD>while (GetMessage(&amp;msg, NULL, 0, 0))<BR><BR>{<BR><BR>TranslateMessage(&amp;msg);<BR><BR>DispatchMessage(&amp;msg);<BR><BR>}<BR></TD></TR></TBODY></TABLE><BR>  Windows应用程序可以接收以各种形式输入的信息,这包括键盘、鼠标动作 、记时器产生的消息,也可以是其它应用程序发来的消息等等。Windows系统自动监控所有的输入设备,并将其消息放入该应用程序的消息队列中。<BR><BR>  GetMessage()函数则是用来从应用程序的消息队列中按照先进先出的原则将这些消息一个个的取出来,放进一个MSG结构中去。GetMessage()函数原型如下:<BR><BR>
<TABLE cellspacing=0 cellpadding=0 border=0 align=center class=txcode>
<TBODY>
<TR>
<TD>BOOL GetMessage(<BR><BR>LPMSG lpMsg, //指向一个MSG结构的指针,用来保存消息<BR><BR>HWND hWnd, //指定哪个窗口的消息将被获取<BR><BR>UINT wMsgFilterMin, //指定获取的主消息值的最小值<BR><BR>UINT wMsgFilterMax //指定获取的主消息值的最大值<BR><BR>);<BR></TD></TR></TBODY></TABLE><BR>  GetMessage()将获取的消息复制到一个MSG结构中。如果队列中没有任何消息,GetMessage()函数将一直空闲直到队列中又有消息时再返回。如果队列中已有消息,它将取出一个后返回。MSG结构包含了一条Windows消息的完整信息,其定义如下:<BR><BR>
<TABLE cellspacing=0 cellpadding=0 border=0 align=center class=txcode>
<TBODY>
<TR>
<TD>typedef struct tagMSG { <BR><BR>HWND hwnd; //接收消息的窗口句柄<BR><BR>UINT message; //主消息值<BR><BR>WPARAM wParam; //副消息值,其具体含义依赖于主消息值<BR><BR>LPARAM lParam; //副消息值,其具体含义依赖于主消息值<BR><BR>DWORD time; //消息被投递的时间<BR><BR>POINT pt; //鼠标的位置<BR><BR>} MSG;</TD></TR></TBODY></TABLE><BR>  该结构中的主消息表明了消息的类型,例如是键盘消息还是鼠标消息等,副消息的含义则依赖于主消息值,例如:如果主消息是键盘消息,那么副消息中则存储了是键盘的哪个具体键的信息。<BR><BR>  GetMessage()函数还可以过滤消息,它的第二个参数是用来指定从哪个窗口的消息队列中获取消息,其它窗口的消息将被过滤掉。如果该参数为NULL,则GetMessage()从该应用程序线程的所有窗口的消息队列中获取消息。<BR><BR>  第三个和第四个参数是用来过滤MSG结构中主消息值的,主消息值在wMsgFilterMin和wMsgFilterMax之外的消息将被过滤掉。如果这两个参数为0,则表示接收所有消息。<BR><BR>  当且仅当GetMessage()函数在获取到WM_QUIT消息后,将返回0值,于是程序退出消息循环。<BR><BR>  TranslateMessage()函数的作用是把虚拟键消息转换到字符消息,以满足键盘输入的需要。DispatchMessage()函数所完成的工作是把当前的消息发送到对应的窗口过程中去。<BR><BR>  开启消息循环其实是很简单的一个步骤,几乎所有的程序都是按照EasyWin的这个方法。你完全不必去深究这些函数的作用,只是简单的照抄就可以了。 <BR> <BR><br>  <B>消息处理函数</B> <BR><BR>  消息处理函数又叫窗口过程,在这个函数中,不同的消息将用switch语句分配到不同的处理程序中去。Windows的消息处理函数都有一个确定的样式,即这种函数的参数个数和类型以及其返回值的类型都有明确的规定。在VC的说明书中,消息处理函数的原型是这样定义的:<BR><BR>
<TABLE cellspacing=0 cellpadding=0 border=0 align=center class=txcode>
<TBODY>
<TR>
<TD>LRESULT CALLBACK WindowProc( <BR><BR>HWND hwnd, //接收消息窗口的句柄<BR><BR>UINT uMsg, //主消息值<BR><BR>WPARAM wParam, //副消息值<BR><BR>LPARAM lParam //副消息值<BR><BR>); </TD></TR></TBODY></TABLE><BR>  如果你的程序中还有其它的消息处理函数,也都必须按照上面的这个样式来定义,但函数名称可以随便取。EasyWin中的WinProc()函数就是这样一个典型的消息处理函数。<BR><BR>  消息处理函数的四个参数是由GetMessage()函数从消息队列中获得MSG结构,然后分解后得到的。第二个参数uMsg和MSG结构中的message值是一致的,代表了主消息值。程序中用switch语句来将不同类型的消息分配到不同的处理程序中去。<BR><BR>  WinProc()函数明确的处理了4个消息,分别是WM_KEYDOWN(击键消息)、WM_RBUTTONDOWN(鼠标右键按下消息)、WM_PAINT(窗口重画消息)、WM_DESTROY(销毁窗口消息)。<BR><BR>  值得注意的是,应用程序发送到窗口的消息远远不止以上这几条,象WM_SIZE、WM_MINIMIZE、WM_CREATE、WM_MOVE等这样频频使用的消息就有几十条。为了减轻编程的负担,Windows的API提供了DefWindowProc()函数来处理这些最常用的消息,调用了这个函数后,这些消息将按照系统默认的方式得到处理。<BR><BR>  因此,在switch_case语句中,只须明确的处理那些有必要进行特别响应的消息,把其余的消息交给DefWindowProc()函数来处理,是一种明智的选择,也是你必须做的一件事。 <BR> <BR>  <B>结束消息循环</B> <BR><BR>  当用户按Alt+F4或单击窗口右上角的退出按钮,系统就向应用程序发送一条WM_DESTROY的消息。在处理此消息时,调用了PostQuitMessage()函数,该函数会给窗口的消息队列中发送一条WM_QUIT的消息。在消息循环中,GetMessage()函数一旦检索到这条消息,就会返回FALSE,从而结束消息循环,随后,程序也结束。 <BR><BR>  <B>小结 </B><BR><BR>  本章介绍的是Win32编程的基础知识,在进行DirectX编程之前,掌握它们是十分必要的。<BR><BR>  通过本文的学习,你应该学到以下知识:<BR><BR>   如何创建一个Win32应用程序工程 <BR><BR>   用RegisterClass()函数注册一个窗口类,再立即调用CreateWindow()函数创建一个窗口的实例 <BR><BR>   设置窗口的类型以及将一个消息处理函数与窗口联系上 <BR><BR>   用一固定的模式开启消息循环 <BR><BR>   了解消息处理函数的定义规则,如何自己定义一个窗口消息处理函数 <BR><BR>   在消息处理函数中,最后必须调用DefWindowProc()函数以处理那些缺省的消息 <BR><BR>   调用PostQuitMessage()函数以结束消息循环 <BR><BR></TD>
	</TR>
	</TABLE>
</td></tr>
<td align="center"><A href="#" onclick=javascript:self.close()><font color="#000000"><B>关闭本页</B></font></A></td>
<tr><td  height=1 bgcolor=#D6D6D6></td></tr>
<tr><Td colspan="9" align=center ><script language="JavaScript" src="/images/footad.js"></script></td></tr>
<tr><td  height=1 bgcolor=#D6D6D6></td></tr>
<tr>
	<Td colspan="9" class="ButtonList" align=center >&nbsp;</font><script language="JavaScript" src="/images/footad2.js"></script>
	</td>
	</tr>
<tr><td  height=1 bgcolor=#D6D6D6></td></tr>
<tr><td bgcolor="#FFFFFF" height=25 align=center><script language="JavaScript" src="/images/fav.js"></script></td></tr>
</table>

<table width=760 border=0 class="border3" cellpadding=0 bgcolor=#ffffff  align=center cellspacing=0 >
<tr><td colspan=3  height=2></td></tr>
</table>
<table width=760 border=0  cellpadding=0 cellspacing=0 align=center>
<tr height=10><td></td></tr>
<tr height=20>
<td align=center><a href=/index.html class=gray2>首页</a> | <a href=/hezuo.html class=gray2>投资与合作</a> |  <a href="/fuwu.html" class=gray2>服务条款</a> | <a target=_blank href="/yinsi.html" class=gray2>隐私政策</a> | 
<A href="javascript:window.external.AddFavorite('http://www.chinaitpower.net/',%20'“中国IT动力,提供最新最全的电脑技术教程”&quot;/www.chinaitpower.com')"  target=_self  class=gray2>收藏本站</A> | 
<A style="BEHAVIOR: url(#default#homepage)" 
onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.chinaitpower.net/');return(false);" 
href="http://www.chinaitpower.net/#"  class=gray2>设为首页</A> | 
<a href="Http://bbs.chinaitpower.com/" class=gray2>新用户注册</a>	| 
<a href="/shengming.html" class=gray2>免责声明</a>	|  
<a href="/help.html" class=gray2 target=_blank>使用帮助</a></td></tr>
<tr><td height=1 bgcolor=#666666></td></tr>
<tr height=20><td align=center>Copyright &copy;2005-2008 chinaitpower.com  All rights reserved. www.chinaitpower.com 版权所有</td></tr>
</table>
<div style="display:none" align=center>
<script src='http://s44.cnzz.com/stat.php?id=166376&web_id=166376' language='JavaScript' charset='gb2312'></script>
</div>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -