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

📄 edit.c

📁 在ecos 下mingui 的移植开发
💻 C
📖 第 1 页 / 共 3 页
字号:
            if (pSLEditData->status & EST_FOCUSED)                return 0;                        pSLEditData->status |= EST_FOCUSED;            // only implemented for ES_LEFT align format.            SetCaretPos (hWnd,                 pSLEditData->caretOff * GetSysCharWidth ()                     + pSLEditData->leftMargin,                 pSLEditData->topMargin);                            ShowCaret (hWnd);            ActiveCaret (hWnd);            NotifyParent (hWnd, pCtrl->id, EN_SETFOCUS);        break;                case MSG_ENABLE:            if ( (!(dwStyle & WS_DISABLED) && !wParam)                    || ((dwStyle & WS_DISABLED) && wParam) ) {                if (wParam)                    pCtrl->dwStyle &= ~WS_DISABLED;                else                    pCtrl->dwStyle |=  WS_DISABLED;                InvalidateRect (hWnd, NULL, FALSE);            }        return 0;        case MSG_NCPAINT:            if (wParam)                hdc = wParam;            else                hdc = GetDC (hWnd);            if (lParam)                ClipRectIntersect (hdc, (RECT*)lParam);            if (dwStyle & WS_BORDER)                Draw3DDownFrame (hdc, 0, 0,                                       pCtrl->right - pCtrl->left - 1,                                       pCtrl->bottom - pCtrl->top - 1,                                      PIXEL_invalid);            if (!wParam)                ReleaseDC (hdc);        return 0;        case MSG_PAINT:        {            int     dispLen;            char*   dispBuffer;            RECT    rect;                        pSLEditData = (PSLEDITDATA) (pCtrl->dwAddData2);            hdc = BeginPaint (hWnd);            if (pSLEditData->logfont)                SelectFont (hdc, pSLEditData->logfont);            GetClientRect (hWnd, &rect);                if (dwStyle & WS_DISABLED)            {                SetBrushColor (hdc, PIXEL_lightgray);                FillBox (hdc, 0, 0, rect.right, rect.bottom);                SetBkColor (hdc, PIXEL_lightgray);            }            else {                SetBrushColor (hdc, PIXEL_lightwhite);                FillBox (hdc, 0, 0, rect.right, rect.bottom);                SetBkColor (hdc, PIXEL_lightwhite);            }            SetTextColor (hdc, PIXEL_black);            dispLen = edtGetDispLen (pCtrl);            if (dispLen == 0) {                EndPaint (hWnd, hdc);                break;            }#ifdef _DEBUG            if (pSLEditData->startPos > pSLEditData->dataEnd)                fprintf (stderr, "ASSERT failure: %s.\n", "Edit Paint");#endif                        dispBuffer = alloca (dispLen + 1);            if (dwStyle & ES_PASSWORD)                memset (dispBuffer, '*', dispLen);            else                memcpy (dispBuffer,                     pSLEditData->buffer + pSLEditData->startPos,                    dispLen);            dispBuffer [dispLen] = '\0';            // only implemented ES_LEFT align format for single line edit.            rect.left += pSLEditData->leftMargin;            rect.top += pSLEditData->topMargin;            rect.right -= pSLEditData->rightMargin;            rect.bottom -= pSLEditData->bottomMargin;                        ClipRectIntersect (hdc, &rect);            TextOut (hdc,                 pSLEditData->leftMargin,                pSLEditData->topMargin,                 dispBuffer);                        EndPaint (hWnd, hdc);        }        break;        case MSG_KEYDOWN:        {            BOOL    bChange = FALSE;            int     i;            RECT    InvRect;            int     deleted;            pSLEditData = (PSLEDITDATA) (pCtrl->dwAddData2);                    switch (LOWORD (wParam))            {                case SCANCODE_ENTER:                    NotifyParent (hWnd, pCtrl->id, EN_ENTER);                return 0;                case SCANCODE_HOME:                    if (pSLEditData->editPos == 0)                        return 0;                    pSLEditData->editPos  = 0;                    pSLEditData->caretOff = 0;                                        SetCaretPos (hWnd,                         pSLEditData->caretOff * GetSysCharWidth ()                             + pSLEditData->leftMargin,                         pSLEditData->topMargin);                    if (pSLEditData->startPos != 0)                        InvalidateRect (hWnd, NULL, FALSE);                                        pSLEditData->startPos = 0;                return 0;                           case SCANCODE_END:                {                    int newStartPos;                                       if (pSLEditData->editPos == pSLEditData->dataEnd)                        return 0;                    newStartPos = edtGetStartDispPosAtEnd (pCtrl, pSLEditData);                                        pSLEditData->editPos = pSLEditData->dataEnd;                    pSLEditData->caretOff = pSLEditData->editPos - newStartPos;                                        SetCaretPos (hWnd,                         pSLEditData->caretOff * GetSysCharWidth ()                            + pSLEditData->leftMargin,                         pSLEditData->topMargin);                    if (pSLEditData->startPos != newStartPos)                        InvalidateRect (hWnd, NULL, FALSE);                                        pSLEditData->startPos = newStartPos;                }                return 0;                case SCANCODE_CURSORBLOCKLEFT:                {                    BOOL bScroll = FALSE;                    int  scrollStep;                                        if (pSLEditData->editPos == 0)                        return 0;                    if (edtIsACCharBeforePosition (pSLEditData->buffer,                             pSLEditData->editPos)) {                        scrollStep = 2;                        pSLEditData->editPos -= 2;                    }                    else {                        scrollStep = 1;                        pSLEditData->editPos --;                    }                    pSLEditData->caretOff -= scrollStep;                    if (pSLEditData->caretOff == 0                             && pSLEditData->editPos != 0) {                        bScroll = TRUE;                        if (edtIsACCharBeforePosition (pSLEditData->buffer,                                 pSLEditData->editPos)) {                            pSLEditData->startPos -= 2;                            pSLEditData->caretOff = 2;                        }                        else {                            pSLEditData->startPos --;                            pSLEditData->caretOff = 1;                        }                    }                    else if (pSLEditData->caretOff < 0) {                        pSLEditData->startPos = 0;                        pSLEditData->caretOff = 0;                    }                                            SetCaretPos (hWnd,                         pSLEditData->caretOff * GetSysCharWidth ()                             + pSLEditData->leftMargin,                         pSLEditData->topMargin);                    if (bScroll)                        InvalidateRect (hWnd, NULL, FALSE);                }                return 0;                                case SCANCODE_CURSORBLOCKRIGHT:                {                    BOOL bScroll = FALSE;                    int  scrollStep, moveStep;                    if (pSLEditData->editPos == pSLEditData->dataEnd)                        return 0;                    if (edtIsACCharAtPosition (pSLEditData->buffer,                                 pSLEditData->dataEnd,                                pSLEditData->startPos)) {                        if (edtIsACCharAtPosition (pSLEditData->buffer,                                     pSLEditData->dataEnd,                                    pSLEditData->editPos)) {                            scrollStep = 2;                            moveStep = 2;                            pSLEditData->editPos  += 2;                        }                        else {                            scrollStep = 2;                            moveStep = 1;                            pSLEditData->editPos ++;                        }                    }                    else {                        if (edtIsACCharAtPosition (pSLEditData->buffer,                                     pSLEditData->dataEnd,                                    pSLEditData->editPos)) {                                                                if (edtIsACCharAtPosition (pSLEditData->buffer,                                     pSLEditData->dataEnd,                                    pSLEditData->startPos + 1))                                scrollStep = 3;                            else                                scrollStep = 2;                            moveStep = 2;                            pSLEditData->editPos += 2;                        }                        else {                            scrollStep = 1;                            moveStep = 1;                            pSLEditData->editPos ++;                        }                    }                    pSLEditData->caretOff += moveStep;                    if (pSLEditData->caretOff * GetSysCharWidth ()                             > edtGetOutWidth (pCtrl)) {                        bScroll = TRUE;                        pSLEditData->startPos += scrollStep;                        pSLEditData->caretOff =                             pSLEditData->editPos - pSLEditData->startPos;                    }                    SetCaretPos (hWnd,                         pSLEditData->caretOff * GetSysCharWidth ()                             + pSLEditData->leftMargin,                         pSLEditData->topMargin);                    if (bScroll)                        InvalidateRect (hWnd, NULL, FALSE);                }                return 0;                                case SCANCODE_INSERT:                    pSLEditData = (PSLEDITDATA) (pCtrl->dwAddData2);                    pSLEditData->status ^= EST_REPLACE;                break;                case SCANCODE_REMOVE:                    pSLEditData = (PSLEDITDATA) (pCtrl->dwAddData2);                    if ((pSLEditData->status & EST_READONLY)                            || (pSLEditData->editPos == pSLEditData->dataEnd)){                        Ping ();                        return 0;                    }                                        if (edtIsACCharAtPosition (pSLEditData->buffer,                                     pSLEditData->dataEnd,                                    pSLEditData->editPos))                        deleted = 2;                    else                        deleted = 1;                                            for (i = pSLEditData->editPos;                             i < pSLEditData->dataEnd - deleted;                            i++)                        pSLEditData->buffer [i]                             = pSLEditData->buffer [i + deleted];                    pSLEditData->dataEnd -= deleted;                    bChange = TRUE;                                        InvRect.left = pSLEditData->leftMargin                                    + pSLEditData->caretOff * GetSysCharWidth ();                    InvRect.top = pSLEditData->topMargin;                    InvRect.right = pCtrl->cr - pCtrl->cl;                    InvRect.bottom = pCtrl->cb - pCtrl->ct;                                        InvalidateRect (hWnd, &InvRect, FALSE);                break;                case SCANCODE_BACKSPACE:                    pSLEditData = (PSLEDITDATA) (pCtrl->dwAddData2);                    if ((pSLEditData->status & EST_READONLY)                            || (pSLEditData->editPos == 0)) {                        Ping ();                        return 0;                    }                    if (edtIsACCharBeforePosition (pSLEditData->buffer,                                     pSLEditData->editPos))                        deleted = 2;

⌨️ 快捷键说明

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