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

📄 edit.c

📁 神龙卡开发原代码
💻 C
📖 第 1 页 / 共 3 页
字号:
            pSLEditData->hardLimit      = -1;                        /* undo information */            pSLEditData->lastOp         = EDIT_OP_NONE;            pSLEditData->lastPos        = 0;            pSLEditData->affectedLen    = 0;            pSLEditData->undoBufferLen  = LEN_SLEDIT_UNDOBUFFER;            pSLEditData->undoBuffer [0] = '\0';            pSLEditData->dataEnd        = strlen (pCtrl->szTitle);            memcpy (pSLEditData->buffer, pCtrl->szTitle,                    min (LEN_SLEDIT_BUFFER, pSLEditData->dataEnd));            pCtrl->userdata2 = (DWORD) pSLEditData;            pCtrl->userdata  = 0;        break;        case WM_DESTROY:            DestroyCaret ();            free ((void*)pCtrl->userdata2);        break;#if 0                case WM_CHANGESIZE:        {            pCtrl->cl = pCtrl->left   + WIDTH_EDIT_BORDER;            pCtrl->ct = pCtrl->top    + WIDTH_EDIT_BORDER;            pCtrl->cr = pCtrl->right  - WIDTH_EDIT_BORDER;            pCtrl->cb = pCtrl->bottom - WIDTH_EDIT_BORDER;        }        break;#endif#if 1	/* jmt: for edit: chinese support */        case WM_SETFONT:	{		pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);        	pSLEditData->hFont = (HFONT)wParam;        	ShowWindow(hWnd, SW_HIDE);        	ShowWindow(hWnd, SW_SHOWNA);        	if(LOWORD(lParam))            		InvalidateRect(hWnd,NULL,TRUE);	}	return (LRESULT)0;                case WM_GETFONT:		pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);        	return (LRESULT)pSLEditData->hFont;#endif    #if 0            case WM_SETCURSOR:            if (dwStyle & WS_DISABLED) 	    {                SetCursor (GetSystemCursor (IDC_ARROW));                return 0;            }        break;#endif        case WM_KILLFOCUS:            pCtrl->userdata &= ~EST_FOCUSED;            HideCaret (hWnd);	    DestroyCaret ();            SendMessage (GetParent (hWnd), WM_COMMAND, 		 (WPARAM) MAKELONG (pCtrl->id, EN_KILLFOCUS), (LPARAM)hWnd);        break;                case WM_SETFOCUS:            if (pCtrl->userdata & EST_FOCUSED)                return 0;                        pCtrl->userdata |= EST_FOCUSED;            pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);            /* only implemented for ES_LEFT align format. */            CreateCaret (hWnd, NULL, 1 /*+ GetSysCharWidth(hWnd)*/,		    hWnd->clirect.bottom-hWnd->clirect.top-2);            SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd)                     + pSLEditData->leftMargin, pSLEditData->topMargin);            ShowCaret (hWnd);            SendMessage (GetParent (hWnd), WM_COMMAND,	       (WPARAM) MAKELONG (pCtrl->id, EN_SETFOCUS), (LPARAM) hWnd);        break;                case WM_ENABLE:            if ( (!(dwStyle & WS_DISABLED) && !wParam)                    || ((dwStyle & WS_DISABLED) && wParam) ) {                if (wParam)                    pCtrl->style &= ~WS_DISABLED;                else                    pCtrl->style |=  WS_DISABLED;                InvalidateRect (hWnd, NULL, FALSE);            }        break;	case WM_NCCALCSIZE:	{		LPNCCALCSIZE_PARAMS lpnc;		/* calculate client rect from passed window rect in rgrc[0]*/		lpnc = (LPNCCALCSIZE_PARAMS)lParam;		if(GetWindowLong(hWnd, GWL_STYLE) & WS_BORDER)			InflateRect(&lpnc->rgrc[0], -2, -2);	}		break;        case WM_NCPAINT:            hdc = wParam? (HDC)wParam: GetWindowDC (hWnd);	    GetWindowRect(hWnd, &rc);            if (dwStyle & WS_BORDER)		Draw3dInset(hdc, rc.left, rc.top,			rc.right-rc.left, rc.bottom-rc.top);            if (!wParam)                ReleaseDC (hWnd, hdc);            break;        case WM_PAINT:        {            int     dispLen;            char*   dispBuffer;            RECT    rect,rc;	    PAINTSTRUCT ps;	    HGDIOBJ oldfont;	    oldfont=NULL;            hdc = BeginPaint (hWnd,&ps);            GetClientRect (hWnd, &rect);                if (dwStyle & WS_DISABLED)            {#if 0                SetBrushColor (hdc, LTGRAY/*COLOR_lightgray*/);                FillBox (hdc, 0, 0, rect.right, rect.bottom);#else		rc.left=0; rc.top=0; rc.bottom=rect.bottom; rc.right=rect.right;		FillRect(hdc,&rc,GetStockObject(LTGRAY_BRUSH));#endif                SetBkColor (hdc, LTGRAY/*COLOR_lightgray*/);            }            else 	    {#if 0                SetBrushColor (hdc, WHITE/*COLOR_lightwhite*/);                FillBox (hdc, 0, 0, rect.right, rect.bottom);#else		rc.left=0; rc.top=0; rc.bottom=rect.bottom; rc.right=rect.right;		FillRect(hdc,&rc,GetStockObject(WHITE_BRUSH));#endif                SetBkColor (hdc, WHITE/*COLOR_lightwhite*/);            }            SetTextColor (hdc, BLACK/*COLOR_black*/);            dispLen = edtGetDispLen (pCtrl);            if (dispLen == 0) 	    {                EndPaint (hWnd, &ps);                break;            }            pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);#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;#if 0	/* FIXME no ClipRectIntersect() */#if 0                        ClipRectIntersect (hdc, &rect);#else	    GdSetClipRects(hdc->psd,1,&rect);	/*??==ClipRectIntersect??*/#endif#endif#ifdef USE_BIG5	    	    oldfont=SelectObject(hdc,CreateFont(12,			0,0,0,0,0,0,0,0,0,0,0,			FF_DONTCARE|DEFAULT_PITCH,			"HZXFONT"));#else    	    SelectObject(hdc, pSLEditData->hFont);#endif            TextOut (hdc, pSLEditData->leftMargin, pSLEditData->topMargin,                 dispBuffer,-1);#ifdef USE_BIG5	        	    DeleteObject(SelectObject(hdc,oldfont));#endif            	    EndPaint (hWnd, &ps);	    FREEA(dispBuffer);        }        break;#if 1	/* jmt+ */        case WM_KEYDOWN:        {            BOOL    bChange = FALSE;            int     i;            RECT    InvRect;            int     deleted;            pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);                    switch ((int)(wParam))	/* (LOWORD (wParam)) */            {#if 0                case SCANCODE_ENTER:                    SendMessage (GetParent (hWnd), WM_COMMAND, 		    	(WPARAM) MAKELONG (pCtrl->id, EN_ENTER), (LPARAM) hWnd);                return 0;                case SCANCODE_HOME:                    if (pSLEditData->editPos == 0)                        return 0;                    pSLEditData->editPos  = 0;                    pSLEditData->caretOff = 0;                    SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd)                         + 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 (pSLEditData->caretOff * GetSysCharWidth (hWnd)                        + pSLEditData->leftMargin, pSLEditData->topMargin);                   if (pSLEditData->startPos != newStartPos)                        InvalidateRect (hWnd, NULL, FALSE);                                        pSLEditData->startPos = newStartPos;                }                return 0;#endif                case VK_LEFT: /* 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 (pSLEditData->caretOff * GetSysCharWidth (hWnd)                             + pSLEditData->leftMargin, pSLEditData->topMargin);	                    if (bScroll)                        InvalidateRect (hWnd, NULL, FALSE);                }                return 0;                                case VK_RIGHT: /* 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 (hWnd)                             > edtGetOutWidth (pCtrl)) 		    {                        bScroll = TRUE;                        pSLEditData->startPos += scrollStep;                        pSLEditData->caretOff =                             pSLEditData->editPos - pSLEditData->startPos;                    }                    SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd) 

⌨️ 快捷键说明

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