Luxifer9v9 发表于 2022-6-3 21:50:32

WinMain批注不一致

本帖最后由 Luxifer9v9 于 2022-6-3 21:55 编辑

#include <windows.h>
#pragma comment (lib, "winmm.lib")

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] = TEXT("Hint!");
    HWND hwnd;
    MSG msg;
    WNDCLASS wndclass;


    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = szAppName;

    if (!RegisterClass(&wndclass))
    {
      MessageBox(NULL, TEXT("这个程序需要在 Windows NT 才能执行!"), szAppName, MB_ICONERROR);
      return 0;
    }

    hwnd = CreateWindow(szAppName,
      TEXT("Window"),
      WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT,
      CW_USEDEFAULT,
      CW_USEDEFAULT,
      CW_USEDEFAULT,
      NULL,
      NULL,
      hInstance,
      NULL);

    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);

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

    return msg.wParam;
}


LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;

    switch (message)
    {
    case WM_CREATE:
      PlaySound(TEXT("C:\\Users\\Constantine\\Music\\canyons.mp3"), NULL, SND_FILENAME | SND_ASYNC);
      return 0;

    case WM_PAINT:
      hdc = BeginPaint(hwnd, &ps);
      GetClientRect(hwnd, &rect);
      TextOut(hdc, 400, 300, TEXT("客户区"), 3);
      EndPaint(hwnd, &ps);
      return 0;

    case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
    }

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

人造人 发表于 2022-6-3 21:56:10

这是什么?

Luxifer9v9 发表于 2022-6-3 21:58:46

vs2019说我WinMain批注不一致,我按照网上说的把项目属性-->系统-->子系统里的窗口从“控制台”改为了“窗口”还是没有用

jackz007 发表于 2022-6-3 22:22:16

库文件除了
#pragma comment (lib, "winmm.lib")
外,还必须添加下面 2 个库
#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "user32.lib")
然后,在 VC2022 只要用命令行就可以编译:
D:\\>cl w.c
用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.31.31107 版
版权所有(C) Microsoft Corporation。保留所有权利。

w.c
Microsoft (R) Incremental Linker Version 14.31.31107.0
Copyright (C) Microsoft Corporation.All rights reserved.

/out:w.exe
w.obj

D:\\>

Luxifer9v9 发表于 2022-6-3 23:19:19

本帖最后由 Luxifer9v9 于 2022-6-4 07:41 编辑

Luxifer9v9 发表于 2022-6-4 07:40:41

jackz007 发表于 2022-6-3 22:22
库文件除了

外,还必须添加下面 2 个库


加了,还是提示我WinMian批注不一致

jackz007 发表于 2022-6-4 12:01:11

本帖最后由 jackz007 于 2022-6-4 12:08 编辑

Luxifer9v9 发表于 2022-6-4 07:40
加了,还是提示我WinMian批注不一致

    这一句
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    改为
int WINAPI WinMain(
    _In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPSTR szCmdLine,
    _In_ int iCmdShow)
    这一句
      TextOut(hdc, 400, 300, TEXT("客户区"), 3);
    改为
      TextOut(hdc, 400, 300, TEXT("客户区"), 6);
    试试看呢
页: [1]
查看完整版本: WinMain批注不一致