📄 ebmedit.c
字号:
bScroll = TRUE;
}else {
pMLEditData->veditPos--;
}
}
pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];
edtSetCaretPos (hWnd, TRUE);
if (bScroll)
InvalidateRect (hWnd, NULL, TRUE);
edtSetScrollInfo (hWnd, pMLEditData, TRUE);
if (pMLEditData->bSCROLL)
InvalidateRect (hWnd, NULL, TRUE);
}
return 0;
case SCANCODE_CURSORBLOCKRIGHT:
{
BOOL bScroll = FALSE;
int line, wrapline;
PEBLINEDATA temp;
if (dwStyle & EES_AUTOWRAP)
{
edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline);
pLineData = GetLineData(pMLEditData, line);
}
else
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
if (dwStyle & EES_AUTOWRAP)
{
if (!(temp = pLineData->next)
&& pMLEditData->veditPos == pMLEditData->fit_chars) return 0;
edtGetLineInfo (hWnd, pLineData);
if (pMLEditData->veditPos == pMLEditData->fit_chars)
{
if (pMLEditData->editLine == pMLEditData->EndlineDisp) {
bScroll = TRUE;
pMLEditData->StartlineDisp++;
pMLEditData->EndlineDisp++;
}
edtGetLineInfo (hWnd, temp);
pMLEditData->editLine++;
pMLEditData->veditPos = 0;
}else if (pMLEditData->veditPos == pLineData->wrapStartPos[wrapline+1]-1)
{
if (pMLEditData->veditPos <
pLineData->wrapStartPos[pLineData->nwrapline]-1)
{
if (pMLEditData->editLine == pMLEditData->EndlineDisp) {
bScroll = TRUE;
pMLEditData->StartlineDisp++;
pMLEditData->EndlineDisp++;
}
pMLEditData->editLine++;
}
pMLEditData->veditPos++;
}
else
pMLEditData->veditPos++;
pMLEditData->linesDisp = pMLEditData->EndlineDisp
- pMLEditData->StartlineDisp + 1;
edtSetCaretPos (hWnd, TRUE);
if (bScroll)
{
InvalidateRect(hWnd,NULL,TRUE);
edtSetScrollInfo (hWnd, pMLEditData, TRUE);
}
if (pMLEditData->bSCROLL)
InvalidateRect (hWnd, NULL, TRUE);
return 0;
}
if (pMLEditData->veditPos == pMLEditData->fit_chars)
{
temp = pLineData->next;
if (temp && pMLEditData->editLine == pMLEditData->EndlineDisp) {
bScroll = TRUE;
pMLEditData->StartlineDisp++;
pMLEditData->EndlineDisp++;
}
if(temp)
{
pMLEditData->editLine++;
edtGetLineInfo (hWnd, GetLineData (pMLEditData, pMLEditData->editLine));
pMLEditData->veditPos = 0;
if(pMLEditData->vdispPos !=0)
{
pMLEditData->vdispPos = 0;
bScroll = TRUE;
}
} else
return 0;
} else {
// caret is at the end of the display rect
if ((pMLEditData->dx_chars[pMLEditData->veditPos]
- pMLEditData->dx_chars[pMLEditData->vdispPos]
< edtGetOutWidth (hWnd))
&& (pMLEditData->dx_chars[pMLEditData->veditPos + 1]
- pMLEditData->dx_chars[pMLEditData->vdispPos]
> edtGetOutWidth (hWnd))) {
bScroll = TRUE;
pMLEditData->veditPos++;
if (edtGetNewvPos (hWnd,
GetLineData(pMLEditData,pMLEditData->editLine),
pMLEditData->dx_chars[pMLEditData->veditPos]
- edtGetOutWidth (hWnd)/4) == -1)
pMLEditData->vdispPos = 0;
else
pMLEditData->vdispPos = edtGetNewvPos (hWnd,
GetLineData(pMLEditData,pMLEditData->editLine),
pMLEditData->dx_chars[pMLEditData->veditPos]
- edtGetOutWidth (hWnd)/4);
if (pMLEditData->dx_chars[pMLEditData->vdispPos]
+ edtGetOutWidth (hWnd)
> pMLEditData->sz.cx)
pMLEditData->vdispPos =
edtGetStartDispPosAtEnd (hWnd, pLineData);
}else
pMLEditData->veditPos++;
}
pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];
edtSetCaretPos (hWnd, TRUE);
if (bScroll)
InvalidateRect (hWnd, NULL, TRUE);
edtSetScrollInfo (hWnd, pMLEditData, TRUE);
if (pMLEditData->bSCROLL)
InvalidateRect (hWnd, NULL, TRUE);
}
return 0;
case SCANCODE_CURSORBLOCKUP:
case SCANCODE_CURSORUP:
{
BOOL bScroll = FALSE;
int newStartPos, olddispPos, oldeditPos, line, wrapline;
PEBLINEDATA temp;
edtPosProc (hWnd);
olddispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];
oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos];
if (dwStyle & EES_AUTOWRAP)
{
edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline);
pLineData = GetLineData(pMLEditData, line);
}
else
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
temp = pLineData->previous;
if(pMLEditData->editLine == 0)
return 0;
if (pMLEditData->editLine == pMLEditData->StartlineDisp)
{
bScroll = TRUE;
pMLEditData->StartlineDisp--;
if (dwStyle & EES_AUTOWRAP)
pMLEditData->EndlineDisp = MIN (pMLEditData->wraplines - 1,
pMLEditData->StartlineDisp +
pMLEditData->MaxlinesDisp - 1);
else
pMLEditData->EndlineDisp--;
}
pMLEditData->editLine--;
if (dwStyle & EES_AUTOWRAP)
{
oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos]
- pMLEditData->dx_chars[pLineData->wrapStartPos[wrapline]];
edtGetCaretValid (hWnd, pMLEditData->editLine,
olddispPos, oldeditPos);
pMLEditData->linesDisp = pMLEditData->EndlineDisp
- pMLEditData->StartlineDisp + 1;
edtSetCaretPos (hWnd, TRUE);
if (bScroll)
InvalidateRect(hWnd,NULL,TRUE);
edtSetScrollInfo (hWnd, pMLEditData, TRUE);
if (pMLEditData->bSCROLL)
InvalidateRect (hWnd, NULL, TRUE);
// NotifyParent(hWnd, GetDlgCtrlID(hWnd), EEN_VSCROLL);
NotifyParentPos(hWnd);
return 0;
}
edtGetLineInfo (hWnd, temp);
if( olddispPos > pMLEditData->sz.cx )
{
pMLEditData->veditPos = pMLEditData->fit_chars;
newStartPos = edtGetStartDispPosAtEnd (hWnd, temp);
pMLEditData->vdispPos = newStartPos;
bScroll = TRUE;
}
else
{
pMLEditData->veditPos = edtGetNewvPos (hWnd, temp, oldeditPos);
if (pMLEditData->veditPos == -2)
pMLEditData->veditPos = pMLEditData->fit_chars;
pMLEditData->vdispPos = edtGetNewvPos (hWnd, temp, olddispPos);
if (olddispPos != pMLEditData->dx_chars[pMLEditData->vdispPos])
bScroll = TRUE;
}
pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];
SetCaretPos (hWnd, pMLEditData->dx_chars[pMLEditData->veditPos] -
pMLEditData->dx_chars[pMLEditData->vdispPos]+pMLEditData->leftMargin,
(pMLEditData->editLine - pMLEditData->StartlineDisp) * pMLEditData->lineHeight
+ pMLEditData->topMargin);
if (bScroll)
InvalidateRect(hWnd,NULL,TRUE);
edtSetScrollInfo (hWnd, pMLEditData, TRUE);
if (pMLEditData->bSCROLL)
InvalidateRect (hWnd, NULL, TRUE);
// NotifyParent(hWnd, GetDlgCtrlID(hWnd), EEN_VSCROLL);
NotifyParentPos(hWnd);
}
break;
case SCANCODE_CURSORBLOCKDOWN:
case SCANCODE_CURSORDOWN:
{
BOOL bScroll = FALSE;
int newStartPos, olddispPos, oldeditPos, line, wrapline;
PEBLINEDATA temp;
edtPosProc (hWnd);
oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos];
olddispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];
if (dwStyle & EES_AUTOWRAP)
{
edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline);
pLineData = GetLineData(pMLEditData, line);
}
else
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
temp = pLineData->next;
if (dwStyle & EES_AUTOWRAP)
{
if(pMLEditData->editLine == pMLEditData->wraplines-1)
return 0;
}
else
{
if(pMLEditData->editLine == pMLEditData->lines-1)
return 0;
}
if (pMLEditData->editLine == pMLEditData->EndlineDisp)
{
bScroll = TRUE;
pMLEditData->StartlineDisp++;
pMLEditData->EndlineDisp++;
}
pMLEditData->editLine++;
if (dwStyle & EES_AUTOWRAP)
{
oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos]
- pMLEditData->dx_chars[pLineData->wrapStartPos[wrapline]];
edtGetCaretValid (hWnd, pMLEditData->editLine,
olddispPos, oldeditPos);
edtSetCaretPos (hWnd, TRUE);
if (bScroll)
InvalidateRect(hWnd,NULL,TRUE);
edtSetScrollInfo (hWnd, pMLEditData, TRUE);
if (pMLEditData->bSCROLL)
InvalidateRect (hWnd, NULL, TRUE);
// NotifyParent(hWnd, GetDlgCtrlID(hWnd), EEN_VSCROLL);
NotifyParentPos(hWnd);
return 0;
}
edtGetLineInfo (hWnd, temp);
if( olddispPos > pMLEditData->sz.cx )
{
pMLEditData->veditPos = pMLEditData->fit_chars;
newStartPos = edtGetStartDispPosAtEnd (hWnd, temp);
pMLEditData->vdispPos = newStartPos;
bScroll = TRUE;
}
else
{
pMLEditData->veditPos = edtGetNewvPos (hWnd, temp, oldeditPos);
if (pMLEditData->veditPos == -2)
pMLEditData->veditPos = pMLEditData->fit_chars;
pMLEditData->vdispPos = edtGetNewvPos (hWnd, temp, olddispPos);
if (olddispPos != pMLEditData->dx_chars[pMLEditData->vdispPos])
bScroll = TRUE;
}
pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];
edtSetCaretPos (hWnd, TRUE);
if (bScroll)
InvalidateRect(hWnd,NULL,TRUE);
edtSetScrollInfo (hWnd, pMLEditData, TRUE);
if (pMLEditData->bSCROLL)
InvalidateRect (hWnd, NULL, TRUE);
// NotifyParent(hWnd, GetDlgCtrlID(hWnd), EEN_VSCROLL);
NotifyParentPos(hWnd);
}
break;
case SCANCODE_INSERT:
pMLEditData->status ^= EEST_REPLACE;
break;
case SCANCODE_REMOVE:
{
PEBLINEDATA temp;
int leftLen;
int line, wrapline;
int oldnwrapline;
BOOL bScroll=FALSE;
if (dwStyle & EES_READONLY) {
Ping();
return 0;
}
edtPosProc (hWnd);
if (dwStyle & EES_AUTOWRAP)
{
edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline);
pLineData = GetLineData(pMLEditData, line);
} else
pLineData = GetLineData(pMLEditData, pMLEditData->editLine);
edtGetLineInfo (hWnd,pLineData);
if (dwStyle & EES_AUTOWRAP)
{
oldnwrapline = pLineData->nwrapline;
InvRect.top = (pMLEditData->editLine - pMLEditData->StartlineDisp)
* pMLEditData->lineHeight
+ pMLEditData->topMargin;
if (pMLEditData->veditPos == pMLEditData->fit_chars) // end of the paragraph
{
bScroll = TRUE;
if (pMLEditData->editLine == pMLEditData->wraplines-1) return 0;
temp = pLineData->next;
pMLEditData->wraplines -= pLineData->nwrapline;
pMLEditData->curtotalLen --;
if (temp)
pMLEditData->wraplines -= pLineData->next->nwrapline;
if(pLineData->dataEnd + temp->dataEnd <= LEN_MLEDIT_BUFFER)
{
memcpy(pLineData->buffer+pLineData->dataEnd,temp->buffer,temp->dataEnd);
pLineData->dataEnd += temp->dataEnd;
pLineData->buffer[pLineData->dataEnd] = '\0';
if(temp->next)
{
pLineData->next = temp->next;
temp->next->previous = pLineData;
}
else
pLineData->next = NULL;
free(temp);
temp = pLineData->next;
while (temp)
{
temp->lineNO--;
temp = temp->next;
}
edtGetLineInfo (hWnd, pLineData);
}
else if (temp->dataEnd > 0)
{
leftLen = LEN_MLEDIT_BUFFER - pLineData->dataEnd;
memcpy(pLineData->buffer+pLineData->dataEnd,temp->buffer,leftLen);
pLineData->dataEnd +=leftLen;
pLineData->buffer[pLineData->dataEnd] = '\0';
memcpy(temp->buffer,temp->buffer+leftLen,temp->dataEnd-leftLen);
temp->dataEnd -= leftLen;
temp->buffer[temp->dataEnd] = '\0';
}
calcLineInfo (hWnd, pMLEditData, pLineData);
edtGetLineInfo (hWnd, pLineData);
pMLEditData->lines--;
pMLEditData->wraplines += pLineData->nwrapline;
}else {
deleted = pMLEditData->pos_chars[pMLEditData->veditPos + 1]
- pMLEditData->pos_chars[pMLEditData->veditPos];
pMLEditData->curtotalLen -= deleted;
for (i = pMLEditData->pos_chars[pMLEditData->veditPos];
i < pLineData->dataEnd - deleted;
i++)
pLineData->buffer [
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -