C2440 “=”: 无法从“void (__stdcall *)(HWND,WPARAM,LPARAM)”转换为“WNDPROC”
#include <iostream>
#include <windows.h>
HWND MainWindowHandle = 0;
bool InitWinsoqaApp(HINSTANCE instanceHandle, int show); //初始化
int Run();
LRESULT CALLBACK WndProc(
HWND hwnd,
WPARAM wParam,
LPARAM lParam
) ; //回调函数
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR pCmdLine,
int nShowCmd
)
{
if (!InitWinsoqaApp(hInstance, nShowCmd))
{
return 0;
}
return Run();
}
bool InitWinsoqaApp(HINSTANCE instanceHandle, int show) {
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc; //就是这行除了问题
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = instanceHandle;
wc.hIcon = LoadIcon(0, IDI_APPLICATION);
wc.hCursor = LoadCursor(0, IDC_ARROW);
wc.hbrBackground = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
wc.lpszMenuName = 0;
wc.lpszClassName = 0;
if (RegisterClass(&wc))
{
return false;
}
MainWindowHandle = ::CreateWindow(
0,
0,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
0,
0,
instanceHandle,
0
);
if (MainWindowHandle == 0)
{
return false;
}
ShowWindow(MainWindowHandle, show);
UpdateWindow(MainWindowHandle);
return true;
}
int Run() {
MSG msg;
ZeroMemory(&msg, sizeof(MSG));
while (GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(
HWND windowHandle,
UINT msg,
WPARAM wParam,
LPARAM lParam
)
{
switch (msg)
{
case WM_LBUTTONDOWN:
return 0;
case WM_KEYDOWN:
if (wParam == VK_ESCAPE)
DestroyWindow(MainWindowHandle);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(
windowHandle,
msg,
wParam,
lParam
);
}