c++ - 对 `WindowProc(HWND__*, unsigned int, unsigned int, long)@16' 的 undefined reference

标签 c++ windows winapi

<分区>

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

undefined reference to 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
                      );
}

代码有什么问题?

最佳答案

您没有为 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

关于c++ - 对 `WindowProc(HWND__*, unsigned int, unsigned int, long)@16' 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43552866/

相关文章:

c++ - 奇怪的 Xcode 链接器警告构建 Poco C++ 应用程序

windows - 如何编写脚本来修改 Windows 服务器上用户的密码过期值?

winapi - 纯 C++/Win32 应用程序中的透明 PNG 文件

c++ - EnumWindows 不工作

boost::scoped_ptr 的 C++ 析构函数问题

c++ - 使用来自 C++ 的 ffmpeg hwaccel

c++ - iterator 和 const_iterator (STL) 效率不同

c - 可执行文件起始目录的绝对路径

linux - 在多个 Git 存储库之间共享 .mailmap 或其他顶级文件,跨平台

c++ - 是否可以在 MessageBox() 中显示 HWND->i?