?? medit.c
字號:
} pMLEditData->editPos = 0; pMLEditData->caretPos= 0; pMLEditData->dispPos = 0; if(pMLEditData->linesDisp < pMLEditData->MaxlinesDisp) { pMLEditData->EndlineDisp++; pMLEditData->linesDisp++; } else if(pMLEditData->editLine == pMLEditData->EndlineDisp) { pMLEditData->StartlineDisp++; pMLEditData->EndlineDisp++; } pMLEditData->editLine++; pMLEditData->lines++; SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) + pMLEditData->leftMargin, (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) +pMLEditData->topMargin); InvalidateRect (hWnd, NULL, FALSE); return 0; } case VK_HOME: /* SCANCODE_HOME: */ { PLINEDATA temp; if (pMLEditData->editPos == 0) return 0; pMLEditData->editPos = 0; pMLEditData->caretPos = 0; SetCaretPos (pMLEditData->leftMargin, (pMLEditData->editLine-pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) +pMLEditData->topMargin); temp = GetLineData(pMLEditData,pMLEditData->editLine); if (pMLEditData->dispPos != 0) { pMLEditData->dispPos = 0; InvalidateRect (hWnd, NULL, FALSE); } return 0; } case VK_END: /* SCANCODE_END: */ { int newStartPos; pLineData = GetLineData(pMLEditData,pMLEditData->editLine); if (pMLEditData->editPos == pLineData->dataEnd) return 0; newStartPos = edtGetStartDispPosAtEnd (hWnd, pLineData); pMLEditData->editPos = pLineData->dataEnd; pMLEditData->caretPos = pMLEditData->editPos - newStartPos; SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) + pMLEditData->leftMargin, (pMLEditData->editLine-pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) + pMLEditData->topMargin); if (pMLEditData->dispPos != newStartPos) InvalidateRect (hWnd, NULL, FALSE); pMLEditData->dispPos = newStartPos; } return 0; case VK_LEFT: /* SCANCODE_CURSORBLOCKLEFT: */ { BOOL bScroll = FALSE; int scrollStep,newStartPos; PLINEDATA temp; pLineData = GetLineData(pMLEditData,pMLEditData->editLine); if (pMLEditData->editPos == 0 ) { temp = pLineData->previous; if(temp && pMLEditData->editLine > pMLEditData->StartlineDisp) { pMLEditData->editLine --; pMLEditData->editPos = temp->dataEnd; newStartPos = edtGetStartDispPosAtEnd (hWnd, temp); pMLEditData->caretPos = pMLEditData->editPos - newStartPos; if (pMLEditData->dispPos != newStartPos) { pMLEditData->dispPos = newStartPos; bScroll = TRUE; } } else return 0; } else { if (edtIsACCharBeforePosition (pLineData->buffer, pLineData->dataEnd, pMLEditData->editPos)) { scrollStep = 2; pMLEditData->editPos -= 2; } else { scrollStep = 1; pMLEditData->editPos --; } pMLEditData->caretPos -= scrollStep; if (pMLEditData->caretPos == 0 && pMLEditData->editPos != 0) { bScroll = TRUE; if (edtIsACCharBeforePosition (pLineData->buffer, pLineData->dataEnd, pMLEditData->editPos)) { pMLEditData->dispPos -= 2; pMLEditData->caretPos = 2; } else { pMLEditData->dispPos--; pMLEditData->caretPos = 1; } } else if (pMLEditData->caretPos < 0) { pMLEditData->dispPos = 0; pMLEditData->caretPos = 0; } } SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) + pMLEditData->leftMargin, (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) + pMLEditData->topMargin); if (bScroll) InvalidateRect (hWnd, NULL, FALSE); } return 0; case VK_RIGHT: /* SCANCODE_CURSORBLOCKRIGHT: */ { BOOL bScroll = FALSE; int scrollStep, moveStep; PLINEDATA temp; pLineData = GetLineData(pMLEditData,pMLEditData->editLine); if (pMLEditData->editPos == pLineData->dataEnd) { temp = pLineData->next; if(temp) { pMLEditData->editLine++; pMLEditData->editPos = 0; pMLEditData->caretPos = 0; if(pMLEditData->dispPos !=0) { pMLEditData->dispPos = 0; bScroll = TRUE; } } else return 0; } else { if (edtIsACCharAtPosition (pLineData->buffer, pLineData->dataEnd, pMLEditData->dispPos)) { if (edtIsACCharAtPosition (pLineData->buffer, pLineData->dataEnd, pMLEditData->editPos)) { scrollStep = 2; moveStep = 2; pMLEditData->editPos += 2; } else { scrollStep = 2; moveStep = 1; pMLEditData->editPos ++; } } else { if (edtIsACCharAtPosition (pLineData->buffer, pLineData->dataEnd, pMLEditData->editPos)) { if (edtIsACCharAtPosition (pLineData->buffer, pLineData->dataEnd, pMLEditData->dispPos + 1)) scrollStep = 3; else scrollStep = 2; moveStep = 2; pMLEditData->editPos += 2; } else { scrollStep = 1; moveStep = 1; pMLEditData->editPos ++; } } pMLEditData->caretPos += moveStep; if (pMLEditData->caretPos * GetSysCharWidth (hWnd) > edtGetOutWidth (hWnd)) { bScroll = TRUE; pMLEditData->dispPos += scrollStep; pMLEditData->caretPos = pMLEditData->editPos - pMLEditData->dispPos; } } SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) + pMLEditData->leftMargin, (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight (hWnd) + pMLEditData->topMargin); if (bScroll) InvalidateRect (hWnd, NULL, FALSE); } return 0; case VK_UP: /* SCANCODE_CURSORBLOCKUP: */ { BOOL bScroll = FALSE; int newStartPos; PLINEDATA temp; pLineData = GetLineData(pMLEditData,pMLEditData->editLine); temp = pLineData->previous; if(pMLEditData->editLine == 0) return 0; else if (pMLEditData->editLine == pMLEditData->StartlineDisp) { bScroll = TRUE; pMLEditData->StartlineDisp--; pMLEditData->EndlineDisp--; } pMLEditData->editLine--; if( pMLEditData->editPos >= temp->dataEnd ) { pMLEditData->editPos = temp->dataEnd; pMLEditData->dispPos = 0; newStartPos = edtGetStartDispPosAtEnd (hWnd, temp); pMLEditData->dispPos = newStartPos; pMLEditData->caretPos = pMLEditData->editPos - newStartPos; bScroll = TRUE; } else { newStartPos = edtGetOffset(hWnd, pMLEditData,temp, pMLEditData->caretPos * GetSysCharWidth (hWnd) + pMLEditData->leftMargin); if(!edtIsACCharFromBegin(temp->buffer,temp->dataEnd, pMLEditData->dispPos)) { bScroll = TRUE; pMLEditData->dispPos--; newStartPos = edtGetOffset(hWnd, pMLEditData,temp, pMLEditData->caretPos * GetSysCharWidth (hWnd) + pMLEditData->leftMargin+GetSysCharWidth(hWnd)/2); } pMLEditData->editPos = newStartPos + pMLEditData->dispPos; pMLEditData->caretPos = newStartPos; } SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) + pMLEditData->leftMargin, (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) + pMLEditData->topMargin); if(bScroll) InvalidateRect(hWnd,NULL,FALSE); } break; case VK_DOWN: /* SCANCODE_CURSORBLOCKDOWN: */ { BOOL bScroll = FALSE; int newStartPos; PLINEDATA temp; pLineData = GetLineData(pMLEditData,pMLEditData->editLine); temp = pLineData->next; if(pMLEditData->editLine == pMLEditData->lines-1) return 0; else if (pMLEditData->editLine == pMLEditData->EndlineDisp) { bScroll = TRUE; pMLEditData->StartlineDisp++; pMLEditData->EndlineDisp++; } pMLEditData->editLine++; if( pMLEditData->editPos >= temp->dataEnd ) { pMLEditData->editPos = temp->dataEnd; pMLEditData->dispPos = 0; newStartPos = edtGetStartDispPosAtEnd (hWnd, temp); pMLEditData->dispPos = newStartPos; pMLEditData->caretPos = pMLEditData->editPos - newStartPos; bScroll = TRUE; } else { newStartPos = edtGetOffset(hWnd, pMLEditData,temp, pMLEditData->caretPos * GetSysCharWidth (hWnd) + pMLEditData->leftMargin); if(!edtIsACCharFromBegin(temp->buffer,temp->dataEnd, pMLEditData->dispPos)) { bScroll = TRUE; pMLEditData->dispPos--; newStartPos = edtGetOffset(hWnd, pMLEditData,temp, pMLEditData->caretPos * GetSysCharWidth (hWnd) + pMLEditData->leftMargin+GetSysCharWidth(hWnd)/2); } pMLEditData->editPos = newStartPos + pMLEditData->dispPos; pMLEditData->caretPos = newStartPos; } SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) + pMLEditData->leftMargin, (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) + pMLEditData->topMargin); if(bScroll) InvalidateRect(hWnd,NULL,FALSE); } break; case VK_INSERT: /* SCANCODE_INSERT: */ dw = GetWindowAdditionalData(hWnd); dw ^= EST_REPLACE; SetWindowAdditionalData(hWnd,dw); break; case VK_DELETE: /* SCANCODE_REMOVE: */ { PLINEDATA temp; int leftLen; pLineData = GetLineData(pMLEditData,pMLEditData->editLine); if ((GetWindowAdditionalData(hWnd) & EST_READONLY) ){#if 0 /* fix: no ping() */ ping ();#endif return 0; } temp = pLineData->next; if (pLineData->dataEnd == pMLEditData->editPos && temp) { 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; } if(pMLEditData->lines <= pMLEditData->MaxlinesDisp) { pMLEditData->EndlineDisp--; pMLEditData->linesDisp--; } if(pMLEditData->EndlineDisp >= pMLEditData->lines-1) { pMLEditData->EndlineDisp--; if(pMLEditData->StartlineDisp !=0) pMLEditData->StartlineDisp--; else pMLEditData->linesDisp--; } pMLEditData->lines--; } 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'; } } else if (pMLEditData->editPos != pLineData->dataEnd) { if (edtIsACCharAtPosition (pLineData->buffer, pLineData->dataEnd, pMLEditData->editPos)) deleted = 2; else deleted = 1; for (i = pMLEditData->editPos; i < pLineData->dataEnd - deleted; i++) pLineData->buffer [i] = pLineData->buffer [i + deleted]; pLineData->dataEnd -= deleted; pLineData->buffer[pLineData->dataEnd] = '\0'; } bChange = TRUE; InvalidateRect (hWnd, NULL,FALSE); } break; case VK_BACK: /* SCANCODE_BACKSPACE: */ { PLINEDATA temp; int leftLen,tempEnd; if ((GetWindowAdditionalData(hWnd) & EST_READONLY) ){#if 0 /* fix: no Ping() */ Ping ();#endif return 0; } pLineData = GetLineData(pMLEditData,pMLEditData->editLine); temp = pLineData->previous; if (pMLEditData->editPos == 0 && temp) { tempEnd = temp->dataEnd; if(pLineData->dataEnd + temp->dataEnd <= LEN_MLEDIT_BUFFER) { memcpy(temp->buffer+temp->dataEnd,pLineData->buffer,pLineData->dataEnd); temp->dataEnd +=pLineData->dataEnd; temp->buffer[temp->dataEnd] = '\0'; if(pLineData->next) { temp->next = pLineData->next; pLineData->next->previous = temp; } else temp->next = NULL; free(pLineData); pLineData = temp; temp = temp->next; while(temp)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -