2012-04-13 3 views
-1

Я изучал учебник здесь: http://msdn.microsoft.com/en-us/library/bb384843.aspx, но я действительно смущен в одной точке.Об операторе возврата C++/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++. –

+0

talnicolas и Luchian Grigore дают половину вашего ответа. – egrunin

+0

@BenVoigt - на самом деле, нет ничего С ++ по поводу вопроса, я бы предложил изменить заголовок и теги. – KevinDTimm

ответ

3

Он отличает значение msg.wParam к int. Как вы можете видеть в объявлении функции:

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

возвращаемый тип int. Я точно не знаю, что такое тип свойства wParam, но он, вероятно, не является int, поэтому он должен быть явно передан в int или он не будет компилироваться.

+0

Не важно, но я думаю, что 'wParam' будет иметь тип' WPARAM', который является 'long' или что-то еще. –

+0

'wParam' не является' int', но я уверен, что есть неявное преобразование. –

+0

Поле 'wParam' действительно представляет собой' WPARAM', который является 'UINT_PTR', который является либо' unsigned int', либо 'unsigned __int64' в зависимости от того, является ли ОС 32-разрядной или 64-разрядной, соответственно. –

0

Этот код, вероятно, является частью функции, которая возвращает int. Поскольку msg.wParam не может быть неявным образом добавлен к int, требуется явное литье. Это в основном эквивалентно:

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

Почему есть 2 вещи

Там не две вещи: есть только wParam поле msg Название переменной (типа MSG, который является struct) преобразуется в int.