未定义的引用`WindowProc(HWND __ *,unsigned int,unsigned int,long)@ 16'

时间:2017-04-21 22:22:52

标签: c++ windows winapi

当我尝试编译非常简单的程序时,我不断收到以下错误:

  

对WindowProc的未定义引用(HWND __ *,unsigned int,unsigned int,long)@ 16'

我没有看到问题,这让我发疯了!

#include <iostream>
#include <windows.h>

using namespace std;

int sizeX = 500;
int sizeY = 500;

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

char szClassName[ ] = "WindowsApp";

int WINAPI WinMain(
                   HINSTANCE hThisInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpszArgument,
                   int nFunsterStil
                   )
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;

    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProc;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof(WNDCLASSEX);`

    wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;

    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    if(!RegisterClassEx(&wincl))
        return 0;

    hwnd = CreateWindowEx(
                          0,
                          szClassName,
                          "Windows App",
                          WS_SYSMENU,
                          CW_USEDEFAULT,
                          CW_USEDEFAULT,
                          sizeX,
                          sizeY,
                          HWND_DESKTOP,
                          NULL,
                          hThisInstance,
                          NULL
                      );
}

代码有什么问题?

1 个答案:

答案 0 :(得分:1)

您没有提供WindowProc()的定义。你声明了它,并将它分配给你的WNDCLASSEX,现在你必须实际实现它的身体,例如:

#include <iostream>
#include <windows.h>

using namespace std;

int sizeX = 500;
int sizeY = 500;

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

const char szClassName[ ] = "WindowsApp";

int WINAPI WinMain(
                   HINSTANCE hThisInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpszArgument,
                   int nFunsterStil
                   )
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;

    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProc;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof(WNDCLASSEX);`

    wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;

    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    if(!RegisterClassEx(&wincl))
        return 0;

    hwnd = CreateWindowEx(
                          0,
                          szClassName,
                          "Windows App",
                          WS_SYSMENU,
                          CW_USEDEFAULT,
                          CW_USEDEFAULT,
                          sizeX,
                          sizeY,
                          HWND_DESKTOP,
                          NULL,
                          hThisInstance,
                          NULL
                      );

    // message loop here ...

    return 0;
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    // your code here ...

    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

有关详细信息,请参阅MSDN的文档:

Window Procedures