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

📄 fedit.cpp

📁 jedit 一个小型java编译器的源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	Width=rect.right-rect.left;
	Height=rect.bottom-rect.top;
	if(m_BmpBack!=NULL)
		DeleteObject(m_BmpBack);
	m_BmpBack=CreateCompatibleBitmap(hdc,Width,Height);
	SetScrollBar(hWnd);
	ReleaseDC(hWnd,hdc);
}
void FEdit::OnKeyDown(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
	switch(LOWORD(wParam))
	{
	case VK_UP:
		HideCaret(hWnd);
		Str.EmptySel();
		Str.MoveToPreviousLine();
		AdjustCaretPos();
		SetScrollBar(hWnd);
		InvalidateRect(hWnd,NULL,false);
		break;
	case VK_DOWN:
		HideCaret(hWnd);
		Str.EmptySel();
		Str.MoveToNextLine();
		AdjustCaretPos();
		SetScrollBar(hWnd);
		InvalidateRect(hWnd,NULL,false);
		break;
	case VK_LEFT:
		HideCaret(hWnd);
		Str.EmptySel();
		Str.MoveToPrevious();
		AdjustCaretPos();
		SetScrollBar(hWnd);
		InvalidateRect(hWnd,NULL,false);
		break;
	case VK_RIGHT:
		HideCaret(hWnd);
		Str.EmptySel();
		Str.MoveToNext();
		AdjustCaretPos();
		SetScrollBar(hWnd);
		InvalidateRect(hWnd,NULL,false);
		break;
	case VK_HOME:
		HideCaret(hWnd);
		Str.EmptySel();
		Str.MoveToStart();
		AdjustCaretPos();
		SetScrollBar(hWnd);
		InvalidateRect(hWnd,NULL,false);
		break;
	case VK_END:
		HideCaret(hWnd);
		Str.EmptySel();
		Str.MoveToEnd();
		AdjustCaretPos();
		SetScrollBar(hWnd);
		InvalidateRect(hWnd,NULL,false);
		break;
	case VK_DELETE:
		HideCaret(hWnd);
		if(!Str.IsSelEmpty())
			Str.DeleteSel();
		else
			Str.Delete();
		AdjustCaretPos();
		SetScrollBar(hWnd);
		InvalidateRect(hWnd,NULL,false);
		SaveFlag=false;
		break;
	case VK_PRIOR:
		HideCaret(hWnd);
		Str.EmptySel();
		OnVScroll(SB_PAGEUP,0);
		ShowCaret(hWnd);
		break;
	case VK_NEXT:
		HideCaret(hWnd);
		Str.EmptySel();
		OnVScroll(SB_PAGEDOWN,0);
		ShowCaret(hWnd);
		break;
	}
}
bool FEdit::PosInRect(int x,int y)
{
	if(x>=5&&x<Width-cWidth&&
		y>=5&&y<Height)
		return true;
	return false;
}
void FEdit::OnVScroll(WPARAM wParam,LPARAM lParam)
{
	SCROLLINFO si;
	int nMaxPos;

	si.cbSize = sizeof (si);
	si.fMask  = SIF_ALL;
	// Save the position for comparison later o
	GetScrollInfo (m_hWnd, SB_VERT, &si);

	nMaxPos=si.nMax-si.nPage+1;

	switch(LOWORD(wParam))
	{
		case SB_LINEUP: 
			si.nPos -= 1;
			Y+=cHeight;
			break;
		case SB_LINEDOWN: 
			si.nPos += 1;
			Y-=cHeight;
			break;
		case SB_PAGEUP:
			si.nPos-=si.nPage;
			Y+=Height-5;
			break;
		case SB_PAGEDOWN:
			si.nPos+=si.nPage;
			Y-=Height-5;
			break;
		case SB_THUMBTRACK:
            Y+=(si.nPos-si.nTrackPos)*cHeight;
            si.nPos = si.nTrackPos;
            break;      
	}
	if(Y>5) Y=5;
	if(si.nPos>nMaxPos)
	{
		Y+=(si.nPos-nMaxPos)*cHeight;
		si.nPos=nMaxPos;
	}
	if(si.nPos<si.nMin) si.nPos=si.nMin;

	si.fMask = SIF_POS;
	SetScrollInfo(m_hWnd,SB_VERT,&si,true);
	InvalidateRect(m_hWnd,NULL,false);
}
void FEdit::OnHScroll(WPARAM wParam,LPARAM lParam)
{
	SCROLLINFO si;
	int nMaxPos;

	si.cbSize = sizeof (si);
	si.fMask  = SIF_ALL;
	// Save the position for comparison later o
	GetScrollInfo (m_hWnd, SB_HORZ, &si);

	nMaxPos=si.nMax-si.nPage+1;

	switch(LOWORD(wParam))
	{
		case SB_LINELEFT: 
			si.nPos -= 1;
			X+=cWidth;
			break;
		case SB_LINERIGHT: 
			si.nPos += 1;
			X-=cWidth;
			break;
		case SB_PAGELEFT:
			si.nPos-=si.nPage;
			X+=Width-cWidth;;
			break;
		case SB_PAGERIGHT:
			si.nPos+=si.nPage;
			X-=Width-cWidth;
			break;
		case SB_THUMBTRACK:
            X+=(si.nPos-si.nTrackPos)*cWidth;
            si.nPos = si.nTrackPos;
            break; 
	}
	if(X>5) X=5;
	if(si.nPos>nMaxPos)
	{
		X+=(si.nPos-nMaxPos)*cWidth;
		si.nPos=nMaxPos;
	}
	if(si.nPos<si.nMin) si.nPos=si.nMin;

	si.fMask = SIF_POS;
    SetScrollInfo(m_hWnd,SB_HORZ,&si,true);
	InvalidateRect(m_hWnd,NULL,false);
}
void FEdit::OnLButtonDown(HWND hWnd)
{
	HideCaret(hWnd);
	SetCapture(hWnd);
	LBDownFlag=true;

	int CursorX,CursorY;
	int Line,Column;
	int TotalLine,LineWidth;
	POINT p;
	GetCursorPos(&p);
	ScreenToClient(hWnd,&p);
	CursorX=p.x+cWidth/2;
	CursorY=p.y;

	Line=(CursorY-Y)/cHeight+1;
	Column=(CursorX-X)/cWidth+1;

	TotalLine=Str.GetTotalLine();
	if(Line>TotalLine) Line=TotalLine;
	LineWidth=Str.GetLineWidth(Line);
	if(Column>LineWidth) Column=LineWidth;

	Str.MoveSelStart(Line,Column);
	Str.MoveSelEnd(Line,Column);
	Str.MoveToPos(Line,Column);

	SetCaretPos(X+(Str.GetPos()-1)*cWidth,
		Y+(Str.GetLine()-1)*cHeight);
	ShowCaret(hWnd);
	if(!Str.IsSelEmpty())
	Str.EmptySel();
	InvalidateRect(hWnd,NULL,false);
	SetTimer(hWnd,1001,100,NULL);
	SendMessage(GetParent(hWnd),WM_LCCHANGED,0l,0l);
	SendMessage(hWnd,WM_LCCHANGED,0l,0l);
}
void FEdit::OnMouseMove(HWND hWnd)
{
	HideCaret(hWnd);

	int CursorX,CursorY;
	int Line,Column;
	int TotalLine,LineWidth;
	POINT p;
	GetCursorPos(&p);
	ScreenToClient(hWnd,&p);
	CursorX=p.x+cWidth/2;
	CursorY=p.y;

	Line=(CursorY-Y)/cHeight+1;
	Column=(CursorX-X)/cWidth+1;

	if(Line<1) Line=1;
	if(Column<1) Column=1;

	TotalLine=Str.GetTotalLine();
	if(Line>TotalLine) Line=TotalLine;
	LineWidth=Str.GetLineWidth(Line);
	if(Column>LineWidth) Column=LineWidth;

	Str.MoveSelEnd(Line,Column);
	Str.MoveToPos(Line,Column);

	if(X+(Str.GetPos()-1)*cWidth<5)
		OnHScroll(SB_LINELEFT,0);
	if(X+(Str.GetPos()-1)*cWidth>Width-cWidth)
		OnHScroll(SB_LINERIGHT,0);

	if(Y+(Str.GetLine()-1)*cHeight<5)
		OnVScroll(SB_LINEUP,0);
	if(Y+(Str.GetLine()-1)*cHeight>Height-cHeight)
		OnVScroll(SB_LINEDOWN,0);
	SetCaretPos(X+(Str.GetPos()-1)*cWidth,
		Y+(Str.GetLine()-1)*cHeight);
	ShowCaret(hWnd);
	InvalidateRect(hWnd,NULL,false);
	SendMessage(GetParent(hWnd),WM_LCCHANGED,0l,0l);
}
void FEdit::AdjustCaretPos()
{
	while(X+(Str.GetPos()-1)*cWidth<5)
		X+=cWidth;
	while(X+(Str.GetPos()-1)*cWidth>=Width)
		X-=cWidth;

	while(Y+(Str.GetLine()-1)*cHeight<5)
		Y+=cHeight;
	while(Y+(Str.GetLine()-1)*cHeight>Height-cHeight)
		Y-=cHeight;
	SetCaretPos(X+(Str.GetPos()-1)*cWidth,
		Y+(Str.GetLine()-1)*cHeight);
	ShowCaret(m_hWnd);
}
bool FEdit::CopySel()
{
	char *Sel;
	Sel=Str.GetSelect();

	int nlen = strlen(Sel);
	if (nlen == 0)
		return false;

	// 将sztext中的内容复制到剪贴板
	HGLOBAL hglbcopy;
	LPTSTR lptstrcopy;

	if (!OpenClipboard(m_hWnd))
		return false;

	hglbcopy = GlobalAlloc(GMEM_DDESHARE, 
            (nlen + 1) * sizeof(char)); 
 
	if (hglbcopy == NULL) 
	{ 
		CloseClipboard(); 
		return false;
	} 

	EmptyClipboard();

	lptstrcopy = (LPTSTR)GlobalLock(hglbcopy); 
    memcpy(lptstrcopy, Sel, nlen);
    lptstrcopy[nlen] = (TCHAR) 0;    // null character 
    GlobalUnlock(lptstrcopy); 
  
	SetClipboardData(CF_TEXT, hglbcopy);
	CloseClipboard();
	return true;
}
bool FEdit::PasteChar()
{
	HGLOBAL   hglb;
	LPTSTR    lptstr;
	if (!IsClipboardFormatAvailable(CF_TEXT)) 
        return false; 
    if (!OpenClipboard(m_hWnd)) 
        return false; 
 
    hglb = GetClipboardData(CF_TEXT); 
    if (hglb != NULL) 
    { 
        lptstr =(LPTSTR) GlobalLock(hglb); 
        if (lptstr != NULL) 
        { 
            Str.Insert(lptstr);
            GlobalUnlock(hglb); 
        } 
    } 
    CloseClipboard();
	SaveFlag=false;
	HideCaret(m_hWnd);
	AdjustCaretPos();
	SetScrollBar(m_hWnd);
	InvalidateRect(m_hWnd,NULL,false);
    return true; 
}
bool FEdit::Find(char* content,bool up,bool icmp)
{
	int pos;
	if(up)
	{
		if(Str.FindPrev(content,pos,icmp))
		{
			HideCaret(m_hWnd);
			Str.MoveToPos(pos);
			Str.MoveSelStart(pos);
			Str.MoveSelEnd(pos+strlen(content));
			AdjustCaretPos();
			SetScrollBar(m_hWnd);
			InvalidateRect(m_hWnd,NULL,false);
			return true;
		}
	}
	else
	{
		if(Str.FindNext(content,pos,icmp))
		{
			HideCaret(m_hWnd);
			Str.MoveToPos(pos);
			Str.MoveSelStart(pos);
			Str.MoveSelEnd(pos+strlen(content));
			AdjustCaretPos();
			SetScrollBar(m_hWnd);
			InvalidateRect(m_hWnd,NULL,false);
			return true;
		}
	}
	return false;
}
bool FEdit::Replace(char *src,char *dst,bool icmp)
{
	if(!Str.Replace(src,dst,Str.GetCur(),icmp))
		return false;
	InvalidateRect(m_hWnd,NULL,false);
	return true;
}
bool FEdit::ReplaceAll(char *src,char *dst,bool icmp)
{
	if(!Str.ReplaceAll(src,dst,icmp))
		return false;
	InvalidateRect(m_hWnd,NULL,false);
	return true;
}
void FEdit::SetBackGround()
{
	if(hBackGround==NULL)
		return;
	RECT ClientRect;
	BITMAP bi;
	HDC hDC,hImageDC;
	GetObject(hBackGround,sizeof(BITMAP),(LPVOID)&bi);
	int i,j;

	GetClientRect(m_hWnd,&ClientRect);
	hDC=GetDC(m_hWnd);
	hImageDC=CreateCompatibleDC(hDC);
	SelectObject(hImageDC,hBackGround);
	for(i=0;i<ClientRect.right;i+=bi.bmWidth)
		for(j=0;j<ClientRect.bottom;j+=bi.bmHeight)
			BitBlt(m_hdcBack,i,j,bi.bmWidth,bi.bmHeight,hImageDC,0,0,SRCCOPY);

	DeleteObject(hImageDC);
	DeleteObject(hDC);
}

⌨️ 快捷键说明

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