我的20开始了 2021-03-24 23:35 采纳率: 0%
浏览 16

求大佬棒棒忙 c++创建窗口

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
    );
}

  • 写回答

1条回答 默认 最新

  • cpp_learners 2021-03-25 08:13
    关注

    你可以将其强制类型转换,但是这样又会出现新的问题。

    wc.lpfnWndProc = (WNDPROC)WndProc;                                                    //就是这行除了问题

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?