📄 medit.c
字号:
if (pMLEditData->bSCROLL) InvalidateRect (hWnd, NULL, TRUE); return 0;}static int edtKeyCursorblockRight (HWND hWnd){ DWORD dwStyle = GetWindowStyle(hWnd); PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd); BOOL bScroll = FALSE; int line, wrapline; PLINEDATA temp; PLINEDATA pLineData; 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) { edtSetScrollInfo (hWnd, pMLEditData, TRUE); InvalidateRect(hWnd,NULL,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); //FIXME if (bScroll) { edtSetScrollInfo (hWnd, pMLEditData, TRUE); InvalidateRect (hWnd, NULL, TRUE); } if (pMLEditData->bSCROLL) InvalidateRect (hWnd, NULL, TRUE); return 0;}static int edtKeyCursorblockUp (HWND hWnd){ DWORD dwStyle = GetWindowStyle(hWnd); PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd); BOOL bScroll = FALSE; int newStartPos, olddispPos, oldeditPos, line, wrapline; PLINEDATA temp; PLINEDATA pLineData; 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); //FIXME if (bScroll) { edtSetScrollInfo (hWnd, pMLEditData, TRUE); InvalidateRect(hWnd,NULL,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); //FIXME if (bScroll) { edtSetScrollInfo (hWnd, pMLEditData, TRUE); InvalidateRect(hWnd,NULL,TRUE); } if (pMLEditData->bSCROLL) InvalidateRect (hWnd, NULL, TRUE); return 0;}static int edtKeyCursorblockDown (HWND hWnd){ DWORD dwStyle = GetWindowStyle(hWnd); PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd); BOOL bScroll = FALSE; int newStartPos, olddispPos, oldeditPos, line, wrapline; PLINEDATA temp; PLINEDATA pLineData; 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); //FIXME if (bScroll) { edtSetScrollInfo (hWnd, pMLEditData, TRUE); InvalidateRect(hWnd,NULL,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); //FIXME if (bScroll) { edtSetScrollInfo (hWnd, pMLEditData, TRUE); InvalidateRect(hWnd,NULL,TRUE); } if (pMLEditData->bSCROLL) InvalidateRect (hWnd, NULL, TRUE); return 0;}static int edtKeyRemove (HWND hWnd){ DWORD dwStyle = GetWindowStyle(hWnd); PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd); PLINEDATA pLineData; PLINEDATA temp; int leftLen; int line, wrapline; int oldnwrapline; BOOL bScroll=FALSE; RECT InvRect; int deleted, i; GetClientRect (hWnd, &InvRect); InvRect.left = pMLEditData->leftMargin - 1; if (dwStyle & ES_READONLY) { Ping(); return 0; } edtPosProc (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 (dwStyle & ES_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) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -