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

📄 ebmedit.c

📁 基于minigui开发的一套图形控件系统
💻 C
📖 第 1 页 / 共 5 页
字号:
							bScroll = TRUE;

						}else {

							pMLEditData->veditPos--;

						}

							

                    }    

					pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];

					edtSetCaretPos (hWnd, TRUE);

                    if (bScroll)

                        InvalidateRect (hWnd, NULL, TRUE);

					edtSetScrollInfo (hWnd, pMLEditData, TRUE);

					if (pMLEditData->bSCROLL)

						InvalidateRect (hWnd, NULL, TRUE);

                }

                return 0;

                

				case SCANCODE_CURSORBLOCKRIGHT:

                {

                    BOOL 		bScroll = FALSE;

                    int  		line, wrapline;

					PEBLINEDATA 	temp;



					if (dwStyle & EES_AUTOWRAP)

					{

						edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline);

						pLineData = GetLineData(pMLEditData, line);

					}

					else

						pLineData = GetLineData(pMLEditData,pMLEditData->editLine);



					if (dwStyle & EES_AUTOWRAP)

					{

						if (!(temp = pLineData->next) 

									&& pMLEditData->veditPos == pMLEditData->fit_chars) return 0;

						edtGetLineInfo (hWnd, pLineData);

						if (pMLEditData->veditPos == pMLEditData->fit_chars)

						{

							if (pMLEditData->editLine == pMLEditData->EndlineDisp) {

								bScroll = TRUE;

								pMLEditData->StartlineDisp++;

								pMLEditData->EndlineDisp++;

							}

							edtGetLineInfo (hWnd, temp);

							pMLEditData->editLine++;

							pMLEditData->veditPos = 0;

						}else if (pMLEditData->veditPos == pLineData->wrapStartPos[wrapline+1]-1)

						{

							if (pMLEditData->veditPos < 

											pLineData->wrapStartPos[pLineData->nwrapline]-1)

							{

								if (pMLEditData->editLine == pMLEditData->EndlineDisp) {

									bScroll = TRUE;

									pMLEditData->StartlineDisp++;

									pMLEditData->EndlineDisp++;

								}

								pMLEditData->editLine++;

							}

							pMLEditData->veditPos++;

						}

						else

							pMLEditData->veditPos++;



						pMLEditData->linesDisp = pMLEditData->EndlineDisp 

												- pMLEditData->StartlineDisp + 1;



						edtSetCaretPos (hWnd, TRUE);

						if (bScroll)

						{

							InvalidateRect(hWnd,NULL,TRUE);	

							edtSetScrollInfo (hWnd, pMLEditData, TRUE);

						}

						if (pMLEditData->bSCROLL)

							InvalidateRect (hWnd, NULL, TRUE);

						return 0;

					}

							

                    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->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);

						}else 

							pMLEditData->veditPos++;

					}

					pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];

					edtSetCaretPos (hWnd, TRUE);

                    if (bScroll)

                        InvalidateRect (hWnd, NULL, TRUE);

						edtSetScrollInfo (hWnd, pMLEditData, TRUE);

					if (pMLEditData->bSCROLL)

						InvalidateRect (hWnd, NULL, TRUE);

                }

                return 0;

               	

				case SCANCODE_CURSORBLOCKUP:

				case SCANCODE_CURSORUP:

				{

                    BOOL bScroll = FALSE;

                    int  newStartPos, olddispPos, oldeditPos, line, wrapline;

					PEBLINEDATA temp;

					

   		    		edtPosProc (hWnd); 

					olddispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];

					oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos];

					if (dwStyle & EES_AUTOWRAP)

					{

						edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline);

						pLineData = GetLineData(pMLEditData, line);

					}

					else

						pLineData = GetLineData(pMLEditData,pMLEditData->editLine);



					temp = pLineData->previous; 

					if(pMLEditData->editLine == 0)

						return 0;

					if (pMLEditData->editLine == pMLEditData->StartlineDisp)

					{

						bScroll = TRUE;

						pMLEditData->StartlineDisp--;

						if (dwStyle & EES_AUTOWRAP)

							pMLEditData->EndlineDisp = MIN (pMLEditData->wraplines - 1,

												pMLEditData->StartlineDisp + 

												pMLEditData->MaxlinesDisp - 1);

						else

							pMLEditData->EndlineDisp--;	

					}

					pMLEditData->editLine--;



					if (dwStyle & EES_AUTOWRAP)

					{

						oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos] 

										- pMLEditData->dx_chars[pLineData->wrapStartPos[wrapline]];

						edtGetCaretValid (hWnd, pMLEditData->editLine,

									   					olddispPos, oldeditPos);



						pMLEditData->linesDisp = pMLEditData->EndlineDisp 

												- pMLEditData->StartlineDisp + 1;

						edtSetCaretPos (hWnd, TRUE);

						if (bScroll)

							InvalidateRect(hWnd,NULL,TRUE);	

						edtSetScrollInfo (hWnd, pMLEditData, TRUE);

						if (pMLEditData->bSCROLL)

							InvalidateRect (hWnd, NULL, TRUE);

					//	NotifyParent(hWnd, GetDlgCtrlID(hWnd), EEN_VSCROLL);

						NotifyParentPos(hWnd);

						return 0;

					}	

					

					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;

					}

					

					pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];

                    SetCaretPos (hWnd, pMLEditData->dx_chars[pMLEditData->veditPos] - 

							pMLEditData->dx_chars[pMLEditData->vdispPos]+pMLEditData->leftMargin, 

					    (pMLEditData->editLine - pMLEditData->StartlineDisp) * pMLEditData->lineHeight

                            + pMLEditData->topMargin);

					if (bScroll)

						InvalidateRect(hWnd,NULL,TRUE);	

					edtSetScrollInfo (hWnd, pMLEditData, TRUE);

					if (pMLEditData->bSCROLL)

						InvalidateRect (hWnd, NULL, TRUE);

					

				//	NotifyParent(hWnd, GetDlgCtrlID(hWnd), EEN_VSCROLL);

					NotifyParentPos(hWnd);

				}

				break;

				case SCANCODE_CURSORBLOCKDOWN:

				case SCANCODE_CURSORDOWN:

				{

                    BOOL bScroll = FALSE;

                    int  newStartPos, olddispPos, oldeditPos, line, wrapline;

					PEBLINEDATA temp;

					

   		    		edtPosProc (hWnd); 

					oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos];

					olddispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];

					if (dwStyle & EES_AUTOWRAP)

					{

						edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline);

						pLineData = GetLineData(pMLEditData, line);

					}

					else

						pLineData = GetLineData(pMLEditData,pMLEditData->editLine);



					temp = pLineData->next; 

					if (dwStyle & EES_AUTOWRAP) 

					{

						if(pMLEditData->editLine == pMLEditData->wraplines-1) 

							return 0;

					}

					else 

					{

						if(pMLEditData->editLine == pMLEditData->lines-1) 

							return 0;

					}

					if (pMLEditData->editLine == pMLEditData->EndlineDisp)

					{

						bScroll = TRUE;

						pMLEditData->StartlineDisp++;

						pMLEditData->EndlineDisp++;	

					}

					pMLEditData->editLine++;



					if (dwStyle & EES_AUTOWRAP)

					{

						oldeditPos = pMLEditData->dx_chars[pMLEditData->veditPos] 

										- pMLEditData->dx_chars[pLineData->wrapStartPos[wrapline]];

						edtGetCaretValid (hWnd, pMLEditData->editLine,

									   					olddispPos, oldeditPos);



						edtSetCaretPos (hWnd, TRUE);

						if (bScroll)

							InvalidateRect(hWnd,NULL,TRUE);	

						edtSetScrollInfo (hWnd, pMLEditData, TRUE);

						if (pMLEditData->bSCROLL)

							InvalidateRect (hWnd, NULL, TRUE);

					//	NotifyParent(hWnd, GetDlgCtrlID(hWnd), EEN_VSCROLL);

						NotifyParentPos(hWnd);

						return 0;

					}	



					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;

					}

					

					pMLEditData->dispPos = pMLEditData->dx_chars[pMLEditData->vdispPos];

					edtSetCaretPos (hWnd, TRUE);

					if (bScroll)

						InvalidateRect(hWnd,NULL,TRUE);	

					edtSetScrollInfo (hWnd, pMLEditData, TRUE);

					if (pMLEditData->bSCROLL)

						InvalidateRect (hWnd, NULL, TRUE);

					

				//	NotifyParent(hWnd, GetDlgCtrlID(hWnd), EEN_VSCROLL);

					NotifyParentPos(hWnd);

				}

				break;

                case SCANCODE_INSERT:

                    pMLEditData->status ^= EEST_REPLACE;

                break;



                case SCANCODE_REMOVE:

				{

					PEBLINEDATA temp;

					int leftLen;

					int line, wrapline;

					int oldnwrapline;

					BOOL bScroll=FALSE;



		            if (dwStyle & EES_READONLY) {

		                Ping();

		                return 0;

		            }

   		    		edtPosProc (hWnd); 

					if (dwStyle & EES_AUTOWRAP)

					{

						edtGetLineNums (pMLEditData, pMLEditData->editLine, &line, &wrapline);

						pLineData = GetLineData(pMLEditData, line);

					} else

						pLineData = GetLineData(pMLEditData, pMLEditData->editLine);

					

					edtGetLineInfo (hWnd,pLineData); 



					if (dwStyle & EES_AUTOWRAP)

					{

						oldnwrapline = pLineData->nwrapline;

						InvRect.top = (pMLEditData->editLine - pMLEditData->StartlineDisp) 

										* pMLEditData->lineHeight

										+ pMLEditData->topMargin;

						if (pMLEditData->veditPos == pMLEditData->fit_chars) // end of the paragraph

						{

							bScroll = TRUE;

							if (pMLEditData->editLine == pMLEditData->wraplines-1) return 0;



                   			temp = pLineData->next; 



							pMLEditData->wraplines -= pLineData->nwrapline;

							pMLEditData->curtotalLen --;

							if (temp)

								pMLEditData->wraplines -= pLineData->next->nwrapline;



							if(pLineData->dataEnd + temp->dataEnd <= LEN_MLEDIT_BUFFER)

							{

								memcpy(pLineData->buffer+pLineData->dataEnd,temp->buffer,temp->dataEnd);	

								pLineData->dataEnd += temp->dataEnd;

								pLineData->buffer[pLineData->dataEnd] = '\0';

								if(temp->next)

								{

								    pLineData->next = temp->next;

									temp->next->previous = pLineData;	

								}

								else

									pLineData->next = NULL;

								free(temp);

								temp = pLineData->next;

								while (temp)

								{

									temp->lineNO--;

									temp = temp->next;

								}

								edtGetLineInfo (hWnd, pLineData);

					

							}

							else if (temp->dataEnd > 0)

							{

								leftLen = LEN_MLEDIT_BUFFER - pLineData->dataEnd;

								memcpy(pLineData->buffer+pLineData->dataEnd,temp->buffer,leftLen);

								pLineData->dataEnd +=leftLen;

								pLineData->buffer[pLineData->dataEnd] = '\0';

								memcpy(temp->buffer,temp->buffer+leftLen,temp->dataEnd-leftLen);  

								temp->dataEnd -= leftLen;

								temp->buffer[temp->dataEnd] = '\0';

							}

	        				calcLineInfo (hWnd, pMLEditData, pLineData);

							edtGetLineInfo (hWnd, pLineData);

							pMLEditData->lines--;

							pMLEditData->wraplines += pLineData->nwrapline;

							

						}else {

							deleted = pMLEditData->pos_chars[pMLEditData->veditPos + 1]

										- pMLEditData->pos_chars[pMLEditData->veditPos];

							pMLEditData->curtotalLen -= deleted;



            		        for (i = pMLEditData->pos_chars[pMLEditData->veditPos]; 

                		            i < pLineData->dataEnd - deleted;

                    		        i++)

 	                    	   pLineData->buffer [

⌨️ 快捷键说明

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