Friday, October 24, 2008

CrystalEditView

현재 CrystalEdit을 컨트롤로 사용하고 있는데, 사용하기에 귀찮은 것이 좀 많다.

라인 추가하는 것도 별도로 구현해야 하는 데, 좀 까다롭군. (내가 잘못한 것일 수도 있지만...)

문제는 아니지만, InsertText 함수 하나에 프로그램이 죽어버리는 것이 좀 문제이다.

현재 보이는 CrystalEdit의 단점이라면, 편의 함수가 좀 없다는 것

--
LocateTextBuffer함수를 구현하지 않으면 죽어버린다.
내부적으로 사용하는 버퍼를 직접적으로 연결해야 한다.
뷰를 가질때 사용하는 것으로 보이는데... 만약 뷰를 사용하지 않는다면?

CCrystalTextBuffer *NFCrystalEditControl::LocateTextBuffer()
{
return &((NFLogDlg*)GetParent())->m_textbuffer;
}


단순한 마우스 휠 기능 추가.
BOOL NFCrystalEditControl::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// TODO: Add your message handler code here and/or call default
if(zDelta < WHEEL_DELTA)
ScrollDown();
else
ScrollUp();

return CCrystalTextView::OnMouseWheel(nFlags, zDelta, pt);
}


한줄 붙이기, 현재 커서를 마지막으로 옮기고, 한줄 붙인 다음, 그 줄을 보이도록 한다.
EnsureVisible 함수를 찾기가(?) 함들었다.
*** EnsureVisible에서 뷰를 업데이트 할 경우에 죽는 경우가 생긴다. 이는 AttachToBuffer 함수를 부르지 않는 것으로 일단 해결.

void NFCrystalEditControl::AppendLine(LPCTSTR pszChars)
{
CString msg;
msg = pszChars;
msg += "\r\n";

CCrystalTextBuffer *buffer = LocateTextBuffer();
int n = buffer->GetLineCount();

int x, y;
//tb->InsertText(this, ptCursorPos.y, ptCursorPos.x, pszChars, y, x, CE_ACTION_PASTE); // [JRT]
BOOL retcode = buffer->InsertText(this, n-1, 0, msg, y, x, CE_ACTION_PASTE); // [JRT]
if(retcode == TRUE)
{
CPoint ptCursorPos;// = GetCursorPos();
ptCursorPos.x = x;
ptCursorPos.y = y;

//ScrollToLine(y); // 현재 포인터가 보이는 곳으로 화면을 갱신한다.
//EnsureVisible(ptCursorPos); // 현재 포인터가 보이는 곳으로 화면을 갱신한다.
}
}

No comments: