【问题标题】:c++ win32 textarea with line numbers?c ++ win32 textarea与行号?
【发布时间】:2023-03-15 01:15:02
【问题描述】:

我正在使用带有 Win32 的 MS Visual C++ 2010 Express 编写记事本程序。我有它的基本设计,但是我希望能够在 textarea 旁边显示行号,就像你在大多数文本编辑器(即 notepad++、sublime 等)中看到的那样。我对 textarea 的代码是:

hEdit = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 0, 0, 100, 100, hwnd, ( HMENU )IDC_MAIN_EDIT, GetModuleHandle( NULL ), NULL );
            if( hEdit == NULL )
                MessageBox( hwnd, "Could not create edit box.", "Error", MB_OK | MB_ICONERROR );

            hfDefault = CreateFont( 0, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, TEXT( "Consolas" ) );
            SendMessage( hEdit, WM_SETFONT, ( WPARAM )hfDefault, MAKELPARAM( FALSE, 0 ) );

【问题讨论】:

    标签: c++ winapi textarea line-numbers


    【解决方案1】:

    “EDIT”控件在页边空白处没有对行号(或其他任何内容)的任何内置支持。在第一个旁边创建另一个“EDIT”控件并将行号放入该控件中。

    【讨论】:

      【解决方案2】:

      虽然标准的EDIT 多行控件本机不支持行号的显示,但这很容易通过少量工作手动完成。

      您可以使用EM_SETRECT/EM_SETRECTNP 在控件的一侧为装订线创建空间,然后您可以子类化控件以拦截其WM_PAINT 消息,以便您可以在根据需要进行排水沟。

      在绘图时,您可以使用EM_CHARFROMPOSEM_LINEFROMCHAREM_POSFROMCHAR 帮助您将客户区坐标转换为行号,并计算行高。

      【讨论】:

        猜你喜欢
        • 2012-07-02
        • 1970-01-01
        • 2019-11-15
        • 2014-11-12
        • 2012-01-15
        • 2013-12-30
        • 2016-05-12
        • 2018-03-25
        • 1970-01-01
        相关资源
        最近更新 更多