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

📄 edit.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
📖 第 1 页 / 共 5 页
字号:
		// get old display position
		nOldDisplayLine=lpEditItem->nDisplayLine;
		// set new display position
		lpEditItem->nDisplayLine+=nScrollLine;
		// is up to the top ?
    if (lpEditItem->nDisplayLine<0)
      lpEditItem->nDisplayLine=0;
		// is down to the bottom ?
    if (lpEditItem->nDisplayLine+nClientLine>lpEditItem->nTotalLine)
      lpEditItem->nDisplayLine=lpEditItem->nTotalLine-nClientLine;
		// set new caret position
    lpEditItem->nCaretLine=nCaretLine-lpEditItem->nDisplayLine;
		// set vertical scroll position
    SetPDAEditVScrollPos(hWnd,lpEditItem->nDisplayLine);
		// Get caret line from the text
//		ClearInvert(hWnd,lpEditItem,TRUE);
		// reset caret
		SetPDACaret(hWnd);
//    DrawPDAEditControl(hWnd);
		InvalidateRect(hWnd,NULL,TRUE);
		// return the lines to be scroll
		return (int)(lpEditItem->nDisplayLine-nOldDisplayLine);
}
// **************************************************
// 声明:static void HScrollWindowInPDAEdit(HWND hWnd,int nHScrollPos)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN nScrillLine -- 水平滚动的点数
// 返回值:无
// 功能描述:水平滚动窗口。
// 引用: 
// **************************************************
static void HScrollWindowInPDAEdit(HWND hWnd,int nHScrollPos)
{
	LPEDITITEM lpEditItem;
	int nCaretPos;

		// get struct PADEDITSTATE data
	   lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
     if (lpEditItem==NULL) return;
	   // calculate client lines
     if (nHScrollPos<0)
     {  // to the left
				if (lpEditItem->nDisplayx==0)
          return;
     }
		 // get old caret position
		nCaretPos=lpEditItem->nCaretx+lpEditItem->nDisplayx;
		// set new display position
		lpEditItem->nDisplayx+=nHScrollPos;
     if (lpEditItem->nDisplayx<0)
     {  // tom the left?
				lpEditItem->nDisplayx=0;
     }
		 // set new caret position
    lpEditItem->nCaretx=nCaretPos-lpEditItem->nDisplayx;
		// set herizon scroll position
    SetPDAEditHScrollPos(hWnd,(int)((lpEditItem->nDisplayx)/HSCROLLWIDTH));
		// Get caret line from the text
		//ClearInvert(hWnd,lpEditItem,TRUE);
		// reset caret
		SetPDACaret(hWnd);
		// redraw the window
//    DrawPDAEditControl(hWnd);
		InvalidateRect(hWnd,NULL,TRUE);
}

// **************************************************
// 声明:static void FillPassWordChar(LPTSTR lpEditBuffer,int nFillLength,TCHAR chPassWordWord)
// 参数:
// 	IN lpEditBuffer  -- 要填充的缓存
// 	IN nFillLength -- 要填充的长度
// 	IN chPassWordWord -- 要用来填充的密码字符
// 返回值:无
// 功能描述:将缓存填充为密码字符。
// 引用: 
// **************************************************
// delete By Jami chen in 2004.06.12
/*static void FillPassWordChar(LPTSTR lpEditBuffer,int nFillLength,TCHAR chPassWordWord)
{
	// fill the buffer
  memset(lpEditBuffer,chPassWordWord,nFillLength);
	// fill end code
  lpEditBuffer[nFillLength]=0;
}
*/
// **************************************************
// 声明:static void ReleasePDAEdit(HWND hWnd)
// 参数:
// 	IN hWnd --窗口句柄
// 返回值:无
// 功能描述: 释放编辑区,处理WM_DESTROY消息。
// 引用: 
// **************************************************
static void ReleasePDAEdit(HWND hWnd)
{
    LPEDITITEM lpEditItem;

			lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
      if(lpEditItem==NULL) return ;

	    DeletePDACaret(hWnd); // 删除光标
//	    SendNotificationMsg(hWnd,EN_KILLFOCUS);

			if (lpEditItem->lpPDASaveEditBuffer)
				free(lpEditItem->lpPDASaveEditBuffer);  // 释放备份缓存
			if (lpEditItem->lpPDAControlBuffer)
				free(lpEditItem->lpPDAControlBuffer);  // 释放控制缓存
			if (lpEditItem->lpFormat)
				free(lpEditItem->lpFormat);  // 释放格式化串
			free(lpEditItem); // 释放条目结构
			SetWindowLong(hWnd,0,0);

}

// **************************************************
// 声明:static LRESULT DoCharFromPos(HWND hWnd,WPARAM wParam,LPARAM lParam)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN wParam -- MAKWWPARAM(X,Y),指定的坐标位置
// 	IN lParam -- 保留
// 返回值:低WORD返回指定坐标所在的字符索引位置,高WORD返回该字符所在的行。
// 功能描述:得到指定点的字符,处理EM_CHARFROMPOS消息。
// 引用: 
// **************************************************
static LRESULT DoCharFromPos(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
    int xPos,yPos;
    LPEDITITEM lpEditItem;

      xPos=LOWORD(lParam);
      yPos=HIWORD(lParam);

	    // Get struct EDITITEM data
	  lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
      if(lpEditItem==NULL) return 0;
      return GetCharFromPos(hWnd,lpEditItem,xPos,yPos); // 得到位置的字符
}

// **************************************************
// 声明:static LRESULT DoGetFirstVisibleLine(HWND hWnd)
// 参数:
// 	IN hWnd -- 窗口句柄
// 返回值:如果是多行编辑区,则返回第一个可见行的行索引,如果
// 		是单行编辑区,则返回第一个可见字符的索引。
// 功能描述:得到第一个可见行,处理EM_GETFIRSTVISIBLELINE消息。
// 引用: 
// **************************************************
static LRESULT DoGetFirstVisibleLine(HWND hWnd)
{
    LPEDITITEM lpEditItem;
  	DWORD dwStyle;
    LPTSTR lpPosition;

		  // Get struct EDITITEM data
		  lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
      if(lpEditItem==NULL) return 0;

      // Get Edit Control Style
		  dwStyle=GetWindowLong(hWnd,GWL_STYLE);
      if (dwStyle&ES_MULTILINE)
        return lpEditItem->nDisplayLine;
	  lpPosition=GetLinePosition(hWnd,lpEditItem,lpEditItem->lpPDAControlBuffer,0,FALSE,NULL);// 得到第一个可见字符
      return (lpPosition-lpEditItem->lpPDAControlBuffer);
}
// **************************************************
// 声明:static LRESULT DoGetLimitText(HWND hWnd,WPARAM wParam,LPARAM lParam)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN wParam -- 保留
// 	IN lParam -- 保留
// 返回值:返回当前编辑区的文本限制数
// 功能描述:得到当前编辑区的文本限制。
// 引用: 
// **************************************************
static LRESULT DoGetLimitText(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
    LPEDITITEM lpEditItem;

	  // Get struct EDITITEM data
	  lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
    if(lpEditItem==NULL) return 0;
    wParam++;
    lParam++;
	  return lpEditItem->cbEditLimitLen;  // 返回文本限制
}

// **************************************************
// 声明:static LRESULT DoGetLine(HWND hWnd,WPARAM wParam,LPARAM lParam)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN wParam -- INT 指定行索引
// 	IN lParam -- LPSTR 存放指定行内容的缓存,缓存中的第一个WORD是缓存的大小。
// 返回值:成功返回COPY字符的个数,否则返回0
// 功能描述:得到指定行的数据,处理EM_GETLINE消息。
// 引用: 
// **************************************************
static LRESULT DoGetLine(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
    LPEDITITEM lpEditItem;
	int nLine,nLineLen,nBufferMaxLen;
	LPSTR lpch;
	LPSTR lpLineAddress;

	  // Get struct EDITITEM data
	  lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
    if(lpEditItem==NULL) return 0;

	  nLine=(int)wParam;

#ifdef _MAPPOINTER
	lParam = (LPARAM)MapPtrToProcess( (LPVOID)lParam, GetCallerProcess() );   // 映射指针
#endif

	  lpch=(LPSTR)lParam;

		lpLineAddress=GetLineAddress(hWnd,lpEditItem,nLine);  //得到指定行的地址
		nLineLen=GetLineLength(hWnd,lpEditItem,(LPCTSTR)lpLineAddress,NULL); // 得到指定行的长度
		nBufferMaxLen=MAKEWORD(*lpch,*(lpch+1)); // 得到缓存的大小
		if (nLineLen>=nBufferMaxLen)
			return 0; // 缓存太小
		memcpy((void *)lpch,(const void *)lpLineAddress,nLineLen); // 复制指定行数据
		lpch[nLineLen]=0; // 设置结尾符
		return nLineLen;
}
// **************************************************
// 声明:static LRESULT DoGetThumb(HWND hWnd,WPARAM wParam,LPARAM lParam)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN wParam -- 保留
// 	IN lParam -- 保留
// 返回值:返回垂直滚动条滚动块的位置
// 功能描述:得到垂直滚动条滚动块的位置,处理EM_GETTHUMB消息。
// 引用: 
// **************************************************
static LRESULT DoGetThumb(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
  DWORD dwStyle;

		dwStyle=GetWindowLong(hWnd,GWL_STYLE);
		if (!(dwStyle&WS_VSCROLL)) return 0;
    wParam++;
    lParam++;
		return Edit_GetScrollPos(hWnd,SB_VERT); // 得到滚动条滑块的位置
}
// **************************************************
// 声明:static LRESULT DoGetLineCount(HWND hWnd,WPARAM wParam,LPARAM lParam)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN wParam -- 保留
// 	IN lParam -- 保留
// 返回值:返回编辑区的总行数
// 功能描述:得到编辑区的总行数,处理EM_GETLINECOUNT消息。
// 引用: 
// **************************************************
static LRESULT DoGetLineCount(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
   LPEDITITEM lpEditItem;

	  // Get struct EDITITEM data
	  lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
	  if(lpEditItem==NULL) return 0;
      wParam++;
      lParam++;
	  return lpEditItem->nTotalLine; // 得到编辑区的总行数
}
// **************************************************
// 声明:static LRESULT DoGetModify(HWND hWnd,WPARAM wParam,LPARAM lParam)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN wParam -- 保留
// 	IN lParam -- 保留
// 返回值:返回当前编辑区的修改标志。
// 功能描述:得到当前编辑区的修改标志,处理EM_GETMODIFY消息。
// 引用: 
// **************************************************
static LRESULT DoGetModify(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
   LPEDITITEM lpEditItem;

	  // Get struct EDITITEM data
	  lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
    if(lpEditItem==NULL) return FALSE;

    wParam++;
    lParam++;
		return lpEditItem->fModified; // 得到编辑区的修改标志
}
// **************************************************
// 声明:static LRESULT DoGetPasswordChar(HWND hWnd,WPARAM wParam,LPARAM lParam)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN wParam -- 保留
// 	IN lParam -- 保留
// 返回值:返回当前编辑区的密码字符
// 功能描述:得到当前编辑区的密码字符,处理EM_GETPASSWORDCHAR消息。
// 引用: 
// **************************************************
static LRESULT DoGetPasswordChar(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
   LPEDITITEM lpEditItem;
	 DWORD dwStyle;

	  // Get struct EDITITEM data
	  lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
    if(lpEditItem==NULL) return 0;

		dwStyle=GetWindowLong(hWnd,GWL_STYLE);
    wParam++;
    lParam++;
		if (dwStyle&ES_PASSWORD)
				return lpEditItem->chPassWordWord; // 得到编辑区的密码字符
		else
				return 0;
}
// **************************************************
// 声明:static LRESULT DoGetSel(HWND hWnd, WPARAM wParam, LPARAM lParam)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN wParam -- LPDWORD , 存放选择区域的起始位置字符索引
// 	IN lParam -- LPDOWRD , 存放选择区域的结束位置字符索引
// 返回值:成功返回MAKERESULT(START,END),否则返回0。
// 功能描述:得到编辑区的选择区域,处理EM_GETSEL消息。
// 引用: 
// **************************************************
static LRESULT DoGetSel(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
   LPEDITITEM lpEditItem;
	 int nStart , nEnd;
	 LPDWORD lpdwStart,lpdwEnd;
	 LRESULT lResult;

	  // Get struct EDITITEM data
	  lpEditItem=(LPEDITITEM)GetWindowLong(hWnd,0);
    if(lpEditItem==NULL) return 0;

#ifdef _MAPPOINTER
	wParam = (WPARAM)MapPtrToProcess( (LPVOID)wParam, GetCallerProcess() );   // 映射指针
	lParam = (LPARAM)MapPtrToProcess( (LPVOID)lParam, GetCallerProcess() ); 
#endif
		lpdwStart=(LPDWORD)wParam;
		lpdwEnd=(LPDWORD)lParam;
		if (lpEditItem->lpInvertStart==lpEditItem->lpInvertEnd)
		{
// !!! Modified By Jami chen on 2003.09.12
//			return -1;
			nStart=0;
			nEnd=0;
// !!! Modified End By Jami chen on 2003.09.12
		}
		else
		{
			nStart=lpEditItem->lpInvertStart-lpEditItem->lpPDAEditBuffer;  // 得到选择开始位置
			nEnd=lpEditItem->lpInvertEnd-lpEditItem->lpPDAEditBuffer; // 得到选择结束位置
		}
		if (lpdwStart)
			*lpdwStart=(DWORD)nStart; // 赋开始位置
		if (lpdwEnd)
			*lpdwEnd=(DWORD)nEnd; // 赋结束位置
// !!! Modified By Jami chen on 2003.09.12
		if (nEnd > 0xffff || nStart > 0xffff)
			lResult = -1;
		else
			lResult=MAKELRESULT(nStart,nEnd); // 得到返回值
// !!! Modified End By Jami chen on 2003.09.12
		return lResult;
}

// **************************************************
// 声明:static LRESULT DoSetLimitText(HWND hWnd,WPARAM wParam,LPARAM lParam)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN wParam -- 保留
// 	IN lParam -- 保留
// 返回值:成功返回TRUE,否则返回FALSE。
// 功能描述:设置编辑区的文本限制,处理EM_SETLIMITTEXT消息。
// 引用: 
// **************************************************
st

⌨️ 快捷键说明

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