📄 medit.c
字号:
if(temp) temp->previous = pLineData->next; temp = pLineData->next; temp->lineNO = line + 1; if(tempP) { memcpy(temp->buffer,tempP,strlen(tempP)); temp->dataEnd = strlen(tempP); } else temp->dataEnd = 0; temp->buffer[temp->dataEnd] = '\0'; pLineData->dataEnd = pMLEditData->pos_chars[pMLEditData->veditPos]; pLineData->buffer[pLineData->dataEnd]='\0'; temp = temp->next; while (temp) { temp->lineNO++; temp = temp->next; } if (!((pMLEditData->veditPos == pLineData->wrapStartPos[wrapline]) && (wrapline))) pMLEditData->editLine++; pMLEditData->wraplines -= pLineData->nwrapline; calcLineInfo (hWnd, pMLEditData, pLineData); calcLineInfo (hWnd, pMLEditData, pLineData->next); edtGetLineInfo (hWnd, pLineData->next); pMLEditData->lines++; pMLEditData->wraplines += pLineData->nwrapline + pLineData->next->nwrapline; pMLEditData->veditPos=0; if (pMLEditData->editLine > pMLEditData->EndlineDisp) { pMLEditData->EndlineDisp = pMLEditData->editLine; if (pMLEditData->EndlineDisp > pMLEditData->StartlineDisp+pMLEditData->MaxlinesDisp-1) { pMLEditData->StartlineDisp = pMLEditData->EndlineDisp -pMLEditData->MaxlinesDisp + 1; }else { InvRect.top = (pMLEditData->editLine - pMLEditData->StartlineDisp -1) * pMLEditData->lineHeight + pMLEditData->topMargin; InvRect.bottom -= pMLEditData->lineHeight; } }else { pMLEditData->EndlineDisp = pMLEditData->StartlineDisp + MIN (pMLEditData->wraplines - pMLEditData->StartlineDisp, pMLEditData->MaxlinesDisp) - 1; } pMLEditData->linesDisp = pMLEditData->EndlineDisp - pMLEditData->StartlineDisp + 1; NotifyParent (hWnd, GetDlgCtrlID(hWnd), EN_CHANGE); InvalidateRect (hWnd, &InvRect, TRUE); edtSetCaretPos (hWnd); edtSetScrollInfo (hWnd, pMLEditData, TRUE); if (pMLEditData->bSCROLL) InvalidateRect (hWnd, NULL, TRUE); return 0; } edtGetLineInfo (hWnd, pLineData); if (pMLEditData->veditPos < pMLEditData->fit_chars) tempP = pLineData->buffer + pMLEditData->pos_chars[pMLEditData->veditPos]; temp = pLineData->next; pLineData->next = malloc( sizeof(LINEDATA) ); pLineData->next->previous = pLineData; pLineData->next->next = temp; if(temp) temp->previous = pLineData->next; temp = pLineData->next; temp->lineNO = pMLEditData->editLine + 1; if(tempP) { memcpy(temp->buffer,tempP,strlen(tempP)); temp->dataEnd = strlen(tempP); } else temp->dataEnd = 0; temp->buffer[temp->dataEnd] = '\0'; pLineData->dataEnd = pMLEditData->pos_chars[pMLEditData->veditPos]; pLineData->buffer[pLineData->dataEnd]='\0'; temp = temp->next; while (temp) { temp->lineNO++; temp = temp->next; } // added by leon to optimize display if ((pMLEditData->editLine - pMLEditData->StartlineDisp + 1) < pMLEditData->MaxlinesDisp) { if (!(pMLEditData->dx_chars[pMLEditData->veditPos] - pMLEditData->leftMargin > edtGetOutWidth (hWnd))) { InvRect.top = (pMLEditData->editLine - pMLEditData->StartlineDisp -1) * pMLEditData->lineHeight + pMLEditData->topMargin; } }else { if ((pMLEditData->vdispPos == 0) && (pMLEditData->vdispPos == pMLEditData->veditPos)) InvRect.bottom -= pMLEditData->lineHeight; } // added by leon to optimize display pMLEditData->veditPos = 0; pMLEditData->vdispPos = 0; if(pMLEditData->linesDisp < pMLEditData->MaxlinesDisp) { pMLEditData->EndlineDisp++; pMLEditData->linesDisp++; } else if(pMLEditData->editLine == pMLEditData->EndlineDisp) { pMLEditData->StartlineDisp++; pMLEditData->EndlineDisp++; } pMLEditData->editLine++; edtGetLineInfo (hWnd, GetLineData(pMLEditData,pMLEditData->editLine)); pMLEditData->lines++; pMLEditData->dispPos = 0; pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos]; edtSetCaretPos (hWnd); edtSetScrollInfo (hWnd, pMLEditData, TRUE); InvalidateRect (hWnd, &InvRect, TRUE); // modified by leon NotifyParent (hWnd, GetDlgCtrlID(hWnd), EN_CHANGE); if (pMLEditData->bSCROLL) InvalidateRect (hWnd, NULL, TRUE); return 0; } case SCANCODE_HOME: { int line = 0, wrapline = 0; BOOL bScroll = FALSE; pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd); if (pMLEditData->veditPos == 0) return 0; if (dwStyle & ES_AUTOWRAP) { edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline); pLineData = GetLineData(pMLEditData, line); pMLEditData->editLine -= wrapline; if (pMLEditData->editLine < pMLEditData->StartlineDisp) { pMLEditData->StartlineDisp = pMLEditData->editLine; pMLEditData->linesDisp = MIN (pMLEditData->wraplines - pMLEditData->StartlineDisp, pMLEditData->MaxlinesDisp); pMLEditData->EndlineDisp = pMLEditData->StartlineDisp + pMLEditData->linesDisp - 1; bScroll = TRUE; } edtGetCaretValid (hWnd, pMLEditData->editLine, 0, 0); edtSetCaretPos (hWnd); if (bScroll) { InvalidateRect(hWnd,NULL,TRUE); edtSetScrollInfo (hWnd, pMLEditData, TRUE); } if (pMLEditData->bSCROLL) InvalidateRect (hWnd, NULL, TRUE); return 0; } pMLEditData->veditPos = 0; if (pMLEditData->vdispPos != 0) { pMLEditData->vdispPos = 0; InvalidateRect (hWnd, NULL, TRUE); } pMLEditData->dispPos = 0; edtSetCaretPos (hWnd); edtSetScrollInfo (hWnd, pMLEditData, TRUE); if (pMLEditData->bSCROLL) InvalidateRect (hWnd, NULL, TRUE); return 0; } case SCANCODE_END: { int newStartPos, oldeditPos, line, wrapline; BOOL bScroll = FALSE; pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd); if (dwStyle & ES_AUTOWRAP) { edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline); pLineData = GetLineData(pMLEditData, line); }else pLineData = GetLineData(pMLEditData,pMLEditData->editLine); edtGetLineInfo (hWnd, pLineData); if (pMLEditData->veditPos == pMLEditData->fit_chars) return 0; if (dwStyle & ES_AUTOWRAP) { pMLEditData->veditPos = pMLEditData->fit_chars; pMLEditData->editLine += pLineData->nwrapline - 1 - wrapline; if (pMLEditData->editLine > pMLEditData->EndlineDisp) { pMLEditData->EndlineDisp = pMLEditData->editLine; pMLEditData->StartlineDisp = pMLEditData->EndlineDisp - pMLEditData->MaxlinesDisp + 1; bScroll = TRUE; } oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos] - pMLEditData->dx_chars[pLineData->wrapStartPos[pLineData->nwrapline-1]]; edtGetCaretValid (hWnd, pMLEditData->editLine, 0, oldeditPos); edtSetCaretPos (hWnd); if (bScroll) InvalidateRect(hWnd,NULL,TRUE); edtSetScrollInfo (hWnd, pMLEditData, TRUE); if (pMLEditData->bSCROLL) InvalidateRect (hWnd, NULL, TRUE); return 0; } newStartPos = edtGetStartDispPosAtEnd (hWnd, pLineData); pMLEditData->veditPos = pMLEditData->fit_chars; pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos]; if (pMLEditData->vdispPos != newStartPos) { pMLEditData->vdispPos = newStartPos; pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos]; InvalidateRect (hWnd, NULL, TRUE); } edtSetCaretPos (hWnd); edtSetScrollInfo (hWnd, pMLEditData, TRUE); } if (pMLEditData->bSCROLL) InvalidateRect (hWnd, NULL, TRUE); return 0; case SCANCODE_CURSORBLOCKLEFT: { BOOL bScroll = FALSE; int newStartPos, line, wrapline; PLINEDATA temp; edtPosProc (hWnd); 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 (!pMLEditData->veditPos && !pMLEditData->editLine) return 0; edtGetLineInfo (hWnd, pLineData); if (!pMLEditData->veditPos) { if (pMLEditData->editLine == pMLEditData->StartlineDisp) { bScroll = TRUE; pMLEditData->StartlineDisp--; if (pMLEditData->EndlineDisp >= pMLEditData->MaxlinesDisp) pMLEditData->EndlineDisp--; } pMLEditData->editLine--; temp = pLineData->previous; edtGetLineInfo (hWnd, temp); pMLEditData->veditPos = temp->wrapStartPos[temp->nwrapline]; }else if (pMLEditData->veditPos == pLineData->wrapStartPos[wrapline]) { if (pMLEditData->editLine == pMLEditData->StartlineDisp) { bScroll = TRUE; pMLEditData->StartlineDisp--; if (pMLEditData->EndlineDisp >= pMLEditData->MaxlinesDisp) 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) { temp = pLineData->previous; if (!temp) return 0; if(pMLEditData->editLine > 0 ) { if (pMLEditData->editLine == pMLEditData->StartlineDisp) { bScroll = TRUE; pMLEditData->StartlineDisp--; if (pMLEditData->EndlineDisp >= pMLEditData->MaxlinesDisp) pMLEditData->EndlineDisp--; } pMLEditData->editLine --; edtGetLineInfo (hWnd, GetLineData (pMLEditData, pMLEditData->editLine)); pMLEditData->veditPos = pMLEditData->fit_chars; newStartPos = edtGetStartDispPosAtEnd (hWnd, temp); if (pMLEditData->vdispPos != newStartPos) { pMLEditData->vdispPos = newStartPos; bScroll = TRUE; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -