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

📄 medit.c

📁 这是针对 Linux (i386)平台的 minigui 3.6.2 开发包(MiniGUI-Processes 运行模式)。
💻 C
📖 第 1 页 / 共 5 页
字号:
        SetPenColor (hdc, GetWindowElementColorEx (hWnd, FGC_CONTROL_DEF));        for (i = 0; i < pMLEditData->MaxlinesDisp; i++)            DrawHDotLine (hdc,                     pMLEditData->leftMargin,                     pMLEditData->topMargin + pMLEditData->lineHeight * (i + 1) - 1,                    RECTW (rect) - pMLEditData->leftMargin - pMLEditData->rightMargin);    }    rect.left    += pMLEditData->leftMargin;    rect.top     += pMLEditData->topMargin ;    rect.right   -= pMLEditData->rightMargin;    rect.bottom  -= pMLEditData->bottomMargin;    ClipRectIntersect (hdc, &rect);    if (dwStyle & WS_DISABLED)        SetTextColor (hdc, GetWindowElementColorEx (hWnd, FGC_CONTROL_DIS));    else        SetTextColor (hdc, GetWindowElementColorEx (hWnd, FGC_CONTROL_DEF));    SetBkMode (hdc, BM_TRANSPARENT);    for (i = pMLEditData->StartlineDisp;             i <= pMLEditData->EndlineDisp; i++) {        int y, line=i, wrapline=0;        if (dwStyle & ES_AUTOWRAP)            edtGetLineNums (pMLEditData, i, &line, &wrapline);            pLineData= GetLineData(pMLEditData, line);        if (pLineData == NULL)            break;        edtGetLineInfo (hWnd, pLineData);        if (dwStyle & ES_AUTOWRAP) {             if (pMLEditData->fit_chars == 0 &&                             pMLEditData->EndlineDisp >= pMLEditData->wraplines) {                //FIXME                continue;                }        }        else {             if (pMLEditData->fit_chars == 0 &&                             pMLEditData->EndlineDisp >= pMLEditData->lines) {                //FIXME                continue;                }        }        if (dwStyle & ES_PASSWORD)            memset (dispBuffer, pMLEditData->passwdChar, pLineData->dataEnd);            memcpy (dispBuffer,                    pLineData->buffer,                pLineData->dataEnd);               dispBuffer[pLineData->dataEnd] = '\0';        y = pMLEditData->lineHeight*                        (i - pMLEditData->StartlineDisp)                    + pMLEditData->topMargin;        //fprint (stderr, "textOut-buffer = %s\n", dispBuffer+pLineData->wrapStartPos[wrapline]);        if (dwStyle & ES_AUTOWRAP)            TextOutLen (hdc,                 pMLEditData->leftMargin - pMLEditData->dispPos,                 y,                dispBuffer+pMLEditData->pos_chars[pLineData->wrapStartPos[wrapline]],                pMLEditData->pos_chars[pLineData->wrapStartPos[wrapline+1]]                    -pMLEditData->pos_chars[pLineData->wrapStartPos[wrapline]]);        else            TextOut(hdc,                 pMLEditData->leftMargin - pMLEditData->dispPos, y,                dispBuffer);    }    EndPaint (hWnd, hdc);}/* ----------------------------------- key process --------------------------------------- */static int edtKeyEnter (HWND hWnd){    DWORD dwStyle     = GetWindowStyle(hWnd);    PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);    PLINEDATA   pLineData;    int     line, wrapline;    char *  tempP = NULL;    PLINEDATA temp = NULL;    RECT    InvRect;     GetClientRect (hWnd, &InvRect);    InvRect.left = pMLEditData->leftMargin - 1;    if (dwStyle & ES_READONLY) {        Ping();        return 0;    }    edtPosProc (hWnd);     if ((pMLEditData->totalLimit >= 0)             && ((pMLEditData->curtotalLen + 1) > pMLEditData->totalLimit)) {        Ping ();        NotifyParent (hWnd, GetDlgCtrlID(hWnd), EN_MAXTEXT);        return 0;    }else        pMLEditData->curtotalLen++;    if (dwStyle & ES_AUTOWRAP)    {        edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline);        pLineData = GetLineData(pMLEditData, line);    }else        pLineData = GetLineData(pMLEditData,pMLEditData->editLine);        if (dwStyle & ES_AUTOWRAP)    {        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 = 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;}static int edtKeyCursorblockLeft (HWND hWnd){    DWORD dwStyle     = GetWindowStyle(hWnd);    PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);    BOOL         bScroll = FALSE;    int          newStartPos, line, wrapline;    PLINEDATA    temp;    PLINEDATA    pLineData;    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)        {            edtSetScrollInfo (hWnd, pMLEditData, TRUE);            InvalidateRect(hWnd,NULL,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;            }        }    }    else    {            if (pMLEditData->veditPos == pMLEditData->vdispPos){            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);            }            bScroll = TRUE;        }else {            pMLEditData->veditPos--;        }                }        pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];    edtSetCaretPos (hWnd);    //FIXME    if (bScroll) {        edtSetScrollInfo (hWnd, pMLEditData, TRUE);        InvalidateRect (hWnd, NULL, TRUE);    }

⌨️ 快捷键说明

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