2013-10-06 62 views
1

我正在寫一個使用MS Visual C++ 2010 Express與Win32的記事本程序。我有它的基本設計,但是我希望能夠在textarea旁邊顯示行號,就像您在大多數文本編輯器中看到的那樣(即notepad ++,sublime等)。我對textarea的代碼是:帶有行號的C++ win32 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)); 

回答

1

「EDIT」控件沒有任何內置的對行號(或任何其他內容)的支持。在第一個旁邊創建另一個「編輯」控件,並將行號放在該編號中。

1

雖然標準EDIT多線控制本身不支持支持顯示線號,但這很容易通過一些小工作手動完成。

您可以使用EM_SETRECT/EM_SETRECTNP爲沿控制一側的排水溝創造空間,然後你也可以繼承的控制攔截其WM_PAINT消息,以便您可以根據需要在陰溝裏繪製自己的行號。

在繪圖時,您可以使用EM_CHARFROMPOSEM_LINEFROMCHAREM_POSFROMCHAR來幫助您將客戶區域座標轉換爲線數,並計算線高。