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

📄 medit.c

📁 在ecos 下mingui 的移植开发
💻 C
📖 第 1 页 / 共 5 页
字号:
                gdi_tabbedtextout(hdc, 						pMLEditData->leftMargin - pMLEditData->dx_chars[pMLEditData->vdispPos],						GetSysCharHeight()*(pLineData->lineNO - pMLEditData->StartlineDisp) //Mneeded							+ pMLEditData->topMargin,						dispBuffer,						pLineData->dataEnd);				*/				                TextOut (hdc, 						pMLEditData->leftMargin - pMLEditData->dx_chars[pMLEditData->vdispPos],						GetSysCharHeight()*(pLineData->lineNO - pMLEditData->StartlineDisp) //Mneeded							+ pMLEditData->topMargin,						dispBuffer);							}            EndPaint (hWnd, hdc);        }        break;        case MSG_KEYDOWN:        {            BOOL    bChange = FALSE;            int     i;            RECT    InvRect; // modified by leon            int     deleted;			PLINEDATA temp = NULL;			char *  tempP = NULL;            pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);			GetClientRect (hWnd, &InvRect);// added by leon to optimize display                    switch (LOWORD (wParam))            {				                case SCANCODE_ENTER:				{					pLineData = GetLineData(pMLEditData,pMLEditData->editLine);					edtGetLineInfo (hWnd, pLineData);					if (pMLEditData->veditPos < pMLEditData->fit_chars)						tempP = pLineData->buffer + pMLEditData->pos_chars[pMLEditData->veditPos];			//fprintf (stderr, "temp = %s\n", tempP);			//fprintf (stderr, "veditPos= %d\n", pMLEditData->veditPos);			//fprintf (stderr, "buffer = %s\n", pLineData->buffer);			//fprintf (stderr, "dataEnd = %d\n", pLineData->dataEnd);				    temp = pLineData->next;					pLineData->next = malloc( sizeof(LINEDATA) );					pLineData->next->previous = pLineData;					pLineData->next->next = temp;					if(temp)					{						temp->previous = pLineData->next;					}					temp = pLineData->next;					temp->lineNO  = pMLEditData->editLine + 1;					if(tempP)					{						memcpy(temp->buffer,tempP,strlen(tempP));						temp->dataEnd = strlen(tempP);					}					else						temp->dataEnd = 0;					temp->buffer[temp->dataEnd] = '\0'; 					pLineData->dataEnd = pMLEditData->pos_chars[pMLEditData->veditPos];					pLineData->buffer[pLineData->dataEnd]='\0';					temp = temp->next;					while (temp)					{						temp->lineNO++;						temp = temp->next;					}					// added by leon to optimize display					if ((pMLEditData->editLine - pMLEditData->StartlineDisp + 1) < pMLEditData->MaxlinesDisp) {						if (!(pMLEditData->dx_chars[pMLEditData->veditPos] - pMLEditData->leftMargin                	         	> edtGetOutWidth (hWnd))) {							InvRect.left = pMLEditData->leftMargin;							InvRect.top  = (pMLEditData->editLine - pMLEditData->StartlineDisp -1) 												* GetSysCharHeight()//Mneeded										      	+ pMLEditData->topMargin;						}												     }else {						if ((pMLEditData->vdispPos == 0) 								&& (pMLEditData->vdispPos == pMLEditData->veditPos))		 							InvRect.bottom  -=  GetSysCharHeight(); //Mneeded					 }					// added by leon to optimize display					pMLEditData->veditPos = 0;					pMLEditData->vdispPos = 0;									if(pMLEditData->linesDisp < pMLEditData->MaxlinesDisp)					{						pMLEditData->EndlineDisp++;						pMLEditData->linesDisp++;					}					else if(pMLEditData->editLine == pMLEditData->EndlineDisp) 					{						pMLEditData->StartlineDisp++;						pMLEditData->EndlineDisp++;					}					pMLEditData->editLine++;					edtGetLineInfo (hWnd, GetLineData(pMLEditData,pMLEditData->editLine));						pMLEditData->lines++;										edtSetCaretPos (hWnd);					// added by leon for scrollbars					edtSetScrollInfo (hWnd, pMLEditData, TRUE);		        	// added by leon for scrollbars    	            InvalidateRect (hWnd, &InvRect, FALSE); // modified by leon					NotifyParent (hWnd, GetDlgCtrlID(hWnd), EN_CHANGE);        	        return 0;				}                case SCANCODE_HOME:				{					PLINEDATA temp;                    if (pMLEditData->veditPos == 0)                        return 0;					pMLEditData->veditPos = 0;										edtSetCaretPos (hWnd);					temp = GetLineData(pMLEditData,pMLEditData->editLine);	                    if (pMLEditData->vdispPos != 0)					{						pMLEditData->vdispPos = 0;					    InvalidateRect (hWnd, NULL, FALSE);					}					// added by leon for scrollbars					edtSetScrollInfo (hWnd, pMLEditData, TRUE);        			// added by leon for scrollbars               		return 0;            	}                case SCANCODE_END:                {                    int newStartPos;                    pLineData = GetLineData(pMLEditData,pMLEditData->editLine);                    //if (pMLEditData->editPos == pLineData->dataEnd)                    if (pMLEditData->veditPos == pMLEditData->fit_chars)                        return 0;                    newStartPos = edtGetStartDispPosAtEnd (hWnd, pLineData);                    //pMLEditData->editPos = pLineData->dataEnd;                    pMLEditData->veditPos = pMLEditData->fit_chars;                                        if (pMLEditData->vdispPos != newStartPos) {                    	pMLEditData->vdispPos = newStartPos;                        InvalidateRect (hWnd, NULL, FALSE);					}					edtSetCaretPos (hWnd);					// added by leon for scrollbars					edtSetScrollInfo (hWnd, pMLEditData, TRUE);	   		     	// added by leon for scrollbars                }                return 0;                case SCANCODE_CURSORBLOCKLEFT:                 {                    BOOL 		bScroll = FALSE;                    int  		newStartPos;					PLINEDATA 	temp;					pLineData = GetLineData(pMLEditData,pMLEditData->editLine);                    if (pMLEditData->veditPos == 0 )					{						temp = pLineData->previous;						if(temp && pMLEditData->editLine > 0 )						{							if (pMLEditData->editLine == pMLEditData->StartlineDisp) {								bScroll = TRUE;								pMLEditData->StartlineDisp--;								if (pMLEditData->EndlineDisp >= pMLEditData->MaxlinesDisp)									pMLEditData->EndlineDisp--;							}							pMLEditData->editLine --;							edtGetLineInfo (hWnd, GetLineData (pMLEditData, pMLEditData->editLine));							pMLEditData->veditPos = pMLEditData->fit_chars; 		                    newStartPos = edtGetStartDispPosAtEnd (hWnd, temp);                    		if (pMLEditData->vdispPos != newStartPos)							{								pMLEditData->vdispPos = newStartPos;								bScroll = TRUE;							}						}						else	                        return 0;					}					else                    {							if (pMLEditData->veditPos == pMLEditData->vdispPos){							pMLEditData->veditPos--;							if (edtGetNewvPos (hWnd,												GetLineData(pMLEditData,pMLEditData->editLine),												pMLEditData->dx_chars[pMLEditData->veditPos] 												- edtGetOutWidth (hWnd)/4) == -1)								pMLEditData->vdispPos = 0;							else {								pMLEditData->vdispPos = edtGetNewvPos (hWnd,												GetLineData(pMLEditData,pMLEditData->editLine),												pMLEditData->dx_chars[pMLEditData->veditPos] 												- edtGetOutWidth (hWnd)/4);							}							bScroll = TRUE;						}else {							pMLEditData->veditPos--;						}							                    }    					edtSetCaretPos (hWnd);                    if (bScroll)                        InvalidateRect (hWnd, NULL, FALSE);					// added by leon for scrollbars					edtSetScrollInfo (hWnd, pMLEditData, TRUE);      			  	// added by leon for scrollbars                }                return 0;                				case SCANCODE_CURSORBLOCKRIGHT:                {                    BOOL bScroll = FALSE;                    //int  scrollStep, moveStep;					PLINEDATA temp;					pLineData = GetLineData(pMLEditData,pMLEditData->editLine);                    if (pMLEditData->veditPos == pMLEditData->fit_chars) 					{						temp = pLineData->next;						if (temp && pMLEditData->editLine == pMLEditData->EndlineDisp) {							bScroll = TRUE;							pMLEditData->StartlineDisp++;							pMLEditData->EndlineDisp++;						}						if(temp)						{							pMLEditData->editLine++;							edtGetLineInfo (hWnd, GetLineData (pMLEditData, pMLEditData->editLine));							pMLEditData->editPos  = 0;							pMLEditData->veditPos  = 0;							if(pMLEditData->vdispPos !=0)							{								pMLEditData->vdispPos  = 0;								bScroll = TRUE;							}						}						else	                        return 0;					}					else                    {							// caret is at the end of the display rect						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->veditPos++;							if (edtGetNewvPos (hWnd,												GetLineData(pMLEditData,pMLEditData->editLine),												pMLEditData->dx_chars[pMLEditData->veditPos] 												- edtGetOutWidth (hWnd)/4) == -1)								pMLEditData->vdispPos = 0;							else								pMLEditData->vdispPos = edtGetNewvPos (hWnd,												GetLineData(pMLEditData,pMLEditData->editLine),												pMLEditData->dx_chars[pMLEditData->veditPos] 												- edtGetOutWidth (hWnd)/4);							if (pMLEditData->dx_chars[pMLEditData->vdispPos] 										+ edtGetOutWidth (hWnd) 									> pMLEditData->sz.cx) 								pMLEditData->vdispPos = 											edtGetStartDispPosAtEnd (hWnd, pLineData);						/*							pMLEditData->veditPos--;							if ((pMLEditData->dx_chars[pMLEditData->veditPos] 										- pMLEditData->dx_chars[pMLEditData->vdispPos] )								   >= (pMLEditData->dx_chars[pMLEditData->veditPos + 1] 										- pMLEditData->dx_chars[pMLEditData->vdispPos + 1] ))								pMLEditData->vdispPos++;							else								pMLEditData->vdispPos += 2;						*/								}else {							pMLEditData->veditPos++;						}						//pMLEditData->veditPos++;					}					edtSetCaretPos (hWnd);					/*                    SetCaretPos (hWnd,                         //pMLEditData->caretPos * GetSysCharWidth () 						pMLEditData->dx_chars[pMLEditData->veditPos] - pMLEditData->dx_chars[pMLEditData->vdispPos]                            + pMLEditData->leftMargin,                         (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight ()//Mneeded                         	+ pMLEditData->topMargin);					*/                    if (bScroll)                        InvalidateRect (hWnd, NULL, FALSE);					// added by leon for scrollbars					edtSetScrollInfo (hWnd, pMLEditData, TRUE);	   	   		  	// added by leon for scrollbars                }                return 0;               					case SCANCODE_CURSORBLOCKUP:				{                    BOOL bScroll = FALSE;                    int  newStartPos, olddispPos, oldeditPos;					PLINEDATA temp;					//GetClientRect (hWnd, &InvRect);					olddispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];					oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos];					pLineData = GetLineData(pMLEditData,pMLEditData->editLine);					temp = pLineData->previous; 					if(pMLEditData->editLine == 0)						return 0;					else if (pMLEditData->editLine == pMLEditData->StartlineDisp)					{						bScroll = TRUE;						pMLEditData->StartlineDisp--;						pMLEditData->EndlineDisp--;						}					pMLEditData->editLine--;					edtGetLineInfo (hWnd, temp);					if( olddispPos > pMLEditData->sz.cx ) 					{						pMLEditData->veditPos = pMLEditData->fit_chars;	                   	newStartPos = edtGetStartDispPosAtEnd (hWnd, temp);               			pMLEditData->vdispPos =  newStartPos;						bScroll = TRUE;					}									else 					{						pMLEditData->veditPos = edtGetNewvPos (hWnd, temp, oldeditPos);						if (pMLEditData->veditPos == -2)							pMLEditData->veditPos = pMLEditData->fit_chars;						pMLEditData->vdispPos = edtGetNewvPos (hWnd, temp, olddispPos);						if (olddispPos != pMLEditData->dx_chars[pMLEditData->vdispPos])							bScroll = TRUE;					}					                    SetCaretPos (hWnd,                         pMLEditData->dx_chars[pMLEditData->veditPos] 							- pMLEditData->dx_chars[pMLEditData->vdispPos]                             + pMLEditData->leftMargin, 					    (pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight()                            + 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 SCANCODE_CURSORBLOCKDOWN:				{                    BOOL bScroll = FALSE;                    int  newStartPos, olddispPos, oldeditPos;					PLINEDATA temp;					//GetClientRect (hWnd, &InvRect);					oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos];					olddispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];					pLineData = GetLineData(pMLEditData,pMLEditData->editLine);					temp = pLineData->next; 					if(pMLEditData->editLine == pMLEditData->lines-1)						return 0;					else if (pMLEditData->editLine == pMLEditData->EndlineDisp)					{						bScroll = TRUE;						pMLEditData->StartlineDisp++;						pMLEditData->EndlineDisp++;						}					pMLEditData->editLine++;					edtGetLineInfo (hWnd, temp);					if( olddispPos > pMLEditData->sz.cx ) 					{						pMLEditData->veditPos = pMLEditData->fit_chars;	                   	newStartPos = edtGetStartDispPosAtEnd (hWnd, temp);               			pMLEditData->vdispPos =  newStartPos;						bScroll = TRUE;					}									else 					{						pMLEditData->veditPos = edtGetNewvPos (hWnd, temp, oldeditPos);						if (pMLEditData->veditPos == -2)							pMLEditData->veditPos = pMLEditData->fit_chars;						pMLEditData->vdispPos = edtGetNewvPos (hWnd, temp, olddispPos);						if (olddispPos != pMLEditData->dx_chars[pMLEditData->vdispPos])							bScroll = TRUE;					}										//edtGetLineInfo (hWnd, GetLineData (pMLEditData, pMLEditData->editLine));					edtSetCaretPos (hWnd);					// added by leon to optimize display					if (bScroll)						InvalidateRect(hWnd,NULL,FALSE);	

⌨️ 快捷键说明

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