Windows API - 初学者帮助

时间:2010-03-13 09:56:18

标签: c++ winapi

我尝试使用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创建的默认项目中擦除行并写下这些行)。

3 个答案:

答案 0 :(得分:1)

大多数Windows API调用有两个版本,一个采用单字节字符串,另一个采用2字节的unicode字符串。单字节的一个在名称的末尾有一个A,而2个字节的一个有一个W.在windows.h中定义了宏,所以如果你把字母留出来,它会选择一个或另一个,具体取决于编译器宏。 / p>

在您编写的代码中 -

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

您正在使用单字节字符串调用API的宽字符版本,这将无效。更改为MessageBoxA或将字符串更改为宽字符串 -

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

答案 1 :(得分:0)

删除第一行。剩下的是一个有效的Windows程序,它应该在任何IDE下编译。您的问题是stdafx.h标头,这是VS的人工制品,如果您尝试“重用”现有的VS项目,可能还有其他问题。如果你想知道编译是如何工作的,那么建立一些不使用IDE的简单应用程序是一个好主意,但是像MinGW这样的命令行编译器。

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

答案 2 :(得分:0)

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

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

网上的消息循环有很多教程,例如:

如果您刚刚开始使用GUI编程,那么最好还是阅读一本书并完成这些示例。 Petzold是经典之作。通过收集从随机网页中抄袭的部分工作代码的片段来学习编程将是耗时,困难和不完整的。一本精心编写的书将引导您完成基础知识并分阶段解释。玩得开心!