У меня проблема с созданием окна с C ++ - PullRequest
0 голосов
/ 05 октября 2019

Я хочу создать окно с C ++, но у меня есть проблема.

Это мой код:

#include <windows.h>
#include <winuser.h>

int CreateDetectWindow()
{
    MSG msg;
    WNDCLASS wndc;

    LPSTR szAppName = "Web Download";

    wndc.style = 0;
    wndc.lpfnWndProc = WNDPROC;
    wndc.cbClsExtra = 0;
    wndc.cbWndExtra = 0;
    wndc.hInstance = NULL;
    wndc.hIcon = NULL;
    wndc.hCursor = NULL;
    wndc.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
    wndc.lpszMenuName = NULL;
    wndc.lpszClassName = szAppName;

    RegisterClass(&wndc);

    HWND hWnd = CreateWindow(szAppName,"whboy",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,CW_USEDEFAULT,
        CW_USEDEFAULT,CW_USEDEFAULT,
        NULL,NULL,NULL,NULL);

    ShowWindow(hWnd,SW_SHOW);
    UpdateWindow(hWnd);

    SendMessage(hWnd,WM_DEVICECHANGE,0,0);

    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 1;
}

int main(){
    CreateDetectWindow();
}

И ошибка со строкой 9 выглядит так:

[Ошибка] D: \ developer \ C C ++ \ window.cpp: 9: ошибка: ожидаемое первичное выражение перед ';'токен

Я использую 64-битную Windows 10 и IDE под названием C-Free.

1 Ответ

2 голосов
/ 06 октября 2019

Эта строка неверна:

wndc.lpfnWndProc = WNDPROC;

WNDPROC - это тип, а не переменная. lpfnWndProc ожидает указатель на функцию, которая соответствует сигнатуре, определенной WNDPROC, например:

#include <windows.h>

LRESULT CALLBACK MyWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        ...
        case WM_DEVICECHANGE:
        {
            ...
            break;
        }
        ...
    }

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

int CreateDetectWindow()
{
    ...
    wndc.lpfnWndProc = &MyWindowProc; 
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...