开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 605|回复: 12
收起左侧

[已解决] 谁家AI玩c++得最牛的朋友,能帮帮忙吗?

 关闭 [复制链接]
结帖率:97% (36/37)
发表于 2026-4-24 10:01:55 | 显示全部楼层 |阅读模式   广东省惠州市
1000精币
C++写了一个D2D仿编辑框的类,就是一个在窗口上显示文本的控件类
现在我用的AI未能解决有2个:
1,就是卡在文本对几十万行,上百万行不能做到像"Notepad2记事本"一样丝滑的编辑文本.
2,未能实现左边有行数条显示.如图上的"Notepad2记事本"效果.
麻烦,有空的,又玩AI的朋友帮我实现下.谢谢!!
W编辑框.rar (825.72 KB, 下载次数: 3)

最佳答案

查看完整内容

ai说优化渲染了,但是我感觉和原来比也没更快,这个行号到万行装不下了,免费额度用完了不搞了

点评

模块中的类型,全是C/C++自带类型.请大胆的去对"module_HH_W编辑框.h"修改.炫语言只是一个调试环景.   广东省惠州市  发表于 2026-4-24 10:23

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值

签到天数: 26 天

发表于 2026-4-24 10:01:56 | 显示全部楼层   广西壮族自治区柳州市
360截图20260425012943208.jpg 360截图20260425012857023.jpg

ai说优化渲染了,但是我感觉和原来比也没更快,这个行号到万行装不下了,免费额度用完了不搞了
D2DEditBox.zip (962.44 KB, 下载次数: 1)

点评

行号是有了,但未实现行号以最长行号文本自动变宽.上万行文本后依然开始卡了!大家还得花时间改造!   广东省惠州市  发表于 2026-4-25 18:37
回复

使用道具 举报

结帖率:97% (36/37)

签到天数: 28 天

 楼主| 发表于 2026-4-24 10:25:13 | 显示全部楼层   广东省惠州市
#include <windows.h>
#include "module_HH_W编辑框.h"
// 全局变量
HINSTANCE g_hInstance = NULL;
HWND g_hEditWindow = NULL;
HH_W编辑框* g_编辑框 = nullptr;
const wchar_t g_窗口类名[] = L"HH_W编辑框无边框窗口类";
// 窗口过程
LRESULT CALLBACK 窗口过程(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
{
        switch (uMsg)
        {
       
        case WM_CREATE:
        {
                {
                {
                        // 创建编辑框
                        g_编辑框 = new HH_W编辑框();
                        if (g_编辑框)
                        {
                        {
                                // 获取窗口客户区大小
                                RECT rc;
                                GetClientRect(hWnd, &rc);
                                // 创建编辑框,填满整个客户区
                                HRESULT hr = g_编辑框->_创建(hWnd, 0.0f, 0.0f,
                                {
                                        {
                                                {
                                                        {
                                                                {
                                                                        {
                                                                                   static_cast<float>(rc.right),
                                                                                   static_cast<float>(rc.bottom));
                                                                        }
                                                                }
                                                        }
                                                }
                                        }
                                }
                                if (SUCCEEDED(hr))
                                {
                                {
                                        // 设置编辑框属性
                                        g_编辑框->_设置多行(1);
                                       
                                        //g_编辑框->_设置自动换行(1);  
                                        g_编辑框->_设置字体大小(16.0f);
                                        g_编辑框->_设置字体名称(L"微软雅黑");
                                        g_编辑框->_设置文本颜色(RGB(255, 255, 255));
                                        g_编辑框->_设置背景颜色(RGB(40, 40, 40));
                                        g_编辑框->_设置背景图(L"1.png", 2, 0.5f);
                                        g_编辑框->_设置边框宽度(1);  // 无边框
                                        g_编辑框->_设置显示边框(1);  // 不显示边框
                                       
                                        // 设置示例文本
                                        g_编辑框->_设置文本(L"这是一个无边框窗口中的编辑框\n可以输入多行文本\n\n试试点击和输入...");
                                }
                                }
                        }
                        }
                }
                }
                break;
        }
        case WM_SIZE:
        {
                if (g_编辑框)
                {
                {
                        // 当窗口大小改变时,调整编辑框大小
                }
                RECT rc;
                GetClientRect(hWnd, &rc);
                g_编辑框->_设置位置(0.0f, 0.0f,
                {
                        {
                                {
                                        {
                                                {
                                                           static_cast<float>(rc.right),
                                                           static_cast<float>(rc.bottom));
                                                }
                                        }
                                }
                        }
                }
               
                }
                break;
        }
        case WM_PAINT:
        {
                {
                {
                        //PAINTSTRUCT ps;
                        //HDC hdc = BeginPaint(hWnd, &ps);
                        // 绘制窗口背景
                        //RECT rc;
                        //GetClientRect(hWnd, &rc);
                        //HBRUSH hBrush = CreateSolidBrush(RGB(40, 40, 40));
                        //FillRect(hdc, &rc, hBrush);
                        //DeleteObject(hBrush);
                        // 绘制编辑框
                        if (g_编辑框)
                        {
                        {
                                g_编辑框->_绘制();
                                //g_编辑框->_绘制滚动条();
                        }
                        }
                        //EndPaint(hWnd, &ps);
                }
                }
                break;
        }
        case WM_CHAR:
        {
                if (g_编辑框 && g_编辑框->_处理字符输入(wParam, lParam))
                {
                {
                        //InvalidateRect(hWnd, NULL, TRUE);
                }
                }
                break;
        }
        case WM_KEYDOWN:
        {
                if (g_编辑框 && g_编辑框->_处理按键输入(wParam, lParam))
                {
                {
                        //InvalidateRect(hWnd, NULL, TRUE);
                }
                }
                break;
        }
        case WM_LBUTTONDOWN:
        {
                {
                {
                        int x = GET_X_LPARAM(lParam);
                        int y = GET_Y_LPARAM(lParam);
                        if (g_编辑框)
                        {
                        {
                                g_编辑框->_处理鼠标左键按下(x, y, (wParam &MK_SHIFT) != 0);
                        }
                        }
                        // 允许拖动无边框窗口
                        //SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
                }
                }
                break;
        }
        case WM_LBUTTONUP:
        {
                if (g_编辑框)
                {
                {
                        int x = GET_X_LPARAM(lParam);
                        int y = GET_Y_LPARAM(lParam);
                        g_编辑框->_处理鼠标左键释放(x, y);
                        //InvalidateRect(hWnd, NULL, TRUE);
                }
                }
                break;
        }
        case WM_MOUSEMOVE:
        {
                if (g_编辑框 && g_编辑框->_是否获得焦点())
                {
                {
                        int x = GET_X_LPARAM(lParam);
                        int y = GET_Y_LPARAM(lParam);
                        g_编辑框->_处理鼠标移动(x, y);
                }
                }
                break;
        }
        case WM_LBUTTONDBLCLK:
        {
                if (g_编辑框)
                {
                {
                        int x = GET_X_LPARAM(lParam);
                        int y = GET_Y_LPARAM(lParam);
                        g_编辑框->_处理鼠标双击(x, y);
                }
                }
                break;
        }
        case WM_MOUSEWHEEL:
        {
                if (g_编辑框)
                {
                {
                        int 滚动量 = GET_WHEEL_DELTA_WPARAM(wParam);
                        int 标志 = GET_KEYSTATE_WPARAM(wParam);
                        g_编辑框->_处理鼠标滚轮(滚动量, 标志);
                }
                }
                break;
        }
        case WM_TIMER:
        {
                if (wParam == 1 && g_编辑框)
                {
                {
                        //g_编辑框->_处理光标闪烁();
                }
                }
                break;
        }
        case WM_SETFOCUS:
        {
                if (g_编辑框)
                {
                {
                        g_编辑框->_设置焦点(true);
                }
                }
                break;
        }
        case WM_KILLFOCUS:
        {
                if (g_编辑框)
                {
                {
                        g_编辑框->_设置焦点(false);
                }
                }
                break;
        }
        case WM_DESTROY:
        {
                if (g_编辑框)
                {
                {
                        delete g_编辑框;
                        g_编辑框 = nullptr;
                }
                }
                PostQuitMessage(0);
                break;
        }
        default:
        {
                return DefWindowProc(hWnd, uMsg, wParam, lParam);
        }
        }
        return 0;
}
}
// 创建无边框窗口
HWND 创建无边框窗口(HINSTANCE hInstance, int 宽度, int 高度)
{
{
        // 注册窗口类
        WNDCLASS wc = {};
        wc.lpfnWndProc = 窗口过程;
        wc.style = CS_DBLCLKS; // ← 这个!允许窗口接收双击消息
        wc.hInstance = hInstance;
        wc.lpszClassName = g_窗口类名;
        wc.hCursor = LoadCursor(NULL, IDC_IBEAM);
        wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
        if (!RegisterClass(&wc))
        {
        {
                MessageBox(NULL, L"窗口类注册失败!", L"错误", MB_ICONERROR);
                return NULL;
        }
        }
        // 创建无边框窗口
        // 注意:使用 WS_POPUP 样式创建无边框窗口
        // 添加 WS_THICKFRAME 以便可以调整大小
        HWND hWnd = CreateWindow(
        {
                g_窗口类名,
                L"无边框编辑框窗口",
                WS_POPUP | WS_VISIBLE,  // 无边框,不可调整大
                //WS_POPUP | WS_VISIBLE | WS_THICKFRAME,  // 无边框,可调整大小
                CW_USEDEFAULT, CW_USEDEFAULT,
                宽度, 高度,
                NULL,
                NULL,
                hInstance,
                NULL
        }
        );
        return hWnd;
}
}
// 主函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
{
        g_hInstance = hInstance;
        // 创建无边框窗口
        g_hEditWindow = 创建无边框窗口(hInstance, 600, 400);
        if (!g_hEditWindow)
        {
        {
                MessageBox(NULL, L"窗口创建失败!", L"错误", MB_ICONERROR);
                return 0;
        }
        }
        // 显示窗口
        ShowWindow(g_hEditWindow, nCmdShow);
        UpdateWindow(g_hEditWindow);
        // 创建光标闪烁定时器
        SetTimer(g_hEditWindow, 1, 5000, NULL);
        // 消息循环
        MSG msg = {};
        while (GetMessage(&msg, NULL, 0, 0))
        {
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        }
        return (int)msg.wParam;
}
}//以上是例子
回复

使用道具 举报

结帖率:33% (1/3)

签到天数: 28 天

发表于 2026-4-24 11:43:21 | 显示全部楼层   湖南省常德市
丝滑显示,那肯定是虚表,只画你看到的位置
回复

使用道具 举报

结帖率:100% (6/6)

签到天数: 26 天

发表于 2026-4-24 14:01:59 | 显示全部楼层   安徽省蚌埠市
丝滑双缓冲 分段加载显示
回复

使用道具 举报

结帖率:88% (7/8)

签到天数: 28 天

发表于 2026-4-24 15:27:30 | 显示全部楼层   北美地区
说明AI太垃圾 换Claude 就可以解决了

点评

北美地区,你在哪呢   安徽省合肥市  发表于 2026-4-24 15:48
回复

使用道具 举报

签到天数: 26 天

发表于 2026-4-26 01:07:53 | 显示全部楼层   广西壮族自治区柳州市
360截图20260426000336061.jpg 360截图20260426000041465.jpg 360截图20260426000339568.jpg 360截图20260426000501929.jpg 360截图20260426000457896.jpg
行号条自动宽度有了.大文本性能ai搞得一套一套的,也没有变快.
D2DEditBox.zip (1.1 MB, 下载次数: 0)
回复

使用道具 举报

结帖率:97% (36/37)

签到天数: 28 天

 楼主| 发表于 2026-4-26 07:58:55 | 显示全部楼层   广东省惠州市
dghjgg 发表于 2026-4-26 01:07
行号条自动宽度有了.大文本性能ai搞得一套一套的,也没有变快.

W编辑框2026-4-26.rar (22.32 KB, 下载次数: 0)
回复

使用道具 举报

签到天数: 9 天

发表于 2026-4-26 08:14:25 | 显示全部楼层   河北省石家庄市
感谢分享
回复

使用道具 举报

签到天数: 26 天

发表于 2026-4-27 00:01:42 | 显示全部楼层   广西壮族自治区柳州市
呵呵仙 发表于 2026-4-26 07:58
你用的是什么AI!?按网上大佬说的.叫AI改用虚表.当所在行按下回车时,插入空行等.我的是TX的QClaw.又慢又 ...

用的CodeBuddyIDE也是tx家的,模型选glm-5.1.提示词我让deepseek生成
360截图20260426231205770.jpg 360截图20260426233526226.jpg
这个优化,嗯,ai改了几次之后还是这个速度.没有突破点的话其实就这样了.
360截图20260426235328947.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表