cbs_cbs 2024-07-26 19:04 采纳率: 33.3%
浏览 11

关于 EM_INSERTIMAGE 事件

win32,RichEdit 中的 EM_INSERTIMAGE 事件,应该怎么用啊?我试了根本显示不了。而且官网也没有示例:https://learn.microsoft.com/zh-cn/windows/win32/controls/em-insertimage

希望能提供一份 win32 C++ 代码,完成在 Richedit 控件中添加图片


如下是我创建 RichEdit 的代码,希望对答题有帮助。

#include <windows.h>
#include <richedit.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    static HWND richedit;
    switch (msg) {
        case WM_CREATE: {
            LoadLibrary(TEXT("Msftedit.dll")); // 加载库
            richedit = CreateWindowExW(0, MSFTEDIT_CLASS, L"", WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 500, 500, hwnd, NULL, NULL, NULL);
            return 0;
        }
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    const char* CLASS_NAME = "MyWindowClass";
    WNDCLASS wc= {};
    wc.lpfnWndProc=WndProc, wc.hInstance=hInstance, wc.lpszClassName=CLASS_NAME;
    RegisterClass(&wc);
    HWND hwnd = CreateWindowEx(0,CLASS_NAME,"create richedit",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,500,500,NULL,NULL,hInstance,NULL);
    if (hwnd == NULL) return 0;
    ShowWindow(hwnd, nCmdShow);
    MSG msg = {};
    while (GetMessage(&msg,NULL,0,0)) TranslateMessage(&msg), DispatchMessage(&msg); // 处理消息
    return msg.wParam;
}
  • 写回答

1条回答 默认 最新

  • 专家-司宇[在线] 2024-07-26 19:04
    关注

    引自免费微信小程序:皆我百晓生

    在 Win32 C++ 中使用 RichEdit 控件的 EM_INSERTIMAGE 事件插入图片,你需要发送这个消息给 RichEdit 控件,并附带图像数据的参数。以下是实现这一功能的步骤和示例代码:

    步骤:

    1. 创建 RichEdit 控件。
    2. 当需要插入图片时,获取图像数据的句柄(例如,通过加载图像文件获得)。
    3. 使用 SendMessage 函数发送 EM_INSERTIMAGE 消息,并附带图像数据的参数。

    示例代码:

    假设你已经创建了 RichEdit 控件(如你提供的代码所示),下面是如何插入图片的示例代码:

    // 假设你已经有了图像的 HBITMAP 或 HICON 句柄。这里只是示例,你需要从文件加载图像或获取图像句柄。
    HBITMAP hBitmap; // 你的图像句柄,需要先加载图像文件获得这个句柄。
    
    // 在合适的位置(比如按钮点击事件处理函数内),插入图片到 RichEdit 控件中。
    void InsertImageToRichEdit(HWND hRichEdit, HBITMAP hBitmap) {
        // 将图像数据发送到 RichEdit 控件的 EM_INSERTIMAGE 消息中。注意这里的wParam通常为0,lParam包含图像数据的位置和大小信息。
        // 通常你需要自己封装图像数据并计算尺寸等信息,这里简化处理假设所有细节都已经处理好了。
        SendMessage(hRichEdit, EM_INSERTIMAGE, 0, (LPARAM)hBitmap); // 这里发送消息插入图片。
    }
    

    图像句柄的获取:

    如果你需要从文件加载图像并获取 HBITMAP 句柄,可以使用 LoadImage 函数或 CreateDIBSection 等函数。这部分代码涉及到 GDI(图形设备接口)函数的使用,较为复杂,如果需要具体实现可以进一步说明。

    注意:

    • 确保你的应用程序已经正确链接了 Msftedit.dll
    • EM_INSERTIMAGE 需要一个图像句柄作为参数,确保你正确获取了这个句柄。
    • 根据你的实际需求调整代码,比如处理图像数据的格式和大小等细节。
    • Microsoft 的文档可能并不总是包含详尽的示例代码,特别是在一些较为高级的控件或功能上。在这种情况下,可能需要查看社区论坛或示例代码来获取更多帮助。
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月26日