以下是一个简单的测试代码,用于绘制一张图并将其复制到剪贴板:

#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) {
    // Register the window class.
    const char CLASS_NAME[]  = "Sample Window Class";

    WNDCLASS wc = {0};

    wc.lpfnWndProc   = WindowProc;
    wc.hInstance     = hInstance;
    wc.lpszClassName = CLASS_NAME;

    RegisterClass(&wc);

    // Create the window.

    HWND hwnd = CreateWindowEx(
        0,                              // Optional window styles.
        CLASS_NAME,                     // Window class
        "Learn to Program Windows",     // Window text
        WS_OVERLAPPEDWINDOW,            // Window style

        // Size and position
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

        NULL,       // Parent window    
        NULL,       // Menu
        hInstance,  // Instance handle
        NULL        // Additional application data
    );

    if (hwnd == NULL) {
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);

    // Run the message loop.

    MSG msg = {0};

    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_CREATE: {
            // Create a bitmap to draw on.
            HDC hdc = GetDC(hwnd);

            int width = GetSystemMetrics(SM_CXSCREEN);
            int height = GetSystemMetrics(SM_CYSCREEN);

            HBITMAP hBitmap = CreateCompatibleBitmap(hdc, width, height);
            HBITMAP hOldBitmap = (HBITMAP)SelectObject(hdc, hBitmap);

            // Draw on the bitmap.
            DrawText(hdc, "Hello, world!", -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);

            // Copy the bitmap to the clipboard.
            OpenClipboard(hwnd);
            EmptyClipboard();
            SetClipboardData(CF_BITMAP, hBitmap);
            CloseClipboard();

            // Clean up.
            SelectObject(hdc, hOldBitmap);
            DeleteObject(hBitmap);
            ReleaseDC(hwnd, hdc);

            return 0;
        }

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

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

在该示例中,我们在窗口创建时使用GetSystemMetrics函数获得屏幕的宽度和高度,并创建一个与之相同大小的位图。然后,我们在位图上使用DrawText函数绘制文本,并将其复制到剪贴板上。在复制位图之前,我们并未使用GetTextExtent函数,因此无需担心在剪贴板中字符串长度不正确的问题

用vc画图为了让x坐标上各数值的位置右对齐用TextOut使用了GetTextExtent函数来获得坐标值的字符串长度。当把图复制到剪贴板时相当于在剪贴板里画这个函数返回的坐标字符串长度就不正确提供正确的测试代码

原文地址: https://www.cveoy.top/t/topic/epDp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录