以下为使用 VC++ 绘制一个矩形并将其复制到剪贴板,并使用 GetTextExtent 获取字符长度的代码示例:

#include <Windows.h>
#include <tchar.h>

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    // Register window class
    const TCHAR szClassName[] = _T("MyWindowClass");
    WNDCLASS wc = { 0 };
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = szClassName;
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    if (!RegisterClass(&wc)) {
        MessageBox(NULL, _T("Window Registration Failed!"), _T("Error"), MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    // Create window
    HWND hwnd = CreateWindow(szClassName, _T("My Window"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL);
    if (hwnd == NULL) {
        MessageBox(NULL, _T("Window Creation Failed!"), _T("Error"), MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    // Show window
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // Message loop
    MSG msg = { 0 };
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {
    case WM_PAINT:
        // Draw rectangle
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hwnd, &ps);
        RECT rect = { 50, 50, 200, 200 };
        FillRect(hdc, &rect, (HBRUSH)(COLOR_WINDOW + 1));
        EndPaint(hwnd, &ps);

        // Copy to clipboard
        OpenClipboard(hwnd);
        EmptyClipboard();
        HBITMAP hBitmap = CreateCompatibleBitmap(hdc, rect.right - rect.left, rect.bottom - rect.top);
        HDC hMemDC = CreateCompatibleDC(hdc);
        HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
        BitBlt(hMemDC, 0, 0, rect.right - rect.left, rect.bottom - rect.top, hdc, rect.left, rect.top, SRCCOPY);
        SelectObject(hMemDC, hOldBitmap);
        SetClipboardData(CF_BITMAP, hBitmap);
        CloseClipboard();

        // Get character length
        HDC hScreenDC = GetDC(NULL);
        HFONT hFont = CreateFont(16, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, _T("Arial"));
        HFONT hOldFont = (HFONT)SelectObject(hScreenDC, hFont);
        SIZE size;
        GetTextExtentPoint32(hScreenDC, _T("Hello, World!"), _tcslen(_T("Hello, World!")), &size);
        SelectObject(hScreenDC, hOldFont);
        DeleteObject(hFont);
        ReleaseDC(NULL, hScreenDC);

        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hwnd, msg, wParam, lParam);
}

该示例使用 CreateCompatibleBitmap 创建一个与屏幕兼容的位图,并使用 BitBlt 将矩形复制到该位图中。然后,使用 SetClipboardData 将位图复制到剪贴板中。最后,使用 GetTextExtentPoint32 在屏幕设备上创建一个字体并获取'Hello, World!'的字符长度。请注意,此代码仅用于演示目的,实际应用程序可能需要进行更多错误检查和资源清理。

VC++ 绘制矩形并复制到剪贴板,获取字符长度示例

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

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