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

📄 edit.c

📁 在ecos 下mingui 的移植开发
💻 C
📖 第 1 页 / 共 3 页
字号:
                    else                        deleted = 1;                                            for (i = pSLEditData->editPos;                             i < pSLEditData->dataEnd;                            i++)                        pSLEditData->buffer [i - deleted]                             = pSLEditData->buffer [i];                    pSLEditData->dataEnd -= deleted;                    pSLEditData->editPos -= deleted;                    bChange = TRUE;                                        pSLEditData->caretOff -= deleted;                    if (pSLEditData->caretOff == 0                             && pSLEditData->editPos != 0) {                        if (edtIsACCharBeforePosition (pSLEditData->buffer,                                 pSLEditData->editPos)) {                            pSLEditData->startPos -= 2;                            pSLEditData->caretOff = 2;                        }                        else {                            pSLEditData->startPos --;                            pSLEditData->caretOff = 1;                        }                                                InvRect.left = pSLEditData->leftMargin;                        InvRect.top = pSLEditData->topMargin;                        InvRect.right = pCtrl->cr - pCtrl->cl;                        InvRect.bottom = pCtrl->cb - pCtrl->ct;                    }                    else {                        InvRect.left = pSLEditData->leftMargin                                    + pSLEditData->caretOff * GetSysCharWidth ();                        InvRect.top = pSLEditData->topMargin;                        InvRect.right = pCtrl->cr - pCtrl->cl;                        InvRect.bottom = pCtrl->cb - pCtrl->ct;                    }                                            SetCaretPos (hWnd,                         pSLEditData->caretOff * GetSysCharWidth ()                             + pSLEditData->leftMargin,                         pSLEditData->topMargin);                    InvalidateRect (hWnd, &InvRect, FALSE);                break;                default:                break;            }                   if (bChange)                NotifyParent (hWnd, pCtrl->id, EN_CHANGE);            return 0;        }        case MSG_CHAR:        {            char charBuffer [2];            int  i, chars, scrollStep, inserting;            RECT InvRect;            pSLEditData = (PSLEDITDATA) (pCtrl->dwAddData2);            if (dwStyle & ES_READONLY) {                Ping();                return 0;            }                        if (HIBYTE (wParam)) {                charBuffer [0] = LOBYTE (wParam);                charBuffer [1] = HIBYTE (wParam);                chars = 2;            }            else {                charBuffer [0] = LOBYTE (wParam);                chars = 1;            }                        if (chars == 1) {                switch (charBuffer [0])                {                    case 0x00:  // NULL                    case 0x07:  // BEL                    case 0x08:  // BS                    case 0x09:  // HT                    case 0x0A:  // LF                    case 0x0B:  // VT                    case 0x0C:  // FF                    case 0x0D:  // CR                    case 0x1B:  // Escape                    return 0;                }            }            if (pSLEditData->status & EST_REPLACE) {                if (pSLEditData->dataEnd == pSLEditData->editPos)                    inserting = chars;                else if (edtIsACCharAtPosition (pSLEditData->buffer,                                 pSLEditData->dataEnd,                                pSLEditData->editPos)) {                    if (chars == 2)                        inserting = 0;                    else                        inserting = -1;                }                else {                    if (chars == 2)                        inserting = 1;                    else                        inserting = 0;                }            }            else                inserting = chars;            // check space            if (pSLEditData->dataEnd + inserting > pSLEditData->bufferLen) {                Ping ();                NotifyParent (hWnd, pCtrl->id, EN_MAXTEXT);                return 0;            }            else if ((pSLEditData->hardLimit >= 0)                         && ((pSLEditData->dataEnd + inserting)                             > pSLEditData->hardLimit)) {                Ping ();                NotifyParent (hWnd, pCtrl->id, EN_MAXTEXT);                return 0;            }            if (inserting == -1) {                for (i = pSLEditData->editPos; i < pSLEditData->dataEnd-1; i++)                    pSLEditData->buffer [i] = pSLEditData->buffer [i + 1];            }            else if (inserting > 0) {                for (i = pSLEditData->dataEnd + inserting - 1;                         i > pSLEditData->editPos + inserting - 1;                         i--)                    pSLEditData->buffer [i]                             = pSLEditData->buffer [i - inserting];            }            for (i = 0; i < chars; i++)                    pSLEditData->buffer [pSLEditData->editPos + i]                         = charBuffer [i];                        pSLEditData->editPos += chars;            pSLEditData->caretOff += chars;            pSLEditData->dataEnd += inserting;            if (pSLEditData->caretOff * GetSysCharWidth ()                             > edtGetOutWidth (pCtrl))            {                if (edtIsACCharAtPosition (pSLEditData->buffer,                                 pSLEditData->dataEnd,                                pSLEditData->startPos))                    scrollStep = 2;                else {                    if (chars == 2) {                        if (edtIsACCharAtPosition (pSLEditData->buffer,                                 pSLEditData->dataEnd,                                pSLEditData->startPos + 1))                            scrollStep = 3;                        else                            scrollStep = 2;                    }                    else                        scrollStep = 1;                }                                    pSLEditData->startPos += scrollStep;                pSLEditData->caretOff =                             pSLEditData->editPos - pSLEditData->startPos;                InvRect.left = pSLEditData->leftMargin;                InvRect.top = pSLEditData->topMargin;                InvRect.right = pCtrl->cr - pCtrl->cl;                InvRect.bottom = pCtrl->cb - pCtrl->ct;            }            else {                InvRect.left = pSLEditData->leftMargin                                    + (pSLEditData->caretOff - chars)                                        * GetSysCharWidth ();                InvRect.top = pSLEditData->topMargin;                InvRect.right = pCtrl->cr - pCtrl->cl;                InvRect.bottom = pCtrl->cb - pCtrl->ct;            }            SetCaretPos (hWnd,                         pSLEditData->caretOff * GetSysCharWidth ()                             + pSLEditData->leftMargin,                         pSLEditData->topMargin);            InvalidateRect (hWnd, &InvRect, FALSE);            NotifyParent (hWnd, pCtrl->id, EN_CHANGE);        }        return 0;        case MSG_GETTEXTLENGTH:            pSLEditData = (PSLEDITDATA) (pCtrl->dwAddData2);            return pSLEditData->dataEnd;        return 0;                case MSG_GETTEXT:        {            char*   buffer = (char*)lParam;            int     len;            pSLEditData = (PSLEDITDATA) (pCtrl->dwAddData2);            len = min ((int)wParam, pSLEditData->dataEnd);            memcpy (buffer, pSLEditData->buffer, len);            buffer [len] = '\0';            return len;        }        break;        case MSG_SETTEXT:        {            int len;            if (dwStyle & ES_READONLY)                return 0;            pSLEditData = (PSLEDITDATA) (pCtrl->dwAddData2);                        len = strlen ((char*)lParam);            len = min (len, pSLEditData->bufferLen);                        if (pSLEditData->hardLimit >= 0)                len = min (len, pSLEditData->hardLimit);                       pSLEditData->dataEnd = len;            memcpy (pSLEditData->buffer, (char*)lParam, len);            pSLEditData->editPos        = 0;            pSLEditData->caretOff       = 0;            pSLEditData->startPos       = 0;                        InvalidateRect (hWnd, NULL, FALSE);        }        return 0;        case MSG_LBUTTONDBLCLK:            NotifyParent (hWnd, pCtrl->id, EN_DBLCLK);        break;                case MSG_LBUTTONDOWN:        {            int newOff;                        pSLEditData = (PSLEDITDATA) (pCtrl->dwAddData2);                        newOff = edtGetOffset (pSLEditData, LOWORD (lParam));                        if (newOff != pSLEditData->caretOff) {                pSLEditData->editPos += newOff - pSLEditData->caretOff;                pSLEditData->caretOff = newOff;                SetCaretPos (hWnd,                         pSLEditData->caretOff * GetSysCharWidth ()                             + pSLEditData->leftMargin,                         pSLEditData->topMargin);            }            NotifyParent (hWnd, pCtrl->id, EN_CLICKED);        }        break;        case MSG_LBUTTONUP:        break;                case MSG_MOUSEMOVE:        break;                case MSG_GETDLGCODE:        return DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTARROWS;                case EM_SETREADONLY:            if (wParam)                pCtrl->dwStyle |= ES_READONLY;            else                pCtrl->dwStyle &= ~ES_READONLY;        return 0;                case EM_SETPASSWORDCHAR:            pSLEditData = (PSLEDITDATA) (pCtrl->dwAddData2);            if (pSLEditData->passwdChar != (int)wParam) {                if (dwStyle & ES_PASSWORD) {                    pSLEditData->passwdChar = (int)wParam;                    InvalidateRect (hWnd, NULL, TRUE);                }            }        return 0;            case EM_GETPASSWORDCHAR:        {            int* passwdchar;                        pSLEditData = (PSLEDITDATA) (pCtrl->dwAddData2);            passwdchar = (int*) lParam;            *passwdchar = pSLEditData->passwdChar;        }        return 0;            case EM_LIMITTEXT:        {            int newLimit = (int)wParam;                        if (newLimit >= 0) {                pSLEditData = (PSLEDITDATA) (pCtrl->dwAddData2);                if (pSLEditData->bufferLen < newLimit)                    pSLEditData->hardLimit = -1;                else                    pSLEditData->hardLimit = newLimit;            }        }        return 0;            default:        break;    }     return DefaultControlProc (hWnd, message, wParam, lParam);}

⌨️ 快捷键说明

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