[英]c++ win32 textarea with line numbers?
我正在使用帶有Win32的MS Visual C ++ 2010 Express編寫記事本程序。 我有基本的設計,但是我希望能夠在文本區域旁邊顯示行號,就像您在大多數文本編輯器(例如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 ) );
“ EDIT”控件在頁邊距中沒有任何對行號(或其他任何內容)的內置支持。 在第一個旁邊創建另一個“ EDIT”控件,並將行號放在該控件中。
雖然標准的EDIT
多線控制本身並不支持行號的顯示,這是很容易一點點工作手動完成。
您可以使用EM_SETRECT
/ EM_SETRECTNP
在控件的一側為裝訂線創建空間,然后可以對控件進行子類化以攔截其WM_PAINT
消息,以便根據需要在裝訂線中繪制自己的行號。
繪制時,可以使用EM_CHARFROMPOS
, EM_LINEFROMCHAR
和EM_POSFROMCHAR
來幫助您將客戶區域坐標轉換為線號,並計算線高。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.