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

📄 edit.c

📁 神龙卡开发原代码
💻 C
📖 第 1 页 / 共 3 页
字号:
                            + pSLEditData->leftMargin, pSLEditData->topMargin);                    if (bScroll)                        InvalidateRect (hWnd, NULL, FALSE);                }                return 0;#if 0                                case SCANCODE_INSERT:                    pCtrl->userdata ^= EST_REPLACE;                break;#endif                case VK_DELETE: /* SCANCODE_REMOVE: */                    if ((pCtrl->userdata & EST_READONLY)                            || (pSLEditData->editPos == pSLEditData->dataEnd)){	#if 0	/* fix: no ping() */			Ping ();	#endif                        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 (hWnd);                    InvRect.top = pSLEditData->topMargin;                    InvRect.right = pCtrl->clirect.right - pCtrl->clirect.left;                    InvRect.bottom = pCtrl->clirect.bottom - pCtrl->clirect.top;                    InvalidateRect (hWnd, &InvRect, FALSE);                break;                case VK_BACK: /* SCANCODE_BACKSPACE: */                    if ((pCtrl->userdata & EST_READONLY)                            || (pSLEditData->editPos == 0)) {#if 0 	/* fix: no ping */                        Ping ();#endif                        return 0;                    }                    if (edtIsACCharBeforePosition (pSLEditData->buffer,                                     pSLEditData->editPos))                        deleted = 2;                    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->clirect.right -				pCtrl->clirect.left;                        InvRect.bottom = pCtrl->clirect.bottom -				pCtrl->clirect.top;                    }                    else {                        InvRect.left = pSLEditData->leftMargin			    + pSLEditData->caretOff * GetSysCharWidth (hWnd);                        InvRect.top = pSLEditData->topMargin;                        InvRect.right = pCtrl->clirect.right -				pCtrl->clirect.left;                        InvRect.bottom = pCtrl->clirect.bottom -				pCtrl->clirect.top;                    }                    SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd)                             + pSLEditData->leftMargin, pSLEditData->topMargin);                    InvalidateRect (hWnd, &InvRect, FALSE);                break;                default:                break;            }                   if (bChange)                SendMessage (GetParent (hWnd), WM_COMMAND,                     (WPARAM) MAKELONG (pCtrl->id, EN_CHANGE), (LPARAM) hWnd);        }	break;#endif        case WM_CHAR:        {            char charBuffer [2];            int  i, chars, scrollStep, inserting;            RECT InvRect;            pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);            if (dwStyle & ES_READONLY) {#if 0	/* fix: no ping() */                Ping();#endif                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 (pCtrl->userdata & 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) {#if 0	/* fix: no ping() */                Ping ();#endif                SendMessage (GetParent (hWnd), WM_COMMAND,		    (WPARAM) MAKELONG (pCtrl->id, EN_MAXTEXT), (LPARAM) hWnd);                return 0;            }            else if ((pSLEditData->hardLimit >= 0)                         && ((pSLEditData->dataEnd + inserting)                             > pSLEditData->hardLimit)) {#if 0	/* fix: no ping() */                Ping ();#endif                SendMessage (GetParent (hWnd), WM_COMMAND,		    (WPARAM) MAKELONG (pCtrl->id, EN_MAXTEXT), (LPARAM) hWnd);                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 (hWnd)                             > 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->clirect.right - pCtrl->clirect.left;                InvRect.bottom = pCtrl->clirect.bottom - pCtrl->clirect.top;            }            else {                InvRect.left = pSLEditData->leftMargin                                    + (pSLEditData->caretOff - chars)                                        * GetSysCharWidth (hWnd);                InvRect.top = pSLEditData->topMargin;                InvRect.right = pCtrl->clirect.right - pCtrl->clirect.left;                InvRect.bottom = pCtrl->clirect.bottom - pCtrl->clirect.top;            }            SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd)                             + pSLEditData->leftMargin, pSLEditData->topMargin);            InvalidateRect (hWnd, &InvRect, FALSE);            SendMessage (GetParent (hWnd), WM_COMMAND,                (WPARAM) MAKELONG (pCtrl->id, EN_CHANGE), (LPARAM) hWnd);        }        break;        case WM_GETTEXTLENGTH:            pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);            return pSLEditData->dataEnd;                case WM_GETTEXT:        {            char*   buffer = (char*)lParam;            int     len;            pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);            len = min ((int)wParam, pSLEditData->dataEnd);            memcpy (buffer, pSLEditData->buffer, len);            buffer [len] = '\0';            return len;        }        break;        case WM_SETTEXT:        {            int len;            if (dwStyle & ES_READONLY)                return 0;            pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);                        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);        }        break;        case WM_LBUTTONDBLCLK:        break;                case WM_LBUTTONDOWN:        {            int newOff;            pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);            newOff = edtGetOffset (hWnd,pSLEditData, LOWORD (lParam));                        if (newOff != pSLEditData->caretOff) 	    {                pSLEditData->editPos += newOff - pSLEditData->caretOff;                pSLEditData->caretOff = newOff;                SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd)                         + pSLEditData->leftMargin, pSLEditData->topMargin);            }        }        break;        case WM_LBUTTONUP:        break;                case WM_MOUSEMOVE:        break;        case WM_GETDLGCODE:        return DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTARROWS;        case EM_SETREADONLY:            if (wParam)                pCtrl->style/*dwStyle*/ |= ES_READONLY;            else                pCtrl->style/*dwStyle*/ &= ~ES_READONLY;        return 0;                case EM_SETPASSWORDCHAR:            pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);            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->userdata2);            passwdchar = (int*) lParam;            *passwdchar = pSLEditData->passwdChar;        }        return 0;            case EM_LIMITTEXT:        {            int newLimit = (int)wParam;                        if (newLimit >= 0) {                pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);                if (pSLEditData->bufferLen < newLimit)                    pSLEditData->hardLimit = -1;                else                    pSLEditData->hardLimit = newLimit;            }        }        return 0;            default:    		return DefWindowProc (hWnd, message, wParam, lParam);        break;    }     return 0;}

⌨️ 快捷键说明

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