我在尝试编译包含此WinProc函数的代码时遇到问题,该函数用于处理来自我们程序的消息。例如,如果通过Windows接收到WM_DESTROY消息,我希望它调用PostQuitMessage(0)来通知Windows该应用程序已发出退出请求。这将导致WM_QUIT消息导致WinMain退出。
我几周只学习了C ++,并没有经验或知识来解决这个问题,并希望得到任何帮助。我环顾四周,但到目前为止我找不到任何解决方案。我对此很陌生,所以我可能错过了一些非常明显的东西。
LRESULT WINAPI WinProc (hWnd, msg, UNIT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY;
// Tell windows to kill the program
PostQuitMessage(0);
return 0;
}
return DefWindowProc (hWnd, msg, wParam, lParam );
}
以下是我遇到的代码所遇到的错误。
错误:' LRESULT WinProc'重新宣布为不同类型的符号 错误:先前声明了' LRESULT WinProc(HWND __ *,UINT,WPARAM,LPARAM)' 错误:' hWnd'在这方面没有申明 错误:' msg'在这方面没有申明 错误:' UNIT'未在此范围内声明
非常感谢任何帮助。
谢谢
答案 0 :(得分:3)
在函数声明中
LRESULT WINAPI WinProc (hWnd, msg, UNIT msg, WPARAM wParam, LPARAM lParam )
您忘记为前两个参数hWnd和msg
设置类型说明符必须有
LRESULT WINAPI WinProc ( HWND hWnd, UNIT msg, WPARAM wParam, LPARAM lParam )
在放置分号
时,标签后面还必须跟冒号case WM_DESTROY;
答案 1 :(得分:0)
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM )
这应该是函数声明。你的案子有一个&#34 ;;"分号而不是":"结肠。
除此之外,我没有看到任何问题。试试这个:
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
// Tell windows to kill the program
PostQuitMessage(0);
return 0;
}
return DefWindowProc (hWnd, msg, wParam, lParam );
}
答案 2 :(得分:0)
尝试使用回调调用约定而不是winapi
https://msdn.microsoft.com/en-us/library/windows/desktop/ms633570(v=vs.85).aspx
还要注意在switch语句中使用“:”而不是“;”,还要在句柄和消息参数之前指定一个类型
LRESULT CALLBACK WinProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch( msg )
{
case WM_DESTROY:
// Tell windows to kill the program
PostQuitMessage(0);
return 0;
}
return DefWindowProc (hWnd, msg, wParam, lParam );
}