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

📄 medit.c

📁 神龙卡开发原代码
💻 C
📖 第 1 页 / 共 4 页
字号:
							}							if(pMLEditData->StartlineDisp == pMLEditData->editLine									&& pMLEditData->StartlineDisp != 0)							{								pMLEditData->StartlineDisp--;									if(pMLEditData->EndlineDisp == pMLEditData->lines)									pMLEditData->EndlineDisp--;							}							if(pMLEditData->lines <= pMLEditData->MaxlinesDisp)							{								pMLEditData->linesDisp--;								pMLEditData->EndlineDisp--;							}							pMLEditData->lines--;						}						else if (pLineData->dataEnd > 0)						{							leftLen = LEN_MLEDIT_BUFFER - temp->dataEnd;							memcpy(temp->buffer+temp->dataEnd,pLineData->buffer,leftLen);							temp->dataEnd +=leftLen;							temp->buffer[temp->dataEnd] = '\0';							memcpy(pLineData->buffer,pLineData->buffer+leftLen,pLineData->dataEnd-leftLen);  							pLineData->dataEnd -=leftLen;							pLineData->buffer[pLineData->dataEnd] = '\0';						}						pMLEditData->editLine--;						pMLEditData->editPos = tempEnd;						pMLEditData->dispPos = tempEnd;						/* 当编辑位置不为0,caret位置为0的时候,移动caret位置. */           		        if (pMLEditData->caretPos == 0                 	            && pMLEditData->editPos != 0) {        	                if (edtIsACCharBeforePosition (pLineData->buffer,                                     pLineData->dataEnd,            	                    pMLEditData->editPos)) {                	           	pMLEditData->dispPos -= 2;                    	        pMLEditData->caretPos = 2;                   		    }                        	else {								pMLEditData->dispPos--;							                           		pMLEditData->caretPos = 1;                    	    }                   	 	}                    	else if (pMLEditData->caretPos < 0) {							pMLEditData->dispPos = 0;                        	pMLEditData->caretPos = 0;                    	}					}					else if (pMLEditData->editPos != 0 )					{	                    if (edtIsACCharBeforePosition (pLineData->buffer,                                         pLineData->dataEnd,    	                                pMLEditData->editPos))        	                deleted = 2;            	        else                	        deleted = 1;                            	                for (i = pMLEditData->editPos;         	                    i < pLineData->dataEnd;            	                i++)                	        pLineData->buffer [i - deleted]                     	        = pLineData->buffer [i];  	    	            pLineData->dataEnd -= deleted;    	                pMLEditData->editPos -= deleted;                	    pMLEditData->caretPos -= deleted;	                    if (pMLEditData->caretPos == 0     	                        && pMLEditData->editPos != 0) {        	                if (edtIsACCharBeforePosition (pLineData->buffer,                                     pLineData->dataEnd,            	                    pMLEditData->editPos)) {                	            pMLEditData->dispPos -= 2;                    	        pMLEditData->caretPos = 2;       		                 }            	            else {                	            pMLEditData->dispPos --;                    	        pMLEditData->caretPos = 1;                    	    }                                        	    }					}            	    bChange = TRUE;                    SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)                             + pMLEditData->leftMargin, 					    (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)                            + pMLEditData->topMargin);                    InvalidateRect (hWnd, NULL, FALSE);				}                break;                default:                break;            }                   if (bChange)                SendMessage (GetParent (hWnd), WM_COMMAND,                         (WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_CHANGE),                        (LPARAM) hWnd);            return 0;        }        case WM_CHAR:        {            char charBuffer [2];            int  i, chars, scrollStep, inserting;			UINT format;	            pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); 			pLineData = GetLineData(pMLEditData,pMLEditData->editLine);            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 (GetWindowAdditionalData(hWnd) & EST_REPLACE) {                if (pLineData->dataEnd == pMLEditData->editPos)                    inserting = chars;                else if (edtIsACCharAtPosition (pLineData->buffer,                                 pLineData->dataEnd,                                pMLEditData->editPos)) {                    if (chars == 2)                        inserting = 0;                            else                        inserting = -1;                       }                else {                    if (chars == 2)                        inserting = 1;		  	                    else                        inserting = 0;                        }            }            else                inserting = chars;            /* check space */            if (pLineData->dataEnd + inserting > pMLEditData->totalLen) {#if 0	/* fix no ping */                Ping ();#endif                SendMessage (GetParent (hWnd), WM_COMMAND,                            (WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_MAXTEXT),                            (LPARAM) hWnd);                return 0;            }            else if ((pMLEditData->hardLimit >= 0)                         && ((pLineData->dataEnd + inserting)                             > pMLEditData->hardLimit)) {#if 0	/* fix no ping */                Ping ();#endif                SendMessage (GetParent (hWnd), WM_COMMAND,                            (WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_MAXTEXT),                            (LPARAM) hWnd);                return 0;            }            if (inserting == -1) {                for (i = pMLEditData->editPos; i < pLineData->dataEnd-1; i++)                    pLineData->buffer [i] = pLineData->buffer [i + 1];            }            else if (inserting > 0) {                for (i = pLineData->dataEnd + inserting - 1;                         i > pMLEditData->editPos + inserting - 1;                         i--)                    pLineData->buffer [i]                             = pLineData->buffer [i - inserting];            }            for (i = 0; i < chars; i++)                    pLineData->buffer [pMLEditData->editPos + i]                         = charBuffer [i];                        pMLEditData->editPos += chars;            pMLEditData->caretPos += chars;            pLineData->dataEnd += inserting;			pLineData->buffer[pLineData->dataEnd] = '\0';            if (pMLEditData->caretPos * GetSysCharWidth (hWnd)                             > edtGetOutWidth (hWnd))            {                if (edtIsACCharAtPosition (pLineData->buffer,                                 pLineData->dataEnd,                                pMLEditData->dispPos))                    scrollStep = 2;                else {                    if (chars == 2) {                        if (edtIsACCharAtPosition (pLineData->buffer,                                 pLineData->dataEnd,                                pMLEditData->dispPos + 1))                            scrollStep = 3;                        else                            scrollStep = 2;                    }                    else                        scrollStep = 1;                }                                    pMLEditData->dispPos += scrollStep;                pMLEditData->caretPos =                             pMLEditData->editPos - pMLEditData->dispPos;            }            SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)                             + pMLEditData->leftMargin, 					    (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)                            + pMLEditData->topMargin);            InvalidateRect (hWnd, NULL,FALSE);			format = DT_NOPREFIX;            SendMessage (GetParent (hWnd), WM_COMMAND,                    (WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_CHANGE),                    (LPARAM) hWnd);        }        return 0;        case WM_GETTEXTLENGTH:		{			PLINEDATA temp;			int    lineNO = (int)wParam;            pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); 			temp = pMLEditData->head;			while(temp)			{				if (temp->lineNO == lineNO)					return  temp->dataEnd;				temp = temp->next;			}        return -1;        }		case WM_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 < len)  			{				memcpy(buffer+total,temp->buffer,temp->dataEnd);				total += temp->dataEnd;				temp = temp->next;			}								}		return 0;/* can i add it to message define ? */#if 0        case WM_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 WM_SETTEXT:		{			MLEditInitBuffer(pMLEditData,(char *)lParam);		}		return 0;#endif/* can i add it to message defined? */#if 0        case WM_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;#endif        case WM_LBUTTONDBLCLK:        break;                case WM_LBUTTONDOWN:        {            int newOff,lineNO;			PLINEDATA temp;			BOOL bScroll = FALSE;                        pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);             lineNO = edtGetLineNO (hWnd,pMLEditData, HIWORD (lParam));			if ( lineNO < 0 )				return 0;			lineNO += pMLEditData->StartlineDisp;			if (lineNO <= pMLEditData->EndlineDisp && lineNO <= pMLEditData->lines-1 )			{				temp = GetLineData(pMLEditData,lineNO);		   		        newOff = edtGetOffset (hWnd,pMLEditData,temp, LOWORD (lParam));				if(!edtIsACCharFromBegin(temp->buffer,temp->dataEnd,pMLEditData->dispPos))				{					bScroll = TRUE;					pMLEditData->dispPos--;   	        		newOff = edtGetOffset (hWnd,pMLEditData,temp, LOWORD(lParam)+GetSysCharWidth(hWnd)/2);				}    	        if (newOff != pMLEditData->caretPos || lineNO != pMLEditData->editLine) {					pMLEditData->editLine = temp->lineNO;   	        	    pMLEditData->editPos = newOff +pMLEditData->dispPos;        	        pMLEditData->caretPos = newOff;   	        	    SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)            	            + pMLEditData->leftMargin, 					(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)                	        	+ pMLEditData->topMargin);           		}				if(bScroll)					InvalidateRect(hWnd,NULL,FALSE);			}        }        break;        case WM_LBUTTONUP:        break;                case WM_MOUSEMOVE:        break;                case WM_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;            default:    		return DefWindowProc (hWnd, message, wParam, lParam);        break;    }     return 0;	/* !DefaultControlProc (hWnd, message, wParam, lParam); */}

⌨️ 快捷键说明

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