?? medit.c
字號(hào):
{ temp->lineNO--; temp = temp->next; } if(pMLEditData->StartlineDisp == pMLEditData->editLine && pMLEditData->StartlineDisp != 0) { pMLEditData->StartlineDisp--; if(pMLEditData->EndlineDisp == pMLEditData->lines) pMLEditData->EndlineDisp--; } if(pMLEditData->lines <= pMLEditData->MaxlinesDisp) { pMLEditData->linesDisp--; pMLEditData->EndlineDisp--; } pMLEditData->lines--; } else if (pLineData->dataEnd > 0) { leftLen = LEN_MLEDIT_BUFFER - temp->dataEnd; memcpy(temp->buffer+temp->dataEnd,pLineData->buffer,leftLen); temp->dataEnd +=leftLen; temp->buffer[temp->dataEnd] = '\0'; memcpy(pLineData->buffer,pLineData->buffer+leftLen,pLineData->dataEnd-leftLen); pLineData->dataEnd -=leftLen; pLineData->buffer[pLineData->dataEnd] = '\0'; } pMLEditData->editLine--; pMLEditData->editPos = tempEnd; pMLEditData->dispPos = tempEnd; /* 當(dāng)編輯位置不為0,caret位置為0的時(shí)候,移動(dòng)caret位置. */ if (pMLEditData->caretPos == 0 && pMLEditData->editPos != 0) { 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; } } else if (pMLEditData->editPos != 0 ) { if (edtIsACCharBeforePosition (pLineData->buffer, pLineData->dataEnd, pMLEditData->editPos)) deleted = 2; else deleted = 1; for (i = pMLEditData->editPos; i < pLineData->dataEnd; i++) pLineData->buffer [i - deleted] = pLineData->buffer [i]; pLineData->dataEnd -= deleted; pMLEditData->editPos -= deleted; pMLEditData->caretPos -= deleted; if (pMLEditData->caretPos == 0 && pMLEditData->editPos != 0) { if (edtIsACCharBeforePosition (pLineData->buffer, pLineData->dataEnd, pMLEditData->editPos)) { pMLEditData->dispPos -= 2; pMLEditData->caretPos = 2; } else { pMLEditData->dispPos --; pMLEditData->caretPos = 1; } } } bChange = TRUE; SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) + pMLEditData->leftMargin, (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) + pMLEditData->topMargin); InvalidateRect (hWnd, NULL, FALSE); } break; default: break; } if (bChange) SendMessage (GetParent (hWnd), WM_COMMAND, (WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_CHANGE), (LPARAM) hWnd); return 0; } case WM_CHAR: { char charBuffer [2]; int i, chars, scrollStep, inserting; UINT format; pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); pLineData = GetLineData(pMLEditData,pMLEditData->editLine); if (dwStyle & ES_READONLY) {#if 0 /* fix: no Ping() */ Ping ();#endif return 0; } if (HIBYTE (wParam)) { charBuffer [0] = LOBYTE (wParam); charBuffer [1] = HIBYTE (wParam); chars = 2; } else { charBuffer [0] = LOBYTE (wParam); chars = 1; } if (chars == 1) { switch (charBuffer [0]) { case 0x00: /* NULL */ case 0x07: /* BEL */ case 0x08: /* BS */ case 0x09: /* HT */ case 0x0A: /* LF */ case 0x0B: /* VT */ case 0x0C: /* FF */ case 0x0D: /* CR */ case 0x1B: /* Escape */ return 0; } } if (GetWindowAdditionalData(hWnd) & EST_REPLACE) { if (pLineData->dataEnd == pMLEditData->editPos) inserting = chars; else if (edtIsACCharAtPosition (pLineData->buffer, pLineData->dataEnd, pMLEditData->editPos)) { if (chars == 2) inserting = 0; else inserting = -1; } else { if (chars == 2) inserting = 1; else inserting = 0; } } else inserting = chars; /* check space */ if (pLineData->dataEnd + inserting > pMLEditData->totalLen) {#if 0 /* fix no ping */ Ping ();#endif SendMessage (GetParent (hWnd), WM_COMMAND, (WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_MAXTEXT), (LPARAM) hWnd); return 0; } else if ((pMLEditData->hardLimit >= 0) && ((pLineData->dataEnd + inserting) > pMLEditData->hardLimit)) {#if 0 /* fix no ping */ Ping ();#endif SendMessage (GetParent (hWnd), WM_COMMAND, (WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_MAXTEXT), (LPARAM) hWnd); return 0; } if (inserting == -1) { for (i = pMLEditData->editPos; i < pLineData->dataEnd-1; i++) pLineData->buffer [i] = pLineData->buffer [i + 1]; } else if (inserting > 0) { for (i = pLineData->dataEnd + inserting - 1; i > pMLEditData->editPos + inserting - 1; i--) pLineData->buffer [i] = pLineData->buffer [i - inserting]; } for (i = 0; i < chars; i++) pLineData->buffer [pMLEditData->editPos + i] = charBuffer [i]; pMLEditData->editPos += chars; pMLEditData->caretPos += chars; pLineData->dataEnd += inserting; pLineData->buffer[pLineData->dataEnd] = '\0'; if (pMLEditData->caretPos * GetSysCharWidth (hWnd) > edtGetOutWidth (hWnd)) { if (edtIsACCharAtPosition (pLineData->buffer, pLineData->dataEnd, pMLEditData->dispPos)) scrollStep = 2; else { if (chars == 2) { if (edtIsACCharAtPosition (pLineData->buffer, pLineData->dataEnd, pMLEditData->dispPos + 1)) scrollStep = 3; else scrollStep = 2; } else scrollStep = 1; } pMLEditData->dispPos += scrollStep; pMLEditData->caretPos = pMLEditData->editPos - pMLEditData->dispPos; } SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) + pMLEditData->leftMargin, (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) + pMLEditData->topMargin); InvalidateRect (hWnd, NULL,FALSE); format = DT_NOPREFIX; SendMessage (GetParent (hWnd), WM_COMMAND, (WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_CHANGE), (LPARAM) hWnd); } return 0; case WM_GETTEXTLENGTH: { PLINEDATA temp; int lineNO = (int)wParam; pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); temp = pMLEditData->head; while(temp) { if (temp->lineNO == lineNO) return temp->dataEnd; temp = temp->next; } return -1; } case WM_GETTEXT: { PLINEDATA temp; int len,total = 0,lineNO; char * buffer = (char*)lParam; pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); len = (int)wParam; lineNO = (int)wParam; temp = pMLEditData->head; while (temp && total + temp->dataEnd < len) { memcpy(buffer+total,temp->buffer,temp->dataEnd); total += temp->dataEnd; temp = temp->next; } } return 0;/* can i add it to message define ? */#if 0 case WM_GETLINETEXT: { PLINEDATA temp; char* buffer = (char*)lParam; int lineNO,len; pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); lineNO = (int)wParam; temp = GetLineData(pMLEditData,lineNO); if(temp) { len = min ((int)wParam, temp->dataEnd); memcpy (buffer, temp->buffer,len); buffer [len] = '\0'; return 0; } return -1; } break; case WM_SETTEXT: { MLEditInitBuffer(pMLEditData,(char *)lParam); } return 0;#endif/* can i add it to message defined? */#if 0 case WM_SETLINETEXT: { int len,lineNO; PLINEDATA temp; if (dwStyle & ES_READONLY) return 0; pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); len = strlen ((char*)lParam); lineNO = (int)wParam; temp = pMLEditData->head; len = min (len, pMLEditData->totalLen); if (pMLEditData->hardLimit >= 0) len = min (len, pMLEditData->hardLimit); while (temp) { if(temp->lineNO == lineNO) { temp->dataEnd = len; memcpy (temp->buffer, (char*)lParam, len); } temp = temp->next; } pMLEditData->editPos = 0; pMLEditData->caretPos = 0; pMLEditData->dispPos = 0; InvalidateRect (hWnd, NULL, FALSE); } return 0;#endif case WM_LBUTTONDBLCLK: break; case WM_LBUTTONDOWN: { int newOff,lineNO; PLINEDATA temp; BOOL bScroll = FALSE; pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); lineNO = edtGetLineNO (hWnd,pMLEditData, HIWORD (lParam)); if ( lineNO < 0 ) return 0; lineNO += pMLEditData->StartlineDisp; if (lineNO <= pMLEditData->EndlineDisp && lineNO <= pMLEditData->lines-1 ) { temp = GetLineData(pMLEditData,lineNO); newOff = edtGetOffset (hWnd,pMLEditData,temp, LOWORD (lParam)); if(!edtIsACCharFromBegin(temp->buffer,temp->dataEnd,pMLEditData->dispPos)) { bScroll = TRUE; pMLEditData->dispPos--; newOff = edtGetOffset (hWnd,pMLEditData,temp, LOWORD(lParam)+GetSysCharWidth(hWnd)/2); } if (newOff != pMLEditData->caretPos || lineNO != pMLEditData->editLine) { pMLEditData->editLine = temp->lineNO; pMLEditData->editPos = newOff +pMLEditData->dispPos; pMLEditData->caretPos = newOff; SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) + pMLEditData->leftMargin, (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) + pMLEditData->topMargin); } if(bScroll) InvalidateRect(hWnd,NULL,FALSE); } } break; case WM_LBUTTONUP: break; case WM_MOUSEMOVE: break; case WM_GETDLGCODE: return DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTARROWS; case EM_SETREADONLY: if (wParam) IncludeWindowStyle(hWnd,ES_READONLY); else ExcludeWindowStyle(hWnd,ES_READONLY); return 0; case EM_SETPASSWORDCHAR: pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); if (pMLEditData->passwdChar != (int)wParam) { if (dwStyle & ES_PASSWORD) { pMLEditData->passwdChar = (int)wParam; InvalidateRect (hWnd, NULL, TRUE); } } return 0; case EM_GETPASSWORDCHAR: { int* passwdchar; pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); passwdchar = (int*) lParam; *passwdchar = pMLEditData->passwdChar; } return 0; case EM_LIMITTEXT: { int newLimit = (int)wParam; if (newLimit >= 0) { pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); if (pMLEditData->totalLen < newLimit) pMLEditData->hardLimit = -1; else pMLEditData->hardLimit = newLimit; } } return 0; default: return DefWindowProc (hWnd, message, wParam, lParam); break; } return 0; /* !DefaultControlProc (hWnd, message, wParam, lParam); */}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -