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

📄 medit.c

📁 这是针对 Linux (i386)平台的 minigui 3.6.2 开发包(MiniGUI-Processes 运行模式)。
💻 C
📖 第 1 页 / 共 5 页
字号:
    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 + -