簡體   English   中英

帶有行號的C ++ Win32 textarea?

[英]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_CHARFROMPOSEM_LINEFROMCHAREM_POSFROMCHAR來幫助您將客戶區域坐標轉換為線號,並計算線高。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM