windows窗体换行问题

我想点换行然后实现下面rich text box的换行,那“换行HToolStripMenuItem”的代码要怎么写?

img

如下回答引用gpt

假设你是在 Windows Forms 应用程序中使用 C++/CLI 编写的,可以使用如下代码实现“换行HToolStripMenuItem”:


private: System::Void 换行HToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
    richTextBox1->AppendText("\n"); // 在richTextBox1中添加一个换行符
}

当用户单击“换行HToolStripMenuItem”时,会在 richTextBox1 控件中插入一个换行符。

如果你使用的是纯 C++,可以使用类似下面的代码实现:


#include <windows.h>
#include <richedit.h>

// 定义一个全局变量,用于保存rich edit控件的句柄
HWND g_hRichEdit = NULL;

// 定义一个消息处理函数,用于处理WM_COMMAND消息
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
    switch (message) {
        case WM_CREATE: {
            // 创建一个rich edit控件,并保存其句柄到全局变量g_hRichEdit中
            g_hRichEdit = CreateWindowEx(0, RICHEDIT_CLASS, L"", ES_MULTILINE | WS_VISIBLE | WS_CHILD | WS_BORDER,
                10, 10, 300, 200, hWnd, NULL, GetModuleHandle(NULL), NULL);
            break;
        }
        case WM_COMMAND: {
            // 处理WM_COMMAND消息
            switch (LOWORD(wParam)) {
                case ID_HUANXING: {
                    // 如果用户单击了“换行”菜单项,则在rich edit控件中插入一个换行符
                    SendMessage(g_hRichEdit, EM_REPLACESEL, TRUE, (LPARAM)L"\n");
                    break;
                }
            }
            break;
        }
        case WM_DESTROY: {
            // 销毁rich edit控件
            DestroyWindow(g_hRichEdit);
            PostQuitMessage(0);
            break;
        }
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) {
    // 注册窗口类
    WNDCLASSEX wcex;
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wcex.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
    wcex.lpszClassName = L"MyWindowClass";
    wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION);
    if (!RegisterClassEx(&wcex)) {
        MessageBox(NULL, L"窗口类注册失败!", L"错误", MB_ICONERROR);
        return 0;
    }

    // 创建窗口
    HWND hWnd = CreateWindow(L"MyWindowClass", L"Rich Edit", WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 340, 300, NULL, NULL, hInstance, NULL);
    if (!hWnd) {
        MessageBox(NULL, L"窗口创建失败!", L"错误", MB_ICONERROR);
        return 0;
    }

    // 显示窗口
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

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

    return (int)msg.wParam;
}

richTextBox1.Text+="\n";
这是在最后加换行符
如果你需要在光标的位置加换行符,那么你需要每次点击鼠标或者按下键盘之后都记录下光标位置
因为你去点菜单的时候富文本框就会失去焦点,光标可能会不见了
然后你可以在光标位置插入换行符