﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-不过是用Ms Tools的一个民工..-文章分类-Sdk</title><link>http://www.cppblog.com/IssacAsimoy/category/7366.html</link><description>人恒过，然后能改。困于心，衡于虑，而后作。</description><language>zh-cn</language><lastBuildDate>Fri, 11 Jul 2008 11:25:44 GMT</lastBuildDate><pubDate>Fri, 11 Jul 2008 11:25:44 GMT</pubDate><ttl>60</ttl><item><title>《Windows程序设计》--滚动条</title><link>http://www.cppblog.com/IssacAsimoy/articles/55914.html</link><dc:creator>IssAc</dc:creator><author>IssAc</author><pubDate>Fri, 11 Jul 2008 11:22:00 GMT</pubDate><guid>http://www.cppblog.com/IssacAsimoy/articles/55914.html</guid><wfw:comment>http://www.cppblog.com/IssacAsimoy/comments/55914.html</wfw:comment><comments>http://www.cppblog.com/IssacAsimoy/articles/55914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/IssacAsimoy/comments/commentRss/55914.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/IssacAsimoy/services/trackbacks/55914.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;LRESULT&nbsp;CALLBACK&nbsp;WndProc&nbsp;(HWND&nbsp;hwnd,&nbsp;UINT&nbsp;message,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;i...&nbsp;&nbsp;<a href='http://www.cppblog.com/IssacAsimoy/articles/55914.html'>阅读全文</a><img src ="http://www.cppblog.com/IssacAsimoy/aggbug/55914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/IssacAsimoy/" target="_blank">IssAc</a> 2008-07-11 19:22 <a href="http://www.cppblog.com/IssacAsimoy/articles/55914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《Windows程序设计》--窗口和消息</title><link>http://www.cppblog.com/IssacAsimoy/articles/55392.html</link><dc:creator>IssAc</dc:creator><author>IssAc</author><pubDate>Sat, 05 Jul 2008 03:37:00 GMT</pubDate><guid>http://www.cppblog.com/IssacAsimoy/articles/55392.html</guid><wfw:comment>http://www.cppblog.com/IssacAsimoy/comments/55392.html</wfw:comment><comments>http://www.cppblog.com/IssacAsimoy/articles/55392.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/IssacAsimoy/comments/commentRss/55392.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/IssacAsimoy/services/trackbacks/55392.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;因为缺少wmv文件,就把那部分的消息删除了&#8230;.！#include&nbsp;&lt;windows.h&gt;//申明窗口过程函数LRESULT&nbsp;CALLBACK&nbsp;WndProc&nbsp;(HWND,&nbsp;UINT,&nbsp;WPARAM,&nbsp;LPARAM)&nbsp;;&nbsp;//Windows程序的入口函数int&nbsp;...&nbsp;&nbsp;<a href='http://www.cppblog.com/IssacAsimoy/articles/55392.html'>阅读全文</a><img src ="http://www.cppblog.com/IssacAsimoy/aggbug/55392.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/IssacAsimoy/" target="_blank">IssAc</a> 2008-07-05 11:37 <a href="http://www.cppblog.com/IssacAsimoy/articles/55392.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>API参数说明符前缀详解</title><link>http://www.cppblog.com/IssacAsimoy/articles/55219.html</link><dc:creator>IssAc</dc:creator><author>IssAc</author><pubDate>Thu, 03 Jul 2008 11:07:00 GMT</pubDate><guid>http://www.cppblog.com/IssacAsimoy/articles/55219.html</guid><wfw:comment>http://www.cppblog.com/IssacAsimoy/comments/55219.html</wfw:comment><comments>http://www.cppblog.com/IssacAsimoy/articles/55219.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/IssacAsimoy/comments/commentRss/55219.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/IssacAsimoy/services/trackbacks/55219.html</trackback:ping><description><![CDATA[使用MASM写Windows程序，其实就是和Windows API打交道，而一个人是不可能记住所有的API用法的，所以API参考手册是必不可少的，API的参考手册中函数原型是按匈牙利表示法表示的，下面这个表就是API原型中那些前缀的详细解释 <br>资料来源：MicroSoft MSDN Platform SDK 参考<br>为便于开发Windows应用程序，Windows的开发者新定义了一些数据类型。这些数据类型或是与C/C++中已有的数据类型同义，或是一些新的结构数据类型。引入这些类型的主要目的是为便于程序员开发Windows应用程序，同时也是为了增强程序的可读性；另一个目的是为了便于程序将来能被移植到其它种类的计算机平台上或适应Windows将来的新版本的变化。例如，本教程目前使用16位API（Application Program Interface），现在Windows的版本使用32位API，只要将HANDLE等句柄类型定义为32位长，然后重新编译程序，就可以很方便地将一个使用16位API的Windows应用程序改为使用32位API的程序，使其能运行在32位API Windows上。大部分的数据类型在Windows.h中定义，下面是在这个文件中定义的部分类型：<br><br>　　<span class=ColorCode>#define　　PASCAL　　　　　pascal<br>　　#define　　NEAR　　　　　　near<br>　　#define　　FAR　　　 　　　far<br>　　typedef　　unsigned char　 BYTE<br>　　typedef　　unsigned short　WORD<br>　　typedef　　unsigned long　 DWORD<br>　　typedef　　long　　　　　　LONG<br>　　typedef　　char 　　　　　 *PSTR<br>　　typedef 　 char NEAR　　　 *NPSTR<br>　　typedef　　char FAR　　　　*LPSTR<br>　　typedef　　void　　　　　　VOID<br>　　typedef　　int　　　　　　 *LPINT<br>　　typedef　　LONG　　　　　　(PASCAL FAR * FARPROC)();</span><br><br>　　在Windows.h中，使用typedef还定义了一些新的结构类型。这些结构类型的名字也使用大写形式的标识符：<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">类型&nbsp;说明&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>MSG&nbsp;消息结构&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>WNDCLASS&nbsp;窗口的类的结构&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>PAINTSTRUCT&nbsp;绘图结构&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>POINT&nbsp;点的坐标的结构&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>RECT&nbsp;矩形结构&nbsp;</span></div>
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们在这里以类型MSG为例来说明类型的定义方法，对于其它类型，在以后用到时再作详细地说明。类型MSG是一个消息结构，它的定义方式及其各域的含义如下：<br><br>　　<span class=ColorCode>typedef struct tagMSG {</span><br>　　　　 <span class=ColorCode>HWND　　　　　hWnd;</span>　　<span class=ColorCatchword>// 窗口对象的标识符，该条消息传递到它所标识的窗口上</span><br>　　　　 <span class=ColorCode>UINT　　　 message;</span>　　<span class=ColorCatchword>// 消息标识符，标识某个特定的消息</span><br>　　　　 <span class=ColorCode>WPARAM　　　wParam;</span>　　<span class=ColorCatchword>// 随同消息传递的16位参数</span><br>　　　　 <span class=ColorCode>LPARAM　　　lParam;</span>　　<span class=ColorCatchword>// 随同消息传递的32位参数</span><br>　　　　 <span class=ColorCode>DWORD　　　　 time;</span>　　<span class=ColorCatchword>// 消息产生的时间</span><br>　　　　 <span class=ColorCode>POINT　　　　　 pt;</span>　　<span class=ColorCatchword>// 产生消息时光标在屏幕上的坐标</span><br>　　<span class=ColorCode>} MSG;<br>　　typedef　MSG　FAR　*LPMSG;</span><br><br>　　其中的POINT类型的定义是：<br><br>　　<span class=ColorCode>typedef　struct　tagPOINT {</span><br><span class=ColorCode>　　　　int x;</span> 　　　 <span class=ColorCatchword>/* X坐标 */</span><br><span class=ColorCode>　　　　int y;　　　<font color=#000000>　</font></span><span class=ColorCatchword>/* Y坐标 */</span><br>　　<span class=ColorCode>} POINT; <br>　　typedef　POINT　FAR　*LPPOINT;</span><br><br>　　Windows.h在定义大部分类型的同时，还定义了该类型的指针类型。例如，上例中的LPPOINT和LPMSG等，其中字母前缀LP表示远指针类型；若使用NP作为一个类型的前缀，则表示近指针类型；若使用P作为一个类型的前缀时，则表示一般的指针类型，这时由编译程序时所使用的内存模块决定这种指针是远指针或是近指针。在Windows.h中说明的大部分指针类型都采用这里介绍的方法进行说明，例如，LPRECT，它表示一个RECT类型的远指针。<br>　　在Windows.h中说明的大部分指针类型使用了C/C++的关键字const，如果一个指针类型的名字前缀为LPC、NPC或PC，则其中的字母C表示这种类型的指针变量所指向的变量不能通过该指针变量来修改，这种指针类型一般采用下述方法进行说明：<br><br>　　<span class=ColorCode>typedef　const　POINT　FAR　* LPCPOINT;<br>　　typedef　const　REC　　FAR　* LPCRECT;</span><br><br>　　一个使用const修饰的指针（称其为const指针）可以指向没有使用const修饰的变量，但没有使用const修饰的指针不能指向const修饰的变量，例如：<br><br>　　<span class=ColorCode>const　POINT　pt;<br>　　LPCPOINT　lpPoint = &amp;pt;</span>　　　<span class=ColorCatchword>// 正确</span><br>　　<span class=ColorCode>LPPOINT　 lpPoint = &amp;pt;</span>　　　<span class=ColorCatchword>// 错误</span><br><br>　　当向函数传递参数时，必须特别注意这个问题，例如：<br><br>　　<span class=ColorCode>void　fun(LPPOINT lppt) ;<br>　　......<br>　　LPCPOINT lpPoint ;<br>　　fun(lpPoint) ;</span><br><br>　　编译器将指示这个函数调用语句是错误的。所以，在一个函数不修改一个指针参数所指向的变量的情况下，最好将该参数说明为const指针，使const类型的指针也能用于该函数的参数。Windows.h中说明的大部分函数使用了const指针参数。<br>　　在Windows.h中，大多数语句是用于定义一个常量，例如：<br><br>　　<span class=ColorCode>#denfine　WM_QUIT　0X0012</span><br><br>　　该语句用标识符WM_QUIT来表示编号为0X0012的消息。每个常量由一个前缀和表示其含义的单词组成的标识符组成，两者之间用下画线隔开。前缀表明这些常量所属的一般范畴。下面是一些前缀和它们所属的范畴的说明。<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">类型&nbsp;说明&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>CS&nbsp;窗口类的风格（Class&nbsp;Style）&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>IDI&nbsp;预定义的图标对象的标识符（IDentity&nbsp;of&nbsp;Icon）&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>IDC&nbsp;预定义的光标对象的标识符（IDentity&nbsp;of&nbsp;Cursor）&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>WS&nbsp;窗口的风格（Windows&nbsp;Style）&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>CW&nbsp;创建窗口（Create&nbsp;Windows）&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>WM&nbsp;窗口消息（Windows&nbsp;Message）&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>DT&nbsp;绘制文本（Drawing&nbsp;Text）&nbsp;</span></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在变量名的表示方法方面，Windows推荐使用一种称为&#8220;匈牙利表示法&#8221;的方法。每个变量名用小写字母或描述了变量的数据类型的字母作为前缀，变量的名字紧跟其后，且用大写字母开始的单词（一个或多个单词）表示其含义，这样每个变量都能附加上其数据类型的助记符。例如：<br><br>　　<span class=ColorCode>WORD　wOffset ;</span>　　<span class=ColorCatchword>/* w表示WORD类型 */</span><br>　　<span class=ColorCode>DWORD dwValue ;</span>　　<span class=ColorCatchword>/* dw表示DWORD类型 */</span><br><br>　　下面是Windows中常使用的一些字母前缀和它们所代表的数据类型：<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">类型&nbsp;说明&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>b&nbsp;BOOL，布尔类型&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>by&nbsp;BYTE类型&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>c&nbsp;char类型&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;DWORD类型&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>fn&nbsp;函数类型&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>i&nbsp;整型&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>l&nbsp;LONG类型&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>lp&nbsp;远（长）指针（</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;pointer）&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>n&nbsp;短整型&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>np&nbsp;近（短）指针（near&nbsp;pointer）&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>p&nbsp;指针&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>s&nbsp;字符串&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>sz&nbsp;以</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">\0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">结尾的字符串&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>w&nbsp;WORD类型&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>x&nbsp;</span><span style="COLOR: #0000ff">short</span><span style="COLOR: #000000">，用于表示X坐标时&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>y&nbsp;</span><span style="COLOR: #0000ff">short</span><span style="COLOR: #000000">，用于表示Y坐标时&nbsp;</span></div>
<br><br>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Windows程序员也可以根据上述思想和使用目的，发明一些其他的前缀，但要注意，对这些前缀的使用必须保持前后一致。在Windows中，所有的函数根据其用途来命名，它们一般由2到3个英文单词组成，每个单词的第一个字母大写，例如，函数CreateWindow()，由该函数的名字可以知道它的用途是创建一个窗口。<br><br></p>
<p>比如说API函数CreateWindowsEx,API原型如下：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">HWND&nbsp;CreateWindowEx(<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>DWORD&nbsp;dwExStyle,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;extended&nbsp;window&nbsp;style</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">LPCTSTR&nbsp;lpClassName,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;pointer&nbsp;to&nbsp;registered&nbsp;class&nbsp;name</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">LPCTSTR&nbsp;lpWindowName,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;pointer&nbsp;to&nbsp;window&nbsp;name</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">DWORD&nbsp;dwStyle,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;window&nbsp;style</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;horizontal&nbsp;position&nbsp;of&nbsp;window</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;vertical&nbsp;position&nbsp;of&nbsp;window</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nWidth,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;window&nbsp;width</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nHeight,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;window&nbsp;height</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">HWND&nbsp;hWndParent,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;handle&nbsp;to&nbsp;parent&nbsp;or&nbsp;owner&nbsp;window</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">HMENU&nbsp;hMenu,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;handle&nbsp;to&nbsp;menu,&nbsp;or&nbsp;child-window&nbsp;identifier</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">HINSTANCE&nbsp;hInstance,&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;handle&nbsp;to&nbsp;application&nbsp;instance</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">LPVOID&nbsp;lpParam&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;pointer&nbsp;to&nbsp;window-creation&nbsp;data</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">);</span></div>
<p><br>那么根据上述前缀表可以得出,dwExStyle需要一个双字值,lpClassName与lpWindowName需要一个指向字符串的长指针(在MASM中则是偏移地址),x、y表示需传递整数值,nWidth与nHeight表示传递短整数,hWndParent表示需要一个窗口句柄,hMenu表示传递一个菜单句柄，hInstance表示传递的是程序实例句柄,lpParam表示可以传递长指针(地址)。<br>注意看前缀时请不要看前面的类型说明符，而是要看词的前缀，如DWORD dwExStyle,只需要看dwExStyle就知道传递的是双字数。<br>另外还有其它的组合，只要稍注意就能行，比如说lpfn表示指向函数的长指针，在MASM中则是一个函数的地址,，还有像lpSecurityAttributes之类的，则是指向SECURITY_ATTRIBUTES结构的长指针(地址),lpvBuffer表示传递一个缓存(Buffer)长指针(lp)或者为空(void),还有一些没有前缀的则是这个词已经足够说明它的意思了。等等,熟悉这些前缀的含义可以让你在学习API的时候进行快速的掌握。并能排除一些错误。<br><br>为了更好的了解WINDOWS编程，这里我必须介绍几个基本的概念：<br>1,句柄：它是WINDOWS编程的基础。一个句柄是指WINDOWS在内存中使用的一个唯一的整数质，是一个4个字节长的数值，用于标识应用程序中不同对象和相同对象的不同实例。</p>
<p>这里我列出几种WINDOWS常用的句柄：</p>
<p>HWND: 标示窗口句柄<br>HINSTANCE：标示当前实例句柄<br>HCOURSOR：标示光标句柄<br>HFONT: 标示字体句柄<br>HPEN：标示画笔句柄<br>HBRUSH：标示画刷句柄<br>HDC：标示设备环境句柄<br>HB99vMP：标示位图句柄<br>HICON：标示图标句柄<br>HMENU：标示菜单句柄<br>HFILE：标示文件句柄</p>
<p>由于WINDOWS应用程序利用WINDOWS消息来与其它的WINDOWS应用程序及WINDOWS系统进行消息交换。所以消息是一个十分重要的对象它的结构如下。</p>
<p>typedef struct{<br>&nbsp; HWND hwnd;&nbsp;&nbsp;&nbsp;&nbsp; //检索消息的窗口句柄<br>&nbsp; UN99v message;&nbsp; //代表一个消息的消息质<br>&nbsp; WPARAM wParam; //消息附加信息的字参数<br>&nbsp; LPARAM lParam; //消息附加信息的长字参数<br>&nbsp; DWORD time;&nbsp;&nbsp;&nbsp; //消息入队时间<br>&nbsp; POINT pt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //消息发送时鼠标的位置 point.x;point.y;<br>} tagMSG; </p>
<p>2,消息：VC++中消息都用前缀标示消息所属的分类，下面我来介绍一下这些前缀</p>
<p>BM表示按钮控制消息<br>CB表示组合框控制消息<br>DM表示默认下压式按钮控制消息<br>EM表示编辑控制消息<br>LB表示列表框控制消息<br>SBM表示滚动条控制消息<br>WM表示窗口消息</p>
<p>现在我来对系统常用的一些消息进行说明：<br>1,WM_LBUTTONDOWN： 单击鼠标左键时产生<br>2,WM_LBUTTONUP： 放开鼠标左键时产生 <br>3,WM_RBUTTONUP： 放开鼠标右键时产生<br>4,WM_LBUTTONBLCLK： 双击鼠标左键时产生<br>5,WM_RBUTTONBLCLK： 双击鼠标右键时产生<br>6,WM_KEYDOWN： 按下了一个非系统键时产生的消息<br>7,WM_CHAR： 同上<br>8,WM_CREATE： 由CreateWindow函数发出的消息<br>9,WM_DESTROY： 消除窗口时发出的消息<br>10,WM_QU99v： 退出程序时发送的消息<br>11,WM_PAINT： 做任何移动操作时发出的消息</p>
<p>介绍了以上的这些基础入门知识，我们就可以简单的了解一下WINDOWS API 程序的组成基本结构。它是由入口函数WinMain和窗口函数基本框架，并包含各种数据类型、数据结构与函数等应用组建组成的。其中入口函数WinMain和窗口函数是WINDOWS应用程序的主体。</p>
<p>一个基本的WinMain函数应该具有以下的功能：<br>1,注册窗口类，建立窗口及执行其他必要的初始化工作<br>2,进入消息循环，根据从应用程序消息队列接受的消息，调用相应的处理过程。<br>3,当消息循环检索到WM_QU99v消息时中止程序运行<br>WinMain函数有三个基本组成部分：函数说明、初始化和消息循环。</p>
<p>(1)函数说明</p>
<p>int WINAPI WinMain<br>(<br>HINSTANCE hThisInst, //应用程序当前实例句柄<br>HINSTANCE hPrevInst, //应用程序其它实例句柄<br>LPSTR lpszCmdLine,&nbsp;&nbsp; //指向程序命令行参数的指针<br>int nCmdShow&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //应用程序开始执行时窗口显示方式的整数值标示<br>) </p>
<p>(2)初始化<br>初始化包括窗口类的定义、注册、创建窗口实例和显示窗口四部分。（在以后的程序中我将详细的介绍它们具体的实现方法）</p>
<p>(3)消息循环<br>WINDOWS应用程序的运行是以消息为核心的。WINDOWS将产生的消息放入应用程序的消息队列中，而应用程序的WinMain函数从消息循环提取队列中的消息，并将其传递给窗口函数的相应过程处理。</p>
<p>它的基本写法如下：</p>
<p>MSG Meg；//定义消息<br>//(...)省略了一些内容<br>while (GetMessage(&amp;Meg,NULL,0,0)<br>{<br>&nbsp; TranslanteMessage(&amp;Meg);<br>&nbsp; DispatchMessage(&amp;Meg);<br>} <br></p>
<img src ="http://www.cppblog.com/IssacAsimoy/aggbug/55219.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/IssacAsimoy/" target="_blank">IssAc</a> 2008-07-03 19:07 <a href="http://www.cppblog.com/IssacAsimoy/articles/55219.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《Windows程序设计》--variable-argument</title><link>http://www.cppblog.com/IssacAsimoy/articles/54946.html</link><dc:creator>IssAc</dc:creator><author>IssAc</author><pubDate>Mon, 30 Jun 2008 03:25:00 GMT</pubDate><guid>http://www.cppblog.com/IssacAsimoy/articles/54946.html</guid><wfw:comment>http://www.cppblog.com/IssacAsimoy/comments/54946.html</wfw:comment><comments>http://www.cppblog.com/IssacAsimoy/articles/54946.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/IssacAsimoy/comments/commentRss/54946.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/IssacAsimoy/services/trackbacks/54946.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这是第2章中的一个例子码比较好理解.../**//*-----------------------------------------------------&nbsp;&nbsp;&nbsp;SCRNSIZE.C&nbsp;--&nbsp;Displays&nbsp;screen&nbsp;size&nbsp;in&nbsp;a&nbsp;message&nbsp;box&nbsp;&nbs...&nbsp;&nbsp;<a href='http://www.cppblog.com/IssacAsimoy/articles/54946.html'>阅读全文</a><img src ="http://www.cppblog.com/IssacAsimoy/aggbug/54946.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/IssacAsimoy/" target="_blank">IssAc</a> 2008-06-30 11:25 <a href="http://www.cppblog.com/IssacAsimoy/articles/54946.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《Windows程序设计》--第一个SDK程序</title><link>http://www.cppblog.com/IssacAsimoy/articles/54890.html</link><dc:creator>IssAc</dc:creator><author>IssAc</author><pubDate>Sat, 28 Jun 2008 14:47:00 GMT</pubDate><guid>http://www.cppblog.com/IssacAsimoy/articles/54890.html</guid><wfw:comment>http://www.cppblog.com/IssacAsimoy/comments/54890.html</wfw:comment><comments>http://www.cppblog.com/IssacAsimoy/articles/54890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/IssacAsimoy/comments/commentRss/54890.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/IssacAsimoy/services/trackbacks/54890.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;WINAPI&nbsp;WinMain(HINSTANCE&nbsp;hInstance,HINSTANCE&nbsp;hPrevInstance,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PSTR&nbsp;szCmdline,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;iCmdShow)<br><img id=Codehighlighter1_122_204_Open_Image onclick="this.style.display='none'; Codehighlighter1_122_204_Open_Text.style.display='none'; Codehighlighter1_122_204_Closed_Image.style.display='inline'; Codehighlighter1_122_204_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_122_204_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_122_204_Closed_Text.style.display='none'; Codehighlighter1_122_204_Open_Image.style.display='inline'; Codehighlighter1_122_204_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_122_204_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_122_204_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,TEXT(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello,Windows&nbsp;Program!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),TEXT(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">HelloMsg</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
&nbsp;
<p align=left><strong><span>WinMain</span></strong><strong><span>函数的定义</span></strong><strong><span> </span></strong></p>
<p align=left><strong><span>WinMain</span></strong><strong><span>函数的原型声明如下：</span></strong></p>
<p align=left><strong><span>int WINAPI WinMain(</span></strong></p>
<p align=left><strong><span>&nbsp;&nbsp; &nbsp;HINSTANCE<span> hInstance</span>,&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; // handle to current instance</span></strong></p>
<p align=left><strong><span>&nbsp;&nbsp; &nbsp;HINSTANCE<span> hPrevInstance</span>, // handle to previous instance</span></strong></p>
<p align=left><strong><span>&nbsp; &nbsp;&nbsp;LPSTR<span> lpCmdLine</span>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // command line</span></strong></p>
<p align=left><strong><span>&nbsp; &nbsp;&nbsp;int<span> nCmdShow</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // show state</span></strong></p>
<p align=left><strong><span>);</span></strong></p>
<p align=left><strong><span>WinMain</span></strong><strong><span>函数接收<span>4</span>个参数，这些参数都是在系统调用<span>WinMain</span>函数时，传递给应用程序的。</span></strong></p>
<p align=left><strong><span>第一个参数<span>hInstance</span>表示该程序当前运行的实例的句柄，这是一个数值。当程序在<span>Windows</span>下运行时，它唯一标识运行中的实例（注意，只有运行中的程序实例，才有实例句柄）。一个应用程序可以运行多个实例，每运行一个实例，系统都会给该实例分配一个句柄值，并通过<span>hInstance</span>参数传递给<span>WinMain</span>函数。</span></strong></p>
<p align=left><strong><span>第二个参数<span>hPrevInstance</span>表示当前实例的前一个实例的句柄。通过查看<span>MSDN</span>我们可以知道，在<span>Win32</span>环境下，这个参数总是<span>NULL</span>，即在<span>Win32</span>环境下，这个参数不再起作用。</span></strong></p>
<p align=left><strong><span>第三个参数<span>lpCmdLine</span>是一个以空终止的字符串，指定传递给应用程序的命令行参数。</span></strong><strong><span>例如：在<span>D</span>盘下有一个<span>sunxin.txt</span>文件，当我们用鼠标双击这个文件时将启动记事本程序（<span>notepad.exe</span>），此时系统会将<span>D:\sunxin.txt</span>作为命令行参数传递给记事本程序的<span>WinMain</span>函数，记事本程序在得到这个文件的全路径名后，就在窗口中显示该文件的内容。要在<span>VC++</span><span>开发环境中向应用程序传递参数，可以单击菜单【<span>Project</span>】&#8594;【<span>Settings</span>】，选择&#8220;<span>Debug</span>&#8221;</span>选项卡，在&#8220;<span>Program arguments</span>&#8221;编辑框中输入你想传递给应用程序的参数。</span></strong></p>
<p align=left><strong><span>第四个参数<span>nCmdShow</span>指定程序的窗口应该如何显示，例如最大化、最小化、隐藏等。这个参数的值由该程序的调用者所指定，应用程序通常不需要去理会这个参数的值。</span></strong></p>
<div>
<p align=left><strong><span>关于<span>WinMain</span>函数前的修饰符<span>WINAPI</span>，请参看下面关于<span>__stdcall</span>的介绍。读者可以利用<span>goto definition</span>功能查看<span>WINAPI</span>的定义，可以看到<span>WINAPI</span>其实就是<span>__stdcall</span></span></strong></p>
</div>
<img src ="http://www.cppblog.com/IssacAsimoy/aggbug/54890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/IssacAsimoy/" target="_blank">IssAc</a> 2008-06-28 22:47 <a href="http://www.cppblog.com/IssacAsimoy/articles/54890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>