// LogEdit.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù. // #include "stdafx.h" #include "LogEdit.h" // CLogEdit IMPLEMENT_DYNAMIC(CLogEdit, CEdit) CLogEdit::CLogEdit() { } CLogEdit::~CLogEdit() { } BEGIN_MESSAGE_MAP(CLogEdit, CEdit) ON_WM_CHAR() ON_WM_RBUTTONDOWN() END_MESSAGE_MAP() // CLogEdit ¸Þ½ÃÁö 󸮱âÀÔ´Ï´Ù. void CLogEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. // CEdit::OnChar(nChar, nRepCnt, nFlags); } void CLogEdit::OnRButtonDown(UINT nFlags, CPoint point) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. CEdit::OnRButtonDown(nFlags, point); } void CLogEdit::AddLine(LPCTSTR szLine, int nIndex, bool bNewLine) { m_szTempLine.SetString(szLine); if (bNewLine) { m_szTempLine.Append("\r\n"); } if (OpenClipboard()) { EmptyClipboard(); BOOL bAddedLine = FALSE; int nLength = m_szTempLine.GetLength(); HANDLE hGlobalCopy = GlobalAlloc(GMEM_MOVEABLE, (nLength + 1) * sizeof(TCHAR)); if (0 != hGlobalCopy) { // Lock the handle and copy the text to the buffer. LPTSTR lptstrCopy = reinterpret_cast(GlobalLock(hGlobalCopy)); memcpy(lptstrCopy, m_szTempLine.GetString(), nLength * sizeof(TCHAR)); lptstrCopy[nLength] = _T('\0'); GlobalUnlock(hGlobalCopy); // Place the handle on the clipboard. if(0 != SetClipboardData(CF_TEXT, hGlobalCopy)) { bAddedLine = TRUE; } else { GlobalFree(hGlobalCopy); } } CloseClipboard(); if (bAddedLine) { int nCharPos = 0; int nLinePos = 0; if (-1 == nIndex || -1 == (nCharPos = LineIndex(nIndex))) { // ¸Ç ¸¶Áö¸· ¶óÀο¡ Ãß°¡ nLinePos = GetLineCount(); nCharPos = GetWindowTextLength(); SetSel(nCharPos, nCharPos); } else { // ÇöÀç ¶óÀο¡ Ãß°¡ SetSel(nCharPos, nCharPos); nLinePos = LineFromChar(nCharPos); } Paste(); LineScroll(nLinePos); } } }