2010-03-13 101 views
2

我尝试使用Windows API创建一个非常简单的应用程序。Windows API - 初学者帮助

我在控制台上做了一些小应用程序。这是我第一次使用Win32应用程序。 我搜索并找到了来自伪造者的文档,这是在本网站推荐的。但我试图写非常第一行:

#include <stdafx.h> 
#include <windows.h> 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow) 
{ 
    MessageBoxW(NULL, "Good bye Cruel World", "Note", MB_OK); 
    return 0; 
} 

但它不起作用(从VS 2008创建的默认项目中删除行并写入这些行)。

回答

1

大多数windows API调用有两个版本,一个采用单字节字符串,另一个采用2字节unicode字符串。单字节的名称末尾有一个A,而2个字节的有一个W.在windows.h中定义了宏,因此,如果将字母留出,则根据编译器宏选择一个字母。

在你的代码编写 -

MessageBoxW (NULL, "Good bye Cruel World", "Note", MB_OK); 

要调用单字节的字符串,这将无法正常工作的API的宽字符版本。请更改为MessageBoxA或将您的字符串更改为宽字符串 -

MessageBoxW (NULL, L"Good bye Cruel World", L"Note", MB_OK); 
0

删除第一行。剩下的是一个有效的Windows程序,它应该在任何IDE下编译。你的问题是stdafx.h头文件是VS的一个假象,如果你试图“重用”一个现有的VS项目,你可能会遇到其他问题。如果你想知道编译的真正工作原理,最好创建一些不使用IDE的简单应用程序,而是像MinGW这样的命令行编译器。

未来,发布您使用复制和粘贴所获得的错误消息。

+0

当我不包含第1行时,它不起作用。我的学校使用VS,所以我必须遵循他们:) – nXqd 2010-03-13 10:58:40

+0

@nXqd“它不起作用”对我们来说毫无用处 - 您必须告诉我们您得到的错误消息。 – 2010-03-13 11:14:13

0

至少需要一个消息循环运行,以使应用程序来处理消息:

while(GetMessage(&msg, NULL, 0, 0)) 
{ 
    TranslateMessage(&msg); 
    DispatchMessage(&msg); 
} 

有在网络上的消息循环很多教程,比如这里:

如果你刚开始GUI编程,你最好读一本书,并通过实例工作。 Petzold是一个经典。通过从随机网页收集部分工作代码的代码片段来学习编程将非常耗时,困难且不完整。一本精心编写的书会引导你完成基础知识,并分阶段解释。玩的开心!

+1

不,你不知道。完全可以在没有消息循环的情况下编写Windows应用程序 - 提问者的代码就是一个例子。 – 2010-03-13 10:21:35

+0

好吧,好点 - 所以'MessageBox'有它自己的消息泵。关于阅读一本好书的建议仍然存在。 :) – gavinb 2010-03-13 10:34:53