// inwnd.cpp : implementation file // #include "stdafx.h" #include "gmud32.h" #include "inwnd.h" #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif #define NUMLINES 100 ///////////////////////////////////////////////////////////////////////////// // CInWnd CInWnd::CInWnd() { m_lastline=-1; } CInWnd::~CInWnd() { } BEGIN_MESSAGE_MAP(CInWnd, CEdit) //{{AFX_MSG_MAP(CInWnd) ON_WM_CREATE() ON_WM_KEYDOWN() ON_WM_CHAR() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CInWnd message handlers int CInWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CEdit::OnCreate(lpCreateStruct) == -1) return -1; m_lastline=0; return 0; } CInWnd::NewFont(LPLOGFONT lf) { memcpy(&m_LogFont,lf,sizeof(LOGFONT)); CFont f; f.CreateFontIndirect(&m_LogFont); SetFont(&f,TRUE); Invalidate(); return TRUE; } void CInWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { switch(nChar) { case VK_UP: m_lastline++; m_lastline=min(m_lastline,m_aLines.GetSize()-1); if(m_lastline>-1) SetWindowText(m_aLines[m_lastline]); break; case VK_DOWN: m_lastline--; if(m_lastline<0) { m_lastline=-1; SetWindowText(""); } else SetWindowText(m_aLines[m_lastline]); break; case VK_PRIOR: GetParent()->PostMessage(WM_VSCROLL,SB_PAGEUP ,SB_VERT); break; case VK_NEXT: GetParent()->PostMessage(WM_VSCROLL,SB_PAGEDOWN,SB_VERT); break; default: m_lastline=-1; CEdit::OnKeyDown(nChar, nRepCnt, nFlags); break; } } void CInWnd::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { switch(nChar) { case VK_ESCAPE: m_lastline=-1; SetWindowText(""); break; case VK_RETURN: { if(m_aLines.GetSize()>=NUMLINES) m_aLines.RemoveAt(m_aLines.GetSize()-1); CString wintext; GetWindowText(wintext); m_aLines.InsertAt(0,wintext); GetParent()->SendMessage(WM_ENTER_PRESSED,0,(LONG)(LPCSTR)wintext); SetWindowText(""); m_lastline=-1; } break; default: m_lastline=-1; CEdit::OnChar(nChar, nRepCnt, nFlags); break; } }