windows编程入门_链接错误的配置
  6DMaaPzJglxt 2023年12月05日 35 0



入门常见的错误

  • 前言
  • window编程示例
  • 无法解析外部符号
  • 解决办法
  • 结束



windows编程入门_链接错误的配置_windows

前言

大家好,我是yma16,本文分享windows编程入门_链接错误的配置

window编程示例

以下是一个简单的 C++ Windows GUI 程序示例,它创建了一个窗口并在其中显示一段文本:

#include <windows.h>

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

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 注册窗口类
    WNDCLASS wc = {};
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = "MyClass";
    RegisterClass(&wc);

    // 创建窗口
    HWND hwnd = CreateWindow("MyClass", "My Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 500, NULL, NULL, hInstance, NULL);

    // 显示窗口
    ShowWindow(hwnd, nCmdShow);

    // 循环消息
    MSG msg = {};
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;

    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
            const char* text = "Hello, world!";
            TextOut(hdc, 100, 100, text, strlen(text));
            EndPaint(hwnd, &ps);
        }
        return 0;

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

该程序使用 WinMain 函数作为应用程序的入口点,它创建一个窗口并进入消息循环直到接收到 WM_QUIT 消息。窗口过程 WindowProc 函数处理窗口消息并在窗口中绘制文本。在该示例中,我们使用 TextOut 函数在窗口客户区域显示一段文本。

注意,该示例称为 “My Window” 窗口,其类名为 “MyClass”。在注册窗口类和创建窗口时,需要使用相应的名称。在 WindowProc 函数中,我们处理了 WM_DESTROY 和 WM_PAINT 消息。在窗口关闭时,我们使用 PostQuitMessage 函数发送 WM_QUIT 消息以退出消息循环。在窗口需要绘制时,我们使用 BeginPaint 和 EndPaint 函数处理绘制操作。
C++的的window编程实例
这是一个使用C++和Windows API编写的简单窗口应用程序,它可以显示一个窗口并响应关闭事件。

#include <windows.h>

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

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 定义窗口类
    WNDCLASS wc = {};
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = L"MyWindowClass";

    // 注册窗口类
    RegisterClass(&wc);

    // 创建窗口
    HWND hwnd = CreateWindowEx(0,
        L"MyWindowClass",
        L"My Window",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        800, 600,
        nullptr,
        nullptr,
        hInstance,
        nullptr);

    // 显示窗口
    ShowWindow(hwnd, nCmdShow);

    // 循环消息
    MSG msg = {};
    while (GetMessage(&msg, nullptr, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

// 窗口过程
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }

    return 0;
}

这个程序创建了一个简单的窗口,当用户关闭窗口时,它会发送 WM_DESTROY消息。在窗口过程中,我们捕获了这个消息并调用 PostQuitMessage(0)以终止程序的消息循环。在 WinMain函数中,我们在消息循环中调用 GetMessage函数以等待消息,将它们翻译为窗口消息并将它们分派给窗口过程处理。

无法解析外部符号

常见:

MSVCRTD.lib(exe_main.obj) : error LNK2019: 无法解析的外部符号 _main,函数 “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ) 中引用了该符号

windows编程入门_链接错误的配置_window编程_02

解决办法

打开项目属性中的链接器

windows编程入门_链接错误的配置_window编程_03


关闭链接开关

windows编程入门_链接错误的配置_消息循环_04


ok,这样就可以运行

windows编程入门_链接错误的配置_window编程_05

结束

本文分享到这结束,如有错误或者不足之处欢迎指出,感谢大家的阅读!


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月05日 0

暂无评论

推荐阅读
6DMaaPzJglxt