繼承 CEditView,在左側保留空間繪製行號與斷點圖示。關鍵步驟:
OnInitialUpdate 取得行高,呼叫 SetMargins 預留空間。SIZE size; GetTextExtentPoint(GetDC()->GetSafeHdc(), "A", 1, &size);
m_LineHeight = size.cy;
GetEditCtrl().SetMargins(m_LineHeight + 6, 0);
std::list<int>,提供 AddRemoveBP 切換斷點。void AddRemoveBP(int line) {
auto it = find(lBreakPoint.begin(), lBreakPoint.end(), line);
if (it != lBreakPoint.end()) lBreakPoint.erase(it);
else lBreakPoint.push_back(line);
}
PaintLeft 以 GetWindowDC 直接繪製背景、斷點紅圓(依可見行號計算 Y 座標)。LineFromChar(-1)+1)切換斷點。OnVScroll、OnHScroll、OnSize、OnPaint 等訊息後呼叫 PaintLeft。
GetWindowDC 而非 CPaintDC 以便在非 WM_PAINT 時繪製。