gA (hInstance, IDS_APPNAME, (char *) szAppName, sizeof (szAppName)) ; LoadStringA (hInstance, IDS_ERRMSG, (char *) szErrMsg, sizeof (szErrMsg)) ; MessageBoxA (NULL, (char *) szErrMsg, (char *) szAppName, MB_ICONERROR) ; return 0 ; }
注意,TCHAR字串变数是指向char的指标。
既然我们已经定义了用於POEPOEM的所有字串资源,那么翻译者将程式转换成外语版本就很容易了。当然,它们将不得不翻译「Annabel
Lee」这个名字-我想,这会是一项困难得多的工作。
功能表
您还记得Monty
Python有关乳酪店的幽默短剧吗?那故事内容是这样的:一个客人走进乳酪店想买某种乳酪。当然,店里没有这种乳酪。因此他又问有没有另一种乳酪,然後再问另一种,再问另一种,不断的问店家有没有另一种乳酪(最後总共问了40种的乳酪),回答仍然是没有,没有,没有,没有,没有。
这个不幸的事件可以通过功能表的使用来避免。一个功能表是一列可用的选项,它告诉饥饿的用餐者,厨房可以提供哪些服务,并且-对於Windows程式来说-还告诉使用者一个应用程式能够执行哪些操作。
功能表可能是Windows程式提供的一致使用者介面中最重要的部分,而在您的程式中增加功能表,是Windows程式设计中相对简单的部分。您在Developer
Studio中定义功能表。每个可选的功能表项被赋予唯一的ID。您在视窗类别结构中指定功能表名称。当使用者选择一个功能表项时,Windows给您的程式发送包含该ID的WM_COMMAND讯息。
讨论完功能表後,我还将讨论键盘加速键,它们是一些键的组合,主要用於启动功能表功能。
功能表概念
视窗的功能表列紧接在标题列的下方显示,这个功能表列有时被称为「主功能表」或「顶层功能表」。列在顶层功能表的项目通常是下拉式功能表,也叫做「突现式功能表」或「子功能表」。您也可以定义多重嵌套的突现式功能表,也就是说,在突现式功能表上的项目可以存取另一个突现式功能表。有时突现式功能表上的项目呼叫对话方块以获得更多的资讯(对话方块在下一章介绍)。在标题列的最左端,很多父视窗都显示程式的小图示,这个图示可 |