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

📄 medit.c

📁 在ADS环境下MiniGUI的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
                                - 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);
    }
    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;

⌨️ 快捷键说明

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