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

📄 medit.c

📁 这是针对 Linux (i386)平台的 minigui 3.6.2 开发包(MiniGUI-Processes 运行模式)。
💻 C
📖 第 1 页 / 共 5 页
字号:
                    temp->lineNO--;                    temp = temp->next;                }                edtGetLineInfo (hWnd, pLineData);                }            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';            }            calcLineInfo (hWnd, pMLEditData, pLineData);            edtGetLineInfo (hWnd, pLineData);            pMLEditData->lines--;            pMLEditData->wraplines += pLineData->nwrapline;                    }else {            deleted = pMLEditData->pos_chars[pMLEditData->veditPos + 1]                        - pMLEditData->pos_chars[pMLEditData->veditPos];            pMLEditData->curtotalLen -= deleted;            for (i = pMLEditData->pos_chars[pMLEditData->veditPos];                     i < pLineData->dataEnd - deleted;                    i++)                pLineData->buffer [i]                     = pLineData->buffer [i + deleted];            pLineData->dataEnd -= deleted;            if (pLineData->dataEnd == 0) {                pMLEditData->fit_chars = 0;                pMLEditData->pos_chars[0] = 0;                pMLEditData->dx_chars[0] = 0;            }            pLineData->buffer[pLineData->dataEnd] = '\0';            pMLEditData->wraplines -= pLineData->nwrapline;            calcLineInfo (hWnd, pMLEditData, pLineData);            pMLEditData->wraplines += pLineData->nwrapline;            edtGetLineInfo (hWnd, pLineData);            if (wrapline == oldnwrapline - 1)                InvRect.left = pMLEditData->dx_chars[pMLEditData->veditPos]                    - pMLEditData->dx_chars[pLineData->wrapStartPos[wrapline]]                    + pMLEditData->leftMargin - 1;             if (oldnwrapline == pLineData->nwrapline)                InvRect.bottom = InvRect.top + pMLEditData->lineHeight                                                *(pLineData->nwrapline-wrapline);        }        pMLEditData->EndlineDisp = MIN (pMLEditData->StartlineDisp                                        + pMLEditData->MaxlinesDisp - 1,                                       pMLEditData->wraplines - 1);        pMLEditData->linesDisp = pMLEditData->EndlineDisp                                     - pMLEditData->StartlineDisp + 1;        if (wrapline == pLineData->nwrapline /*&& pLineData->nwrapline != 1*/                        && pMLEditData->veditPos == pMLEditData->fit_chars)        {            pMLEditData->editLine--;            if (pMLEditData->editLine < pMLEditData->StartlineDisp)            {                bScroll = TRUE;                pMLEditData->StartlineDisp--;                pMLEditData->EndlineDisp = MIN (pMLEditData->StartlineDisp +                                                    pMLEditData->MaxlinesDisp -1,                                                 pMLEditData->EndlineDisp);                pMLEditData->linesDisp = pMLEditData->EndlineDisp                                             - pMLEditData->StartlineDisp + 1;            }        }        if (oldnwrapline != pLineData->nwrapline)            bScroll = TRUE;        edtSetCaretPos (hWnd);        //FIXME        if (bScroll) {            edtSetScrollInfo (hWnd, pMLEditData, TRUE);            InvalidateRect (hWnd, &InvRect,TRUE);         }        if (pMLEditData->bSCROLL)            InvalidateRect (hWnd, NULL, TRUE);        NotifyParent (hWnd, GetDlgCtrlID(hWnd), EN_CHANGE);        return 0;    }       temp = pLineData->next;     if (pMLEditData->veditPos == pMLEditData->fit_chars && temp)    {        if(pLineData->dataEnd + temp->dataEnd <= LEN_MLEDIT_BUFFER)        {            pMLEditData->curtotalLen --;            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;            }            edtGetLineInfo (hWnd, pLineData);                if(pMLEditData->EndlineDisp >= pMLEditData->lines-1)                    {            // added by leon to optimize display            if ((pMLEditData->EndlineDisp == pMLEditData->lines -1)                         && (pMLEditData->StartlineDisp != 0)) {                InvRect.bottom = (pMLEditData->editLine - pMLEditData->StartlineDisp + 1)                                     * pMLEditData->lineHeight + pMLEditData->topMargin;            }else {                InvRect.top = (pMLEditData->editLine - pMLEditData->StartlineDisp)                         * pMLEditData->lineHeight + pMLEditData->topMargin;            }            // added by leon to optimize display                if(pMLEditData->StartlineDisp !=0)                {                    pMLEditData->StartlineDisp--;                    pMLEditData->EndlineDisp = MIN ( pMLEditData->lines-1,                        pMLEditData->StartlineDisp+pMLEditData->MaxlinesDisp -1);                } else                    pMLEditData->EndlineDisp--;                                pMLEditData->linesDisp = pMLEditData->EndlineDisp -                                pMLEditData->StartlineDisp+1;            }            else if (pMLEditData->lines <= pMLEditData->MaxlinesDisp)            {                pMLEditData->EndlineDisp--;                pMLEditData->linesDisp = pMLEditData->EndlineDisp -                                pMLEditData->StartlineDisp+1;            }            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';            // added by leon to optimize display            InvRect.top = (pMLEditData->editLine - pMLEditData->StartlineDisp)                     * pMLEditData->lineHeight + pMLEditData->topMargin;            // added by leon to optimize display        }    }    else if (pMLEditData->veditPos != pMLEditData->fit_chars)    {            edtGetLineInfo (hWnd, GetLineData (pMLEditData, pMLEditData->editLine));        deleted = pMLEditData->pos_chars[pMLEditData->veditPos + 1]                    - pMLEditData->pos_chars[pMLEditData->veditPos];        pMLEditData->curtotalLen -= deleted;        for (i = pMLEditData->pos_chars[pMLEditData->veditPos];                 i < pLineData->dataEnd - deleted;                i++)            pLineData->buffer [i]                 = pLineData->buffer [i + deleted];        pLineData->dataEnd -= deleted;        if (pLineData->dataEnd == 0) {            pMLEditData->fit_chars = 0;            pMLEditData->pos_chars[0] = 0;            pMLEditData->dx_chars[0] = 0;        }        pLineData->buffer[pLineData->dataEnd] = '\0';        // only current line to redraw        if (pMLEditData->EndlineDisp <= pMLEditData->lines - 1) {            InvRect.left = pMLEditData->dx_chars[pMLEditData->veditPos]                             - pMLEditData->dx_chars[pMLEditData->vdispPos]                                + pMLEditData->leftMargin - 1;             InvRect.top = (pMLEditData->editLine - pMLEditData->StartlineDisp)                             * pMLEditData->lineHeight                            + pMLEditData->topMargin;            InvRect.bottom = InvRect.top + pMLEditData->lineHeight * 2;        }    }    else {        InvRect.left = InvRect.top = InvRect.right = InvRect.bottom = 0;        Ping ();    }        edtGetLineInfo (hWnd, GetLineData (pMLEditData, pMLEditData->editLine));    pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];    edtSetCaretPos (hWnd);    InvalidateRect (hWnd, &InvRect,TRUE);     edtSetScrollInfo (hWnd, pMLEditData, TRUE);    if (pMLEditData->bSCROLL)        InvalidateRect (hWnd, NULL, TRUE);    NotifyParent (hWnd, GetDlgCtrlID(hWnd), EN_CHANGE);    return 0;}static int edtKeyBackspace (HWND hWnd){    DWORD dwStyle     = GetWindowStyle(hWnd);    PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);    PLINEDATA    pLineData;    PLINEDATA temp;    int leftLen,tempEnd;    int oldnwrapline;    BOOL bScroll = FALSE;    RECT    InvRect;     int     deleted, i;    int     line, wrapline;    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);     temp = pLineData->previous;        if (!temp && !(pMLEditData->veditPos)) return 0;        if (dwStyle & ES_AUTOWRAP)    {        oldnwrapline = pLineData->nwrapline;/*-----------------------------*/                                    if (pMLEditData->veditPos == 0 && temp)        {            pMLEditData->wraplines -= pLineData->nwrapline + temp->nwrapline;            pMLEditData->curtotalLen --;                        tempEnd = temp->dataEnd;            edtGetLineInfo (hWnd, temp);                            if(pLineData->dataEnd + temp->dataEnd <= LEN_MLEDIT_BUFFER)                {                pMLEditData->veditPos = pMLEditData->fit_chars;                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)                {                    temp->lineNO--;                    temp = temp->next;                }                pMLEditData->lines--;                if (pMLEditData->editLine == pMLEditData->StartlineDisp)                {                    pMLEditData->StartlineDisp--;                    bScroll = TRUE;                } /*else if ( pMLEditData->EndlineDisp == pMLEditData->wraplines-1) {                    if( pMLEditData->StartlineDisp != 0)                        pMLEditData->StartlineDisp--;                    }*/                   calcLineInfo (hWnd, pMLEditData, pLineData);                pMLEditData->wraplines += pLineData->nwrapline;                   pMLEditData->EndlineDisp = MIN (pMLEditData->wraplines - 1,                                               pMLEditData->StartlineDisp                                             + pMLEditData->MaxlinesDisp - 1 );                pMLEditData->linesDisp = pMLEditData->EndlineDisp                                - pMLEditData->StartlineDisp + 1;                    pMLEditData->editLine--;            }            else if (pLineData->dataEnd > 0)            {                pMLEditData->wraplines -= pLineData->nwrapline + temp->nwrapline;                pMLEditData->veditPos = pMLEditData->fit_chars;                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--;                   calcLineInfo (hWnd, pMLEditData, pLineData);                   calcLineInfo (hWnd, pMLEditData, temp);                pMLEditData->wraplines += pLineData->nwrapline + temp->nwrapline;            }            InvRect.top = (pMLEditData->editLine - pMLEditData->StartlineDisp)                               * pMLEditData->lineHeight                            + pMLEditData->topMargin;        } else if (pMLEditData->veditPos != 0 ) {// not the head             pMLEditData->wraplines -= pLineData->nwrapline;            deleted = pMLEditData->pos_chars[pMLEditData->veditPos]                         - pMLEditData->pos_chars[pMLEditData->veditPos - 1];            pMLEditData->curtotalLen -= deleted;            for (i = pMLEditData->pos_chars[pMLEditData->veditPos];                     i < pLineData->dataEnd;                    i++)                pLineData->buffer[i - deleted] = pLineData->buffer[i];              pLineData->dataEnd -= deleted;            pMLEditData->veditPos -= 1;            pLineData->buffer[pLineData->dataEnd] = '\0';               calcLineInfo (hWnd, pMLEditData, pLineData);            InvRect.top = (pMLEditData->editLine - pMLEditData->StartlineDisp)                               * pMLEditData->lineHeight                            + pMLEditData->topMargin;            if (oldnwrapline == pLineData->nwrapline)            {                if (wrapline == oldnwrapline - 1)                    InvRect.left = pMLEditData->dx_chars[pMLEditData->veditPos]                           - pMLEditData->dx_chars[pLineData->wrapStartPos[wrapline]]                             + pMLEditData->leftMargin - 1;                 InvRect.bottom = InvRect.top + pMLEditData->lineHeight                                                *(pLineData->nwrapline-wrapline);            }            if ((pMLEditData->veditPos == pLineData->wrapStartPos[wrapline]                    || pMLEditData->veditPos == pLineData->wrapStartPos[wrapline]-1)                    && pMLEditData->editLine == pMLEditData->StartlineDisp                    && oldnwrapline > 1 && wrapline != 0)            {                pMLEditData->StartlineDisp--;                pMLEditData->editLine = pMLEditData->StartlineDisp;                bScroll = TRUE;            }else if ((pMLEditData->veditPos == pLineData->wrapStartPos[wrapline]                || pMLEditData->veditPos == pLineData->wrapStartPos[wrapline]-1)                     && oldnwrapline > 1 && wrapline != 0)            {                //FIXME                InvRect.top -= pMLEditData->lineHeight;                pMLEditData->editLine--;            }               calcLineInfo (hWnd, pMLEditData, pLineData);            pMLEditData->wraplines += pLineData->nwrapline;            pMLEditData->EndlineDisp = MIN (pMLEditData->wraplines - 1,                                           pMLEditData->StartlineDisp                                         + pMLEditData->MaxlinesDisp - 1 );            pMLEditData->linesDisp = pMLEditData->EndlineDisp                                    - pMLEditData->StartlineDisp + 1;            }        else {            InvRect.left = InvRect.top = InvRect.right = InvRect.bottom = 0; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -