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

📄 simedit.c

📁 linux下的图形界面开发minigui最新源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
            if (simed->status & EST_FOCUSED)                break;                        simed->status |= EST_FOCUSED;            /* only implemented for ES_LEFT align format. */            SetCaretPos (hWnd, simed->caretOff * GetSysCharWidth () + simed->leftMargin,                 simed->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, TRUE);            }            return 0;        case MSG_NCPAINT:            if (wParam)                hdc = wParam;            else                hdc = GetDC (hWnd);            if (lParam)                ClipRectIntersect (hdc, (RECT*)lParam);            if (dwStyle & WS_BORDER)#ifdef _FLAT_WINDOW_STYLE                DrawFlatControlFrameEx (hdc, 0, 0,                                      pCtrl->right - pCtrl->left - 1,                                      pCtrl->bottom - pCtrl->top - 1,                                      PIXEL_invalid, 1, -1);#else                Draw3DDownFrame (hdc, 0, 0,                                       pCtrl->right - pCtrl->left - 1,                                       pCtrl->bottom - pCtrl->top - 1,                                      PIXEL_invalid);#endif            if (!wParam)                ReleaseDC (hdc);            return 0;        case MSG_PAINT:        {            int     dispLen;            char*   dispBuffer;            RECT    rect;                        simed = (PSIMEDITDATA) (pCtrl->dwAddData2);            dispLen = edtGetDispLen (pCtrl);            if (dispLen == 0)                break;            GetClientRect (hWnd, &rect);            /* only implemented ES_LEFT align format for single line edit. */            rect.left += simed->leftMargin;            rect.top += simed->topMargin;            rect.right -= simed->rightMargin;            rect.bottom -= simed->bottomMargin;                if (dwStyle & ES_PASSWORD) {                dispBuffer = alloca (dispLen);                memset (dispBuffer, '*', dispLen);            }            else                dispBuffer = simed->buffer + simed->startPos;            hdc = BeginPaint (hWnd);            if (dwStyle & WS_DISABLED) {                SetBrushColor (hdc, PIXEL_lightgray);                SetBkColor (hdc, PIXEL_lightgray);            }            else {                SetBrushColor (hdc, PIXEL_lightwhite);                SetBkColor (hdc, PIXEL_lightwhite);            }            SetTextColor (hdc, PIXEL_black);            ClipRectIntersect (hdc, &rect);            TextOutLen (hdc, simed->leftMargin, simed->topMargin, dispBuffer, dispLen);            EndPaint (hWnd, hdc);            return 0;        }        case MSG_KEYDOWN:        {            BOOL    bChange = FALSE;            int     i;            RECT    InvRect;            int     deleted;            simed = (PSIMEDITDATA) (pCtrl->dwAddData2);                    switch (LOWORD (wParam))            {                case SCANCODE_ENTER:                    NotifyParent (hWnd, pCtrl->id, EN_ENTER);                return 0;                case SCANCODE_HOME:                    if (simed->editPos == 0)                        return 0;                    simed->editPos  = 0;                    simed->caretOff = 0;                                        SetCaretPos (hWnd,                         simed->caretOff * GetSysCharWidth ()                             + simed->leftMargin,                         simed->topMargin);                    if (simed->startPos != 0)                        InvalidateRect (hWnd, NULL, TRUE);                                        simed->startPos = 0;                return 0;                           case SCANCODE_END:                {                    int newStartPos;                                       if (simed->editPos == simed->dataEnd)                        return 0;                    newStartPos = edtGetStartDispPosAtEnd (pCtrl, simed);                                        simed->editPos = simed->dataEnd;                    simed->caretOff = simed->editPos - newStartPos;                                        SetCaretPos (hWnd,                         simed->caretOff * GetSysCharWidth ()                            + simed->leftMargin,                         simed->topMargin);                    if (simed->startPos != newStartPos)                        InvalidateRect (hWnd, NULL, TRUE);                                        simed->startPos = newStartPos;                }                return 0;                case SCANCODE_CURSORBLOCKLEFT:                {                    BOOL bScroll = FALSE;                    int  scrollStep;                                        if (simed->editPos == 0)                        return 0;                    if (edtIsACCharBeforePosition (simed->buffer,                             simed->editPos)) {                        scrollStep = 2;                        simed->editPos -= 2;                    }                    else {                        scrollStep = 1;                        simed->editPos --;                    }                    simed->caretOff -= scrollStep;                    if (simed->caretOff == 0                             && simed->editPos != 0) {                        bScroll = TRUE;                        if (edtIsACCharBeforePosition (simed->buffer,                                 simed->editPos)) {                            simed->startPos -= 2;                            simed->caretOff = 2;                        }                        else {                            simed->startPos --;                            simed->caretOff = 1;                        }                    }                    else if (simed->caretOff < 0) {                        simed->startPos = 0;                        simed->caretOff = 0;                    }                                            SetCaretPos (hWnd,                         simed->caretOff * GetSysCharWidth ()                             + simed->leftMargin,                         simed->topMargin);                    if (bScroll)                        InvalidateRect (hWnd, NULL, TRUE);                }                return 0;                                case SCANCODE_CURSORBLOCKRIGHT:                {                    BOOL bScroll = FALSE;                    int  scrollStep, moveStep;                    if (simed->editPos == simed->dataEnd)                        return 0;                    if (edtIsACCharAtPosition (simed->buffer,                                 simed->dataEnd,                                simed->startPos)) {                        if (edtIsACCharAtPosition (simed->buffer,                                     simed->dataEnd,                                    simed->editPos)) {                            scrollStep = 2;                            moveStep = 2;                            simed->editPos  += 2;                        }                        else {                            scrollStep = 2;                            moveStep = 1;                            simed->editPos ++;                        }                    }                    else {                        if (edtIsACCharAtPosition (simed->buffer,                                     simed->dataEnd,                                    simed->editPos)) {                                                                if (edtIsACCharAtPosition (simed->buffer,                                     simed->dataEnd,                                    simed->startPos + 1))                                scrollStep = 3;                            else                                scrollStep = 2;                            moveStep = 2;                            simed->editPos += 2;                        }                        else {                            scrollStep = 1;                            moveStep = 1;                            simed->editPos ++;                        }                    }                    simed->caretOff += moveStep;                    if (simed->caretOff * GetSysCharWidth ()                             > edtGetOutWidth (pCtrl)) {                        bScroll = TRUE;                        simed->startPos += scrollStep;                        simed->caretOff =                             simed->editPos - simed->startPos;                    }                    SetCaretPos (hWnd,                         simed->caretOff * GetSysCharWidth ()                             + simed->leftMargin,                         simed->topMargin);                    if (bScroll)                        InvalidateRect (hWnd, NULL, TRUE);                }                return 0;                                case SCANCODE_INSERT:                    simed = (PSIMEDITDATA) (pCtrl->dwAddData2);                    simed->status ^= EST_REPLACE;                break;                case SCANCODE_REMOVE:                    simed = (PSIMEDITDATA) (pCtrl->dwAddData2);                    if ((dwStyle & ES_READONLY)                            || (simed->editPos == simed->dataEnd)){                        return 0;                    }                                        if (edtIsACCharAtPosition (simed->buffer,                                     simed->dataEnd,                                    simed->editPos))                        deleted = 2;                    else                        deleted = 1;                                            for (i = simed->editPos;                             i < simed->dataEnd - deleted;                            i++)                        simed->buffer [i]                             = simed->buffer [i + deleted];                    simed->dataEnd -= deleted;                    bChange = TRUE;                                        InvRect.left = simed->leftMargin                                    + simed->caretOff * GetSysCharWidth ();                    InvRect.top = simed->topMargin;                    InvRect.right = pCtrl->cr - pCtrl->cl;                    InvRect.bottom = pCtrl->cb - pCtrl->ct;                                        InvalidateRect (hWnd, &InvRect, TRUE);                break;                case SCANCODE_BACKSPACE:                    simed = (PSIMEDITDATA) (pCtrl->dwAddData2);                    if ((dwStyle & ES_READONLY)                            || (simed->editPos == 0)) {                        return 0;                    }                    if (edtIsACCharBeforePosition (simed->buffer,                                     simed->editPos))                        deleted = 2;                    else                        deleted = 1;                                            for (i = simed->editPos;                             i < simed->dataEnd;                            i++)                        simed->buffer [i - deleted]                             = simed->buffer [i];                    simed->dataEnd -= deleted;                    simed->editPos -= deleted;                    bChange = TRUE;                                        simed->caretOff -= deleted;                    if (simed->caretOff == 0                             && simed->editPos != 0) {                        if (edtIsACCharBeforePosition (simed->buffer,                                 simed->editPos)) {                            simed->startPos -= 2;                            simed->caretOff = 2;                        }                        else {                            simed->startPos --;                            simed->caretOff = 1;                        }                                                InvRect.left = simed->leftMargin;                        InvRect.top = simed->topMargin;                        InvRect.right = pCtrl->cr - pCtrl->cl;                        InvRect.bottom = pCtrl->cb - pCtrl->ct;                    }

⌨️ 快捷键说明

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