📄 medit.c
字号:
} else { if (pMLEditData->veditPos == pMLEditData->vdispPos){ 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); } bScroll = TRUE; }else { pMLEditData->veditPos--; } } pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos]; edtSetCaretPos (hWnd); 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; PLINEDATA temp; if (dwStyle & ES_AUTOWRAP) { edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline); pLineData = GetLineData(pMLEditData, line); } else pLineData = GetLineData(pMLEditData,pMLEditData->editLine); if (dwStyle & ES_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); 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); if (bScroll) InvalidateRect (hWnd, NULL, TRUE); edtSetScrollInfo (hWnd, pMLEditData, TRUE); if (pMLEditData->bSCROLL) InvalidateRect (hWnd, NULL, TRUE); } return 0; case SCANCODE_CURSORBLOCKUP: { BOOL bScroll = FALSE; int newStartPos, olddispPos, oldeditPos, line, wrapline; PLINEDATA temp; edtPosProc (hWnd); olddispPos = pMLEditData->dx_chars[pMLEditData->vdispPos]; oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos]; if (dwStyle & ES_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 & ES_AUTOWRAP) pMLEditData->EndlineDisp = MIN (pMLEditData->wraplines - 1, pMLEditData->StartlineDisp + pMLEditData->MaxlinesDisp - 1); else pMLEditData->EndlineDisp--; } pMLEditData->editLine--; if (dwStyle & ES_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); if (bScroll) InvalidateRect(hWnd,NULL,TRUE); edtSetScrollInfo (hWnd, pMLEditData, TRUE); if (pMLEditData->bSCROLL) InvalidateRect (hWnd, NULL, TRUE); 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); } break; case SCANCODE_CURSORBLOCKDOWN: { BOOL bScroll = FALSE; int newStartPos, olddispPos, oldeditPos, line, wrapline; PLINEDATA temp; edtPosProc (hWnd); oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos]; olddispPos = pMLEditData->dx_chars[pMLEditData->vdispPos]; if (dwStyle & ES_AUTOWRAP) { edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline); pLineData = GetLineData(pMLEditData, line); } else pLineData = GetLineData(pMLEditData,pMLEditData->editLine); temp = pLineData->next; if (dwStyle & ES_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 & ES_AUTOWRAP) { oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos] - pMLEditData->dx_chars[pLineData->wrapStartPos[wrapline]]; edtGetCaretValid (hWnd, pMLEditData->editLine, olddispPos, oldeditPos); edtSetCaretPos (hWnd); if (bScroll) InvalidateRect(hWnd,NULL,TRUE); edtSetScrollInfo (hWnd, pMLEditData, TRUE); if (pMLEditData->bSCROLL) InvalidateRect (hWnd, NULL, TRUE); 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); if (bScroll) InvalidateRect(hWnd,NULL,TRUE); edtSetScrollInfo (hWnd, pMLEditData, TRUE); if (pMLEditData->bSCROLL) InvalidateRect (hWnd, NULL, TRUE); } break; case SCANCODE_INSERT: pMLEditData->status ^= EST_REPLACE; break; case SCANCODE_REMOVE: { PLINEDATA temp; int leftLen; int line, wrapline; int oldnwrapline; BOOL bScroll=FALSE; if (dwStyle & ES_READONLY) { Ping(); return 0; } edtPosProc (hWnd); if (dwStyle
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -