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

📄 medit.c

📁 在ecos 下mingui 的移植开发
💻 C
📖 第 1 页 / 共 5 页
字号:
                break;            }                   if (bChange)				NotifyParent (hWnd, GetDlgCtrlID(hWnd), EN_CHANGE);            return 0;        }        case MSG_CHAR:        {            char charBuffer [2];            int  i, chars, inserting, oldeditPos;            RECT InvRect; // added by leon to optimize display			BOOL bScroll = FALSE;            pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); 			GetClientRect (hWnd, &InvRect);			oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos]							- pMLEditData->dx_chars[pMLEditData->vdispPos];			pLineData = GetLineData(pMLEditData,pMLEditData->editLine);            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 (pMLEditData->status & EST_REPLACE) {                				if (pMLEditData->veditPos == pMLEditData->fit_chars)                    inserting = chars;                else 					inserting = chars - ( pMLEditData->pos_chars[pMLEditData->veditPos + 1]								- pMLEditData->pos_chars[pMLEditData->veditPos] );            }            else                inserting = chars;            // check space            if (pLineData->dataEnd + inserting > pMLEditData->totalLen) {                Ping ();				NotifyParent (hWnd, GetDlgCtrlID(hWnd), EN_MAXTEXT);                return 0;            }            else if ((pMLEditData->hardLimit >= 0)                         && ((pLineData->dataEnd + inserting)                             > pMLEditData->hardLimit)) {                Ping ();				NotifyParent (hWnd, GetDlgCtrlID(hWnd), EN_MAXTEXT);                return 0;            }            if (inserting == -1) {                for (i = pMLEditData->pos_chars[pMLEditData->veditPos];						i < pLineData->dataEnd-1; i++)						pLineData->buffer [i] = pLineData->buffer [i + 1];            }            else if (inserting > 0) {                for (i = pLineData->dataEnd + inserting - 1;                         i > pMLEditData->pos_chars[pMLEditData->veditPos] + inserting - 1;                         i--)                    pLineData->buffer [i]                             = pLineData->buffer [i - inserting];            }            for (i = 0; i < chars; i++)                    pLineData->buffer [pMLEditData->pos_chars[pMLEditData->veditPos] + i]                         = charBuffer [i];                        pMLEditData->veditPos += 1;            pLineData->dataEnd += inserting;			pLineData->buffer[pLineData->dataEnd] = '\0';            			edtGetLineInfo (hWnd, pLineData);			//for display			if (((pMLEditData->dx_chars[pMLEditData->veditPos] 							- pMLEditData->dx_chars[pMLEditData->vdispPos])						>= edtGetOutWidth (hWnd))					&& (pMLEditData->dx_chars[pMLEditData->veditPos - 1] 							- pMLEditData->dx_chars[pMLEditData->vdispPos])						< edtGetOutWidth (hWnd)) {				bScroll = TRUE;				pMLEditData->vdispPos = edtGetNewvPos (hWnd, pLineData, 											pMLEditData->dx_chars[pMLEditData->veditPos]											- edtGetOutWidth (hWnd)*3/4);			}			edtSetCaretPos (hWnd);			// added by leon to optimize display            if (!bScroll) {				// only current line to redraw				InvRect.left = oldeditPos + pMLEditData->leftMargin;				InvRect.top = (pMLEditData->editLine - pMLEditData->StartlineDisp) 								* GetSysCharHeight ()//Mneeded		    	   	            + pMLEditData->topMargin;				InvRect.bottom = InvRect.top + GetSysCharHeight ();				// added by leon to optimize display			}            InvalidateRect (hWnd, &InvRect,FALSE);// modified by leon to display			//format = DT_NOPREFIX;			NotifyParent (hWnd, GetDlgCtrlID(hWnd), EN_CHANGE);			// added by leon for scrollbars			edtSetScrollInfo (hWnd, pMLEditData, TRUE);	   	   	// added by leon for scrollbars        }        return 0;        case MSG_GETTEXTLENGTH:		{			PLINEDATA temp;            int    textLength = 0;            pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); 			temp = pMLEditData->head;			while(temp)			{				textLength += temp->dataEnd + 1; //The Length of data and \r				temp = temp->next;			}        return --textLength;        }		case MSG_GETTEXT:		{			PLINEDATA temp;			int len,total = 0,lineNO;			char * buffer = (char*)lParam;            pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); 			len = (int)wParam;            lineNO = (int)wParam;			temp = pMLEditData->head;			while (temp && total + temp->dataEnd +1  < len)  			{				if (temp != pMLEditData->head)				{                    buffer[total]='\012';                    total++;                }				memcpy(buffer+total,temp->buffer,temp->dataEnd);				total += temp->dataEnd;				temp = temp->next;			}				buffer[total]='\000';//finish flag.		}		return 0;//can i add it to message define ?/*        case MSG_GETLINETEXT:        {			PLINEDATA temp;            char*   buffer = (char*)lParam;            int     lineNO,len;            pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);             lineNO = (int)wParam;			temp = GetLineData(pMLEditData,lineNO);			if(temp)			{				len = min ((int)wParam, temp->dataEnd);		    	memcpy (buffer, temp->buffer,len);		        buffer [len] = '\0';				return 0;			}            return -1;        }        break;*/		case MSG_SETTEXT:		{      		pMLEditData =(PMLEDITDATA)GetWindowAdditionalData2(hWnd);/* add by frankch to empty the buffer */		MLEditEmptyBuffer(pMLEditData);/* add finished */       		MLEditInitBuffer(pMLEditData,(char *)lParam);            pMLEditData->editPos        = 0;			pMLEditData->veditPos		= 0;            pMLEditData->caretPos       = 0;            pMLEditData->editLine       = 0;            pMLEditData->dispPos        = 0;			pMLEditData->vdispPos		= 0;			edtGetLineInfo (hWnd, GetLineData(pMLEditData, 0));            SetCaretPos (hWnd, pMLEditData->leftMargin,pMLEditData->topMargin);            InvalidateRect (hWnd, NULL,FALSE);			// added by leon for scrollbars			edtSetScrollInfo (hWnd, pMLEditData, TRUE);	   	   	// added by leon for scrollbars		}		return 0;//can i add it to message defined?/*        case MSG_SETLINETEXT:        {            int len,lineNO;			PLINEDATA temp;            if (dwStyle & ES_READONLY)                return 0;            pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);                         len = strlen ((char*)lParam);			lineNO = (int)wParam;			temp = pMLEditData->head;            len = min (len, pMLEditData->totalLen);                        if (pMLEditData->hardLimit >= 0)                len = min (len, pMLEditData->hardLimit);          	while (temp)			{				if(temp->lineNO == lineNO)				{     		        temp->dataEnd = len;            	    memcpy (temp->buffer, (char*)lParam, len);				}				temp = temp->next;			}            pMLEditData->editPos        = 0;            pMLEditData->caretPos       = 0;            pMLEditData->dispPos        = 0;            InvalidateRect (hWnd, NULL, FALSE);        }        return 0;*/        case MSG_LBUTTONDBLCLK:        break;                case MSG_LBUTTONDOWN:        {            int newOff, lineNO, olddispPos;			BOOL bScroll = FALSE;      		pMLEditData =(PMLEDITDATA)GetWindowAdditionalData2(hWnd);           			olddispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];            lineNO = edtGetLineNO (pMLEditData, HIWORD (lParam));			if (lineNO < 0)				return 0;			lineNO += pMLEditData->StartlineDisp;			if (lineNO > pMLEditData->lines - 1)				return 0;			pMLEditData->editLine = lineNO;						newOff = LOWORD (lParam) + olddispPos;			bScroll = edtGetCaretValid (hWnd,lineNO, olddispPos, newOff);						edtSetCaretPos (hWnd);            /*			SetCaretPos (hWnd,                 		pMLEditData->dx_chars[pMLEditData->veditPos] 							- pMLEditData->dx_chars[pMLEditData->vdispPos]                       		+ pMLEditData->leftMargin, 					    (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight()//Mneeded                            + pMLEditData->topMargin);			*/			// added by leon to optimize display			if (bScroll)				InvalidateRect(hWnd,NULL,FALSE);				// added by leon to optimize display			// added by leon for scrollbars			edtSetScrollInfo (hWnd, pMLEditData, TRUE);	   	   	// added by leon for scrollbars        }        break;        case MSG_LBUTTONUP:        break;                case MSG_MOUSEMOVE:        break;                case MSG_GETDLGCODE:        return DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTARROWS;                case EM_SETREADONLY:            if (wParam)				IncludeWindowStyle(hWnd,ES_READONLY);            else				ExcludeWindowStyle(hWnd,ES_READONLY);        return 0;                case EM_SETPASSWORDCHAR:            pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);             if (pMLEditData->passwdChar != (int)wParam) {                if (dwStyle & ES_PASSWORD) {                    pMLEditData->passwdChar = (int)wParam;                    InvalidateRect (hWnd, NULL, TRUE);                }            }        return 0;            case EM_GETPASSWORDCHAR:        {            int* passwdchar;                        pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);             passwdchar = (int*) lParam;            *passwdchar = pMLEditData->passwdChar;        }        return 0;            case EM_LIMITTEXT:        {            int newLimit = (int)wParam;                        if (newLimit >= 0) {            pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);                 if (pMLEditData->totalLen < newLimit)                    pMLEditData->hardLimit = -1;                else                    pMLEditData->hardLimit = newLimit;            }        }        return 0;				case MSG_VSCROLL:		{			int 	LinesDisp,newTop;			RECT 	rc;			int olddispPos;			int newOff;			GetClientRect (hWnd, &rc);            pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); 			LinesDisp = (rc.bottom - rc.top - pMLEditData->topMargin - pMLEditData->bottomMargin)				   		/ GetSysCharHeight ();			olddispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];			newOff = pMLEditData->dx_chars[pMLEditData->veditPos];		   				switch (wParam)			{				case SB_LINEDOWN:				{					if (pMLEditData->EndlineDisp == pMLEditData->lines -1)						return 0;					if (pMLEditData->EndlineDisp < pMLEditData->lines - 1) {						pMLEditData->EndlineDisp++;						pMLEditData->StartlineDisp++;						pMLEditData->editLine++;					}				}				break;				case SB_LINEUP:				{					if (pMLEditData->StartlineDisp == 0)						return 0;					if (pMLEditData->StartlineDisp >  0) {						pMLEditData->StartlineDisp--;						pMLEditData->EndlineDisp--;						pMLEditData->editLine--;					}				}				break;				case SB_PAGEDOWN:				{					if (pMLEditData->EndlineDisp == pMLEditData->lines -1)						return 0;					if (pMLEditData->lines - pMLEditData->EndlineDisp > LinesDisp - 1) {						pMLEditData->StartlineDisp = pMLEditData->EndlineDisp;						pMLEditData->editLine += LinesDisp - 1;						pMLEditData->EndlineDisp += LinesDisp -1;					}else {						pMLEditData->EndlineDisp = pMLEditData->lines - 1;						pMLEditData->editLine += (pMLEditData->EndlineDisp - (LinesDisp - 1))							   					- pMLEditData->StartlineDisp;						pMLEditData->StartlineDisp = pMLEditData->EndlineDisp - (LinesDisp - 1);					}				}				break;				case SB_PAGEUP:				{										if (pMLEditData->StartlineDisp == 0)						return 0;					if (pMLEditData->StartlineDisp > LinesDisp - 1) {						pMLEditData->EndlineDisp = pMLEditData->StartlineDisp;						pMLEditData->StartlineDisp -= LinesDisp - 1;						pMLEditData->editLine -= LinesDisp - 1;					}else {				

⌨️ 快捷键说明

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