2012-04-13 61 views
-1

我一直在看這個教程: http://msdn.microsoft.com/en-us/library/bb384843.aspx,但我真的很困惑的一點。關於C++ return語句/ Win32 API

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

return (int) msg.wParam; 

我不知道他們在做什麼,並返回那裏。我知道回報只有一個價值。爲什麼有2件事?我看了其他教程,他們似乎都使用return msg.wParam;

+10

這是一個C風格的演員,而不是第二個值。獲取一本好的C++書。 – 2012-04-13 19:25:11

+0

talnicolas和Luchian Grigore每個給你一半的答案。 – egrunin 2012-04-13 19:30:18

+0

@BenVoigt - 實際上,關於這個問題沒有任何C++,我建議改變標題和標籤。 – KevinDTimm 2012-04-13 19:36:35

回答

3

它將值msg.wParam鑄造爲一個int。正如你可以在函數聲明中看到:

int WINAPI WinMain(HINSTANCE hInstance, 
       HINSTANCE hPrevInstance, 
       LPSTR lpCmdLine, 
       int nCmdShow) 

返回類型爲int。我不知道屬性wParam的類型是什麼,但它可能不是int,所以它必須顯式轉換爲int或不編譯。

+0

這並不重要,但我認爲'wParam'會是'WPARAM'類型,它是''long''或什麼的。 – 2012-04-13 19:36:41

+0

'wParam'不是'int',但我確定存在隱式轉換。 – 2012-04-13 19:38:51

+0

'wParam'字段確實是'WPARAM',它是'UINT_PTR',它可以是'unsigned int'或'unsigned __int64',具體取決於操作系統是32位還是64位。 – 2012-04-13 20:09:37

0

該代碼可能是返回int的函數的一部分。由於msg.wParam不能隱式轉換爲int,因此需要進行顯式強制轉換。這基本上等同於:

int ret = (int)msg.wParam; 
return ret; 
0

爲什麼有兩件事情

有沒有兩件事情:有隻是msg varaible(MSG類型是一個struct)的wParam領域轉化成int