📄 g02.htm
字号:
int WINAPI WinMain(HINSTANCE hinstance,<br> HINSTANCE hprevinstance,<br> LPSTR lpcmdline,<br> int ncmdshow);<br> 首先,应当注意到奇怪的WINAPI声明符,这相当于PASCAL函数声明符,它强制参数从左边向右边传递,而不是像默认的CDECL声明符那样参数从右到左转移。但是,PASCAL调用约定声明已经过时了,WINAPI代替了该函数。必须使用WinMain()的WINAPI声明符;否则,将向函数返回一个不正确的参数并终止开始程序。</p> <p><b>测试参数</b></p> <p> 下面我们详细看一下每个参数<br> ·hinstance——该参数是一个Windows为你的应用程序生成的实例句柄。实例是一个用来跟踪资源的指针或数。本例中,hinstance就像一个名字或地址一样,用来跟踪你的应用程序。<br> ·hprevinstance——该参数已经不再使用了,但是在Windows的旧版本中,它跟踪应用程序以前的实例(换句话说,就是产生当前实例的应用程序实例)。难怪Microsoft要去除它,它就像一次长途跋涉——主我们为之头疼。<br> ·lpcmdline——这是一个空终止字符串,和标准C/C++ main(int argc,char **argv)函数中的命令行参数相似。不同的是,它不是一个单独的像argc那样指出命令行的参数。例如,如果你创建一个名字为TEST.EXE的Windows应用程序,并且使用下面的参数运行:<br> TEST.EXE one<br> lpcmdline将含有下面数据:<br> lpcmdline = "one two three"<br> 注意,.EXE的名字本身并不是命令行的一部分。<br> ·ncmdshow——最后一整型参数在运行过程中被传递给应用程序,带有如何打开主应用程序窗口的信息。这样,用户便会拥有一点控制应用程序如何启动的能力。当然,作为一个程序员,如果想忽略它也可以,而想使用它也行。(你将参数传递给ShowWindow(),我们又超前了!)表2.2列出了ncmdshow最常用的参数值。</p> <p align="center"><b>表2.2 cmdshow的Windows代码</b><br> </p> <table width="90%" border="1" cellspacing="0" cellpadding="0" align="center" bordercolorlight="#000000" bordercolordark="#FFFFFF"> <tr> <td width="22%" bgcolor="#CCCCFF"> <div align="center"><b>值</b></div> </td> <td width="78%" bgcolor="#CCCCFF"> <div align="center"><b>功 能</b></div> </td> </tr> <tr> <td width="22%">SW_SHOWNORMAL</td> <td width="78%"> 激活并显示一个窗口。如果该窗口最小化或最大化的话,Windows将它恢复到原始尺寸和位置。当第一次显示该窗口时,应用程序将指定该标志。</td> </tr> <tr> <td width="22%">SW_SHOW</td> <td width="78%"> 激活一个窗口,并按当前尺寸和位置显示</td> </tr> <tr> <td width="22%">SW_HIDE</td> <td width="78%"> 隐藏一个窗口,并激活另外一个窗口</td> </tr> <tr> <td width="22%">SW_MAXIMIZE</td> <td width="78%"> 将指定的窗口最大化</td> </tr> <tr> <td width="22%">SW_MINIMIZE</td> <td width="78%"> 将指定的窗口最小化</td> </tr> <tr> <td width="22%">SW_RESTORE</td> <td width="78%"> 激活并显示一个窗口,如果该窗口最小化或最大化的话,Windows将它恢复到原始尺寸和位置。当恢复为最小化窗口时,应用程序必须指定该标志。</td> </tr> <tr> <td width="22%">SW_SHOWMAXIMIZED</td> <td width="78%"> 激活一个窗口,并以最大化窗口显示</td> </tr> <tr> <td width="22%">SW_SHOWMINIMIZED</td> <td width="78%"> 激活一个窗口,并以最小化窗口显示</td> </tr> <tr> <td width="22%">SW_SHOWMINNOACTIVE</td> <td width="78%"> 以最小化窗口方式显示一个窗口,激活的窗口依然保持激活的状态</td> </tr> <tr> <td width="22%">SW_SHOWNA</td> <td width="78%"> 以当前状态显示一个窗口,激活的窗口依然保持激活的状态 </td> </tr> <tr> <td width="22%">SW_SHOWONACTIVATE</td> <td width="78%"> 以上一次窗口尺寸和位置来显示窗口,激活的窗口依然保持激活的状态</td> </tr> </table> <p> 如表2.2所示,ncmdshow有许多设置(目前许多值都没有意义)。实际上,这些设置大部分都不在ncmdshow中传递。可以应用另一个函数 ShowWindow()来使用它们,该函数在一个窗口创建时就开始显示。对此我们在本章后面将进行详细的讨论。<br> 我想说的一点是,Windows带有大量的你从未使用过的选项和标志等等,就像VCR编程选项一样——越多越好,任你使用。Windows就是按照这种方式设计的。这将使每个人都感到满意,这也意味着它包含了许多选项。实际上,我们在99%时间内将会使用SW_SHOW、SW_SHOWNORMAL和SW_HIDE,但是你还要了解在1%的时间内会用到的其他选项。</p> <p> <b>选择一个信息框</b></p> <p> 最后让我们讨论一下WinMain()中调用MessageBox()的实际机制。MessageBox()是一个Win32 API函数,它替我们做某些事,使我们不需自己去做。该函数经常以不同的图标和一个或两个按钮来显示信息。你看,简单的信息显示在Windows应用程序中非常普通,有了这样一个函数就节省了程序员半个多小时的时间,而不必每次使用都要编写它。<br> MessageBox()并没有什么多少功能,但是能够在屏幕上显示一个窗口,提出一个问题,并且等候用户的输入。下面是MessageBox()的原型:<br> int MessageBox(HWND hwn,//handle of owner window<br> LPCTSTR lptext,//address of text in message box<br> LPCTSTR lpcaption,//address of title of message box<br> UINT utype);//style of message box<br> 参数定义如下:<br> hwnd——这是信息框连续窗口的句柄。目前我们还不能谈及窗口句柄,因此只能认为它是信息框的父窗口。在DEMO2_2.CPP,我们将它设置为空值NULL,因此使用Windows桌面作为父窗口。<br> lptext——这是一个包含显示文本的空值终止字符串。<br> lpcaption——这是一个包含显示文本框标题的空值终止字符串。<br> utype——这大概是该簇参数中唯一令人激动的参数了,控制信息显示框的各类。<br> 表2.3列出了几种MessageBox()选项(有些删减)。</p> <p> <b>表2.3 MessageBox()选项</b><br> ─────────────────────────────────<br> <b>标志 描述</b> <br> ─────────────────────────────────<br> <b>下列设置控制信息框的一般类型 </b><br> ───────────┬─────────────────────<br> MB_OK │信息框含有一个按钮:OK,这是默认值<br> MB_OKCANCEL │信息框含有两个按钮:OK和Cancel<br> MB_RETRYCANCEL │信息框含有两个按钮:Retry和Cancel<br> MB_YESNO │信息框含有两个按钮:Yes和No<br> MB_YESNOCANCEL │信息框含有三个按钮:Yes、No和Cancel<br> MB_ABORTRETRYIGNORE│信息框含有三个按钮:Yes、No和Cancel<br> ───────────┴─────────────────────<br> <b>这一组控制在图标上添加一点“穷人的多媒体”</b><br> ───────────┬─────────────────────<br> MB_ICONEXCLAMATION │信息框显示一个惊叹号图标<br> MB_ICONINFORMATION │信息框显示一个由圆圈中的小写字母I构成的图标<br> MB_ICONQUESTION │信息框显示一个问号图标<br> MB_ICONSTOP │信息框显示一个终止符图标<br> ───────────┴─────────────────────<br> <b>该标志组控制默认时高亮的按钮</b> <br> ───────────┬─────────────────────<br> MB_DEFBUTTONn │其中n是一个指示默认按钮的数字(1-4),从左<br> │到右计数<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -