我正在使用带有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 ) );
答案 0 :(得分:1)
“编辑”控件对边距中的行号(或其他任何内容)没有任何内置支持。在第一个旁边创建另一个“编辑”控件,并将行号放在那个控件中。
答案 1 :(得分:1)
虽然标准的EDIT
多行控件不支持显示行号支持行号的显示,但只需稍加工作就可以轻松完成。
您可以使用EM_SETRECT
/ EM_SETRECTNP
在控件的一侧为装订线创建空间,然后您可以对控件进行子类化以拦截其WM_PAINT
消息,以便您可以绘制根据需要在排水沟中使用您自己的行号。
绘图时,您可以使用EM_CHARFROMPOS
,EM_LINEFROMCHAR
和EM_POSFROMCHAR
来帮助您将客户区域坐标转换为行号,并计算行高。