2010-03-13 135 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