⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 medit.c

📁 miniucgui1.30版本的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
                        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 + -