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

📄 edit.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
📖 第 1 页 / 共 5 页
字号:
	lParam = (LPARAM)MapPtrToProcess( (LPVOID)lParam, GetCallerProcess() ); 
#endif

        lpnLine=(int *)wParam;
        lpxPos=(int *)lParam;
		    // get struct EDITITEM data
		    lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);  // // 得到编辑条目结构指针
        if (lpEditItem==NULL) return;
				if (lpnLine)
					*lpnLine=lpEditItem->nCaretLine+lpEditItem->nDisplayLine;  // 得到光标的行数
				if (lpxPos)
					*lpxPos=lpEditItem->nCaretx+lpEditItem->nDisplayx;  // 得到光标的水平位置
}
// **************************************************
// 声明:static void DoSetCaretPosition(HWND hWnd,WPARAM wParam,LPARAM lParam)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN wParam -- INT ,光标所在的行
// 	IN lParam -- INT ,光标所在的x坐标
// 返回值:无
// 功能描述:设置光标位置,处理EM_SETCARETPOS消息。
// 引用: 
// **************************************************
static void DoSetCaretPosition(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
  int nTextHeight,xCaretPos,xPos,yPos,nCaretLine;
  LPEDITITEM lpEditItem;

        xCaretPos=(int )lParam;
        nCaretLine=(int )wParam;
		    // get struct EDITITEM data
		    lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
        if (lpEditItem==NULL) return;
        nTextHeight=GetTextHeight(hWnd);  // 得到文本高度

        xPos=xCaretPos-lpEditItem->nDisplayx;  // 得到光标的坐标
        yPos=(nCaretLine-lpEditItem->nDisplayLine)*nTextHeight;

        SetPDACaretPosition(hWnd,lpEditItem,xPos,yPos);  // 设置光标的坐标
		AdjustCaretInEditItem(hWnd,lpEditItem); // 调整光标的位置

  		SetPDACaret(hWnd);  // 设置光标
}

// **************************************************
// 声明:static void DoSetxDisplayPos(HWND hWnd,WPARAM wParam,LPARAM lParam)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN wParam -- int ,水平显示位置。
// 	IN lParam -- 保留
// 返回值:无
// 功能描述:设置水平方向的显示位置,处理MIEM_SETXDISPLAYPOS消息。
// 引用: 
// **************************************************
static void DoSetxDisplayPos(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
  LPEDITITEM lpEditItem;
  HDC hdc;
  int xPos,xCaretPos;

        xPos=(int )wParam;
		    // get struct EDITITEM data
		    lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
        if (lpEditItem==NULL) return;
				// get old caret x position
        xCaretPos=lpEditItem->nDisplayx+lpEditItem->nCaretx;
				// set new display position
        lpEditItem->nDisplayx=xPos;
				// set HSCROLL
        SetPDAEditHScrollPos(hWnd,(int)((lpEditItem->nDisplayx)/HSCROLLWIDTH));
        hdc=GetDC(hWnd);
				// redraw the window
        DrawPDAEditSpecialText(hWnd,hdc,lpEditItem,NULL,0,0,0,PE_SHOWCLIENT);
        ReleaseDC(hWnd,hdc);
				// reset the caret position
        lpEditItem->nCaretx=xCaretPos-lpEditItem->nDisplayx;
        SetPDACaret(hWnd);
        lParam++;
}
// **************************************************
// 声明:static void SetPDAEditScrollPage(HWND hWnd)
// 参数:
// 	IN hWnd -- 窗口句柄
// 返回值:无
// 功能描述:设置编辑区滚动条滚动一页的值
// 引用: 
// **************************************************
// delete By Jami chen in 2004.06.12
/*static void SetPDAEditScrollPage(HWND hWnd)
{
   int nPageLine;
   //int nTextHeight;
   //RECT rcClientRect;
   SCROLLINFO ScrollInfo;
   DWORD dwStyle;

			// get window style 
      dwStyle=GetWindowLong(hWnd,GWL_STYLE);
			// get page Lines
      nPageLine=GetPageLine(hWnd);

      ScrollInfo.cbSize=sizeof(SCROLLINFO);
      ScrollInfo.fMask=SIF_PAGE;
      // Set Vertical Scroll Page
      if (dwStyle&WS_VSCROLL)
      { // set vertical scroll page
        ScrollInfo.nPage =nPageLine;
        SetScrollInfo(hWnd,SB_VERT,&ScrollInfo,TRUE);
      }

      // Set horizonta Scroll Page
      if (dwStyle&WS_HSCROLL)
      { // set horizon scroll page
          ScrollInfo.nPage =1;
          SetScrollInfo(hWnd,SB_HORZ,&ScrollInfo,TRUE);
      }
}
*/
// delete End By Jami chen in 2004.06.12
// **************************************************
// 声明:static void SetPDAEditVScrollPos(HWND hWnd,int nNewScrollPos)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN nNewScrollPos -- 滚动条当前的新位置。
// 返回值:无
// 功能描述:设置编辑区垂直滚动条的当前位置
// 引用: 
// **************************************************
static void SetPDAEditVScrollPos(HWND hWnd,int nNewScrollPos)
{
  DWORD dwStyle;

      dwStyle=GetWindowLong(hWnd,GWL_STYLE);  // 得到窗口风格
      if (!(dwStyle&WS_VSCROLL)) return;
      Edit_SetScrollPos(hWnd,SB_VERT,nNewScrollPos,TRUE); // 设置滚动条的位置
}

// **************************************************
// 声明:static void SetPDAEditHScrollPos(HWND hWnd,int nNewScrollPos)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN nNewScrollPos -- 滚动条当前的新位置。
// 返回值:
// 功能描述:设置编辑区水平滚动条的当前位置
// 引用: 
// **************************************************
static void SetPDAEditHScrollPos(HWND hWnd,int nNewScrollPos)
{
  DWORD dwStyle;

      dwStyle=GetWindowLong(hWnd,GWL_STYLE); // 得到窗口风格
      if (!(dwStyle&WS_HSCROLL)) return; // 不能滚动
      Edit_SetScrollPos(hWnd,SB_HORZ,nNewScrollPos,TRUE); // 设置滚动条的位置
}

// **************************************************
// 声明:static int DoVScrollWindow(HWND hWnd,WPARAM wParam,LPARAM lParam)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN wParam -- LOWORD,滚动类型
// 	IN lParam -- 保留
// 返回值:成功返回滚动的行数,否则返回0
// 功能描述:垂直滚动屏幕,处理WM_VSCROLL消息。
// 引用: 
// **************************************************
static int DoVScrollWindow(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
    int nScrollLine,nWindowLine;
//    RECT rcClientRect;
    int yPos;
        
			nWindowLine=GetPageLine(hWnd);
      yPos=Edit_GetScrollPos(hWnd,SB_VERT);
      switch(LOWORD(wParam))
        {
        case SB_PAGEUP:  // page up
          nScrollLine=0-nWindowLine;
          break;
        case SB_PAGEDOWN:  //page down
          nScrollLine=nWindowLine;
          break;
        case SB_LINEUP:  // line up
          nScrollLine=-1;
          break;
        case SB_LINEDOWN:  // line down
          nScrollLine=1;
          break;
        case SB_THUMBTRACK: // drag thumb track
          nScrollLine=HIWORD(wParam)-yPos;
          break;
        default:
          nScrollLine=0;
          return 0;
        }
				// vertical scroll window
        lParam++;
        return VScrollWindowInPDAEdit(hWnd,nScrollLine);  // 滚动窗口
}
// **************************************************
// 声明:static void DoHScrollWindow(HWND hWnd,WPARAM wParam,LPARAM lParam)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN wParam -- LOWORD,滚动类型
// 	IN lParam -- 保留
// 返回值:无
// 功能描述:水平滚动屏幕,处理WM_HSCROLL消息。
// 引用: 
// **************************************************
static void DoHScrollWindow(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
    int nHScrollPos,xWindowWidth;
//    RECT rcClientRect;
    int xPos;
        
	LPEDITITEM lpEditItem;
		// get struct PADEDITSTATE data
		lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
		if (lpEditItem==NULL) return;
		// get window width
		xWindowWidth=GetWindowWidth(hWnd,lpEditItem);
		xWindowWidth=(xWindowWidth/HSCROLLWIDTH)*HSCROLLWIDTH;
			// get current x position
      xPos=Edit_GetScrollPos(hWnd,SB_HORZ);
      switch(LOWORD(wParam))
        {
        case SB_PAGEUP: // page left
          nHScrollPos=0-xWindowWidth;
          break;
        case SB_PAGEDOWN: // page right
          nHScrollPos=xWindowWidth;
          break;
        case SB_LINEUP: // move a sect left
          nHScrollPos=0-HSCROLLWIDTH;
          break;
        case SB_LINEDOWN:  // a sect right
          nHScrollPos=HSCROLLWIDTH;
          break;
        case SB_THUMBTRACK:  //drag thumb track
          nHScrollPos=(HIWORD(wParam)-xPos)*HSCROLLWIDTH;
          break;
        default:
          return;

        }
				// horizon scroll window
        lParam++;
        HScrollWindowInPDAEdit(hWnd,nHScrollPos); // 水平滚动窗口
}
// **************************************************
// 声明:static int GetPageLine(HWND hWnd)
// 参数:
// 	IN hWnd -- 窗口句柄
// 返回值:返回一页的行数
// 功能描述:得到编辑去一页的行数。
// 引用: 
// **************************************************
// delete By Jami chen in 2004.06.12
/*static int GetPageLine(HWND hWnd)
{
  int nTextHeight,nPageLine;
  RECT rcClientRect;
		// get line height
    nTextHeight=GetTextHeight(hWnd);
		// get client rect
    GetClientRect(hWnd,&rcClientRect);
		// get page lines
    nPageLine=rcClientRect.bottom/nTextHeight;
    return nPageLine;
}
*/
// **************************************************
// 声明:static void ScrollCaretInPDAEdit(HWND hWnd,int nScrollLine)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN nScrillLine -- 滚动的行数
// 返回值:无
// 功能描述:垂直滚动光标。
// 引用: 
// **************************************************
// delete By Jami chen in 2004.06.12
/*static void ScrollCaretInPDAEdit(HWND hWnd,int nScrollLine)
{
	LPEDITITEM lpEditItem;
//	int nClientLine;
	//RECT ClientRect;
	int nPointCoordinate,nLine,nCaretPosition;
	LPTSTR lpLineAddress;
//	int nTextHeight;

			// get line height
//	  	nTextHeight=GetTextHeight(hWnd);


		// get struct PADEDITSTATE data
	   lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
     if (lpEditItem==NULL) return;
	   // calculate client lines
     if (nScrollLine<0)
     {  // scroll to up
				if (lpEditItem->nCaretLine==0&&lpEditItem->nDisplayLine==0) // alread to the top of the edit control
					return;
     }
     if(nScrollLine>0)
     { // scroll down
				if (lpEditItem->nCaretLine+lpEditItem->nDisplayLine>=(lpEditItem->nTotalLine-1))
					return; // alread  to the bottom of the edit control
     }
		 // set caret to new line
		lpEditItem->nCaretLine+=nScrollLine;
		// Get caret line from the text
		nLine=lpEditItem->nCaretLine+lpEditItem->nDisplayLine;
		// get address of caret line
		lpLineAddress=GetLineAddress(hWnd,lpEditItem,nLine);
		// get caret xPosition from text
		nPointCoordinate=lpEditItem->nCaretx+lpEditItem->nDisplayx;
		// get caret position
		lpEditItem->lpCaretPosition=GetLinePosition(hWnd,lpEditItem,lpLineAddress,nPointCoordinate,TRUE,&nCaretPosition);
		if (lpEditItem->lpCaretPosition<lpEditItem->lpPDAEditBuffer)
		{ // the caret position on title
			SetCaretToStart(hWnd,lpEditItem);
		}
		else
		{
			// Get caret x-coordinate form window origin
			lpEditItem->nCaretx=nCaretPosition-lpEditItem->nDisplayx;
		}
		// adjust caret coordinate
		if (AdjustCaretInEditItem(hWnd,lpEditItem)==TRUE)
		{
			// clear invert and not redraw
			ClearInvert(hWnd,lpEditItem,FALSE);
			// redraw the windwo
//			DrawPDAEditControl(hWnd);
				InvalidateRect(hWnd,NULL,TRUE);
		}
		else
		{// clear invert and redraw
			ClearInvert(hWnd,lpEditItem,TRUE);
		}
		// reset caret
		SetPDACaret(hWnd);
}
*/
// delete End By Jami chen in 2004.06.12

// **************************************************
// 声明:static int VScrollWindowInPDAEdit(HWND hWnd,int nScrollLine)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN nScrillLine -- 滚动的行数
// 返回值:无
// 功能描述:垂直滚动窗口。
// 引用: 
// **************************************************
static int VScrollWindowInPDAEdit(HWND hWnd,int nScrollLine)
{
	LPEDITITEM lpEditItem;
	int nClientLine;
//	RECT ClientRect;
	int nCaretLine,nOldDisplayLine;
//	LPTSTR lpLineAddress;

		// get struct PADEDITSTATE data
	   lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
     if (lpEditItem==NULL) return 0;
	   // calculate client lines
	   nClientLine=GetPageLine(hWnd);
     if (nScrollLine<0)
     {  // up ?
				if (lpEditItem->nDisplayLine==0)
					return 0;
     }
     if(nScrollLine>0)
     { // down ?
				if (lpEditItem->nDisplayLine+nClientLine>lpEditItem->nTotalLine)
					return 0;
     }
		 // get old caret position
		nCaretLine=lpEditItem->nCaretLine+lpEditItem->nDisplayLine;

⌨️ 快捷键说明

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