⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 6502view.cpp

📁 在网上搜集的一些关于6502的资料,在win2000下调试通过了,有vb也有vc的程序,还有一些6502基础命令学习,对想学6502汇编的有一定的帮助,如何使用,详细看里面有说明文件:)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	    buf[len+2] = 0;
	    buf[0] = 0xD;
	    buf[1] = 0xA;
	    ret = (*m_pfnOldProc)(hWnd,EM_REPLACESEL,TRUE,(LPARAM)(buf+2));	  // wci阠ie tekstu
	  }
	  else
	    ;
//	    ret = (*m_pfnOldProc)(hWnd,msg,wParam,lParam);	  // CR i rozsuni阠ie wierszy
	}
	if (m_bAutoSyntax && stat)
	  pView->disp_warning(line,strmsg);
      }
      else
      {
        ret = (*m_pfnOldProc)(hWnd,msg,wParam,lParam);
	pView->set_position_info(hWnd);
      }

      pView->RedrawMarks();
/*
      pView->draw_breakpoints();
      if (pView->m_nActualPointerLine != -1)
        pView->DrawMark(pView->m_nActualPointerLine,MT_POINTER);
      if (pView->m_nActualErrMarkLine != -1)
        pView->DrawMark(pView->m_nActualErrMarkLine,MT_ERROR);
*/
      return ret;
    }

    case WM_MOUSEMOVE:
    case WM_KEYDOWN:
    {
      LRESULT ret= (*m_pfnOldProc)(hWnd,msg,wParam,lParam);
      pView->set_position_info(hWnd);
      return ret;
    }

    case WM_PAINT:
    {
      LRESULT ret= (*m_pfnOldProc)(hWnd,msg,wParam,lParam);
      if (ret == 0)
        pView->RedrawMarks();
/*      {
    pView->draw_breakpoints((HDC)wParam);
    if (pView->m_nActualPointerLine != -1)
          pView->DrawMark(pView->m_nActualPointerLine,MT_POINTER,FALSE,(HDC)wParam);
    if (pView->m_nActualErrMarkLine != -1)
          pView->DrawMark(pView->m_nActualErrMarkLine,MT_ERROR,FALSE,(HDC)wParam);
      } */
      return ret;
    }

    default:
      return (*m_pfnOldProc)(hWnd,msg,wParam,lParam);
  }

}


//=============================================================================
/*
void CSrc6502View::drawMark(CDC &dc, int line, MarkType type, bool scroll)
{
  int h, y= ScrollToLine(line,h,scroll);
  if (y < 0)
    return;
  y++;

  switch (type)
  {
    case MT_ERASE:	// zmazanie znacznika
    {
      dc.GetWindow()->RedrawWindow(CRect(1, y, 1 + h, y + h));
      break;
    }
    case MT_POINTER:	// narysowanie strza砶i wskazuj筩ej inst. do wykonania
      draw_pointer(dc,1,y,h);
      break;
    case MT_BREAKPOINT:	// narysowanie aktywnego miejsca przerwania
      draw_breakpoint(dc,1,y,h,TRUE);
      break;
    case MT_DISBRKP:	// narysowanie wy彻czonego miejsca przerwania
      draw_breakpoint(dc,1,y,h,FALSE);
      break;
    case MT_ERROR:	// narysowanie strza砶i wskazuj筩ej b彻d
      draw_mark(dc,4,y,h);
      break;
    default:
      ASSERT(FALSE);	// b酬dna warto滄 typu
      break;
  }
}
*/

int CSrc6502View::ScrollToLine(int line, int &height, bool scroll)
{
	ASSERT(line >= 0);
#ifdef USE_CRYSTAL_EDIT
	GoToLine(line);
	return 0;
#else
  CEdit &edit= GetEditCtrl();
  if (line > edit.GetLineCount()-1)
  {
    ASSERT(FALSE);	// za du縴 numer wiersza
    return -1;
  }
  int top_line= edit.GetFirstVisibleLine();
  if (line < top_line)
  {
    if (!scroll)
      return -2;
    edit.LineScroll(line-top_line);	// wiersz nie jest widoczny - przesuni阠ie zawarto渃i okna
    top_line = edit.GetFirstVisibleLine();
    int top_char= edit.LineIndex(top_line);
    edit.SendMessage(EM_SETSEL,top_char,top_char);	// przesuni阠ie karetki do wiersza 'top_line'
  }
  CClientDC dc(&edit);
  CFont* pOld= dc.SelectObject(&m_Font);
  TEXTMETRIC tm;
  dc.GetTextMetrics(&tm);
  dc.SelectObject(pOld);
  int h= (int)tm.tmHeight + (int)tm.tmExternalLeading;
  int y= (line - top_line) * h;		// po硂縠nie wiersza w pionie
  CRect rect;
  edit.GetClientRect(rect);
  if (y+h-1 >= rect.bottom)
  {
    if (!scroll)
      return -2;
    edit.LineScroll(1 + (y+h-1 - rect.bottom) / h);	// ilo滄 wierszy do przesuni阠ia
//    edit.SendMessage(EM_SCROLLCARET,0,0);
    top_line = edit.GetFirstVisibleLine();
    int bottom_char= edit.LineIndex(line);
    edit.SendMessage(EM_SETSEL,bottom_char,bottom_char);// przesuni阠ie karetki do wiersza 'line'
  }
  y = (line - top_line) * h;		// po硂縠nie wiersza w pionie
  if (y+h-1 >= rect.bottom)
  {
    ASSERT(FALSE);	// b酬dne przesuni阠ia albo obliczenia w tej funkcji
    return -1;
  }

  height = h;
  return y;
#endif
}


// edit view info
//
void CSrc6502View::GetDispInfo(int& nTopLine, int& nLineCount, int& nLineHeight)
{
#ifdef USE_CRYSTAL_EDIT
	nLineHeight = GetLineHeight();
	return;
#else
  CEdit& edit= GetEditCtrl();
  nLineCount = edit.GetLineCount();
  nTopLine = edit.GetFirstVisibleLine();

  CClientDC dc(&edit);
  CFont* pOld= dc.SelectObject(&m_Font);
  TEXTMETRIC tm;
  dc.GetTextMetrics(&tm);
  nLineHeight = (int)tm.tmHeight + (int)tm.tmExternalLeading;
  dc.SelectObject(pOld);
#endif
}

/*
void CSrc6502View::DrawMark(int line, MarkType type, bool scroll, HDC hDC)
{
  if (m_wndLeftBar.m_hWnd == 0)
    return;

  CClientDC dc(&m_wndLeftBar);

  drawMark(dc, line, type, scroll);

#if 0
  if (hDC == NULL)
  {
    CClientDC dc(&GetEditCtrl());
    drawMark(dc,line,type,scroll);
  }
  else
    drawMark(*CDC::FromHandle(hDC),line,type,scroll);
#endif
} */

/*
void CSrc6502View::draw_breakpoints(HDC hDC)
{
  if (m_mapBreakpoints.IsEmpty())
    return;
  POSITION pos= m_mapBreakpoints.GetStartPosition();
  int line;
  BYTE bp;
  do
  {
    m_mapBreakpoints.GetNextAssoc(pos,line,bp);
    DrawMark(line,bp & CAsm::BPT_DISABLED ? MT_DISBRKP : MT_BREAKPOINT,FALSE,hDC);
  } while (pos);
}
*/

//-----------------------------------------------------------------------------

void CSrc6502View::SetPointer(int line, bool scroll)	// narysowanie/zmazanie strza砶i w wierszu{  if (m_nActualPointerLine != -1)
  {
    int tmp_line= m_nActualPointerLine;
    m_nActualPointerLine = -1;    EraseMark(tmp_line);	// zmazanie starej strza砶i
  }
  m_nActualPointerLine = line;
  if (line != -1)
  {
    int h;
    ScrollToLine(line,h,TRUE);
    RedrawMarks(line);
  }
}

void CSrc6502View::SetErrMark(int line)		// narysowanie/zmazanie strza砶i wsk. b彻d
{
  if (m_nActualErrMarkLine != -1)
  {
    int tmp= m_nActualErrMarkLine;
    m_nActualErrMarkLine = -1;
    EraseMark(tmp);			// zmazanie starej strza砶i
  }
  m_nActualErrMarkLine = line;
  if (line != -1)
  {
    int h;
    ScrollToLine(line,h,TRUE);
    RedrawMarks(line);
#ifdef USE_CRYSTAL_EDIT
	GoToLine(line);
#else
    CEdit &edit= GetEditCtrl();
    int char_index= edit.LineIndex(line);
    edit.SendMessage(EM_SETSEL,char_index,char_index);	// przesuni阠ie karetki do wiersza 'line'
#endif
  }
}


void CSrc6502View::OnEnUpdate()		// po zmianie tekstu
{
  if (m_nActualErrMarkLine != -1)
  {
    SetErrMark(-1);			// zmazujemy wsk. b酬dnego wiersza
    CMainFrame *pMain = (CMainFrame*) AfxGetApp()->m_pMainWnd;
    pMain->m_wndStatusBar.SetPaneText(0,NULL);	// i komunikat b酬du
  }
}

void CSrc6502View::SelectEditFont(){
#ifdef USE_CRYSTAL_EDIT
	SetFont(m_LogFont);
//	m_wndLeftBar.SetWidth(0);
	SetTabSize(m_nTabStep);
#else
  SetFont(&m_Font);
  CEdit &edit= GetEditCtrl();
  CClientDC dc(&edit);
  dc.SelectObject(&m_Font);
  TEXTMETRIC tm;
  dc.GetTextMetrics(&tm);
  int h= (int)tm.tmHeight + (int)tm.tmExternalLeading;
//  DWORD margins= edit.GetMargins();
//  edit.SetMargins(h+1,UINT(HIWORD(margins)));	// ustawienie lewego marginesu
  m_wndLeftBar.SetWidth(h + 1);
  dynamic_cast<CFrameWnd*>(GetParent())->RecalcLayout();
#endif
}

int CSrc6502View::GetCurrLineNo()	// aktualny wiersz{
#ifdef USE_CRYSTAL_EDIT
	return GetCursorPos().y;
#else
  CEdit &edit= GetEditCtrl();  int idx= edit.LineIndex();
  ASSERT(idx != -1);
  return edit.LineFromChar(idx);
#endif
}
void CSrc6502View::AddBreakpoint(int line, CAsm::Breakpoint bp, bool draw){
  m_mapBreakpoints[line] = (BYTE)bp;
  if (draw)
    RedrawMarks(line);
}
void CSrc6502View::RemoveBreakpoint(int line, bool draw){  m_mapBreakpoints.RemoveKey(line);  if (draw)
    RedrawMarks(line);
}

void CSrc6502View::RedrawMarks(int line/*= -1*/)
{
#ifdef USE_CRYSTAL_EDIT
	if (line >= 0)
		InvalidateLines(line, line, true);
#else
  if (line == -1)	// przerysowa

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -