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

📄 multiple.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
📖 第 1 页 / 共 5 页
字号:
    nPageLine=GetPageLine(hWnd); 
    nCaretLine=lpMultiItemEditStruct->nItemStartLineList[lpMultiItemEditStruct->iActiveItem]+lpActiveEditItem->nCaretLine; // 得到光标的位置
    if (nCaretLine<0) nCaretLine=0;   // 需要调整到开头
    if (nCaretLine>=lpMultiItemEditStruct->nItemStartLineList[lpMultiItemEditStruct->nItemNum])
    { // 需要调整到结尾
      nCaretLine=lpMultiItemEditStruct->nItemStartLineList[lpMultiItemEditStruct->nItemNum]-1;
      bResult=TRUE;
    }

    if (nCaretLine<lpMultiItemEditStruct->nDisplayLine)
    { // 需要向下滚动窗口
      nScrollLine=nCaretLine-lpMultiItemEditStruct->nDisplayLine;
//      lpMultiItemEditStruct->nDisplayLine=nCaretLine;
      VScrollMultiItemEdit(hWnd,nScrollLine); // 滚动窗口
      bResult=TRUE;
    }
    if (nCaretLine>=lpMultiItemEditStruct->nDisplayLine+nPageLine)
    { // 需要向上滚动窗口
      nScrollLine=nCaretLine-(lpMultiItemEditStruct->nDisplayLine+nPageLine)+1;
//      lpMultiItemEditStruct->nDisplayLine=nCaretLine-nPageLine+1;
      VScrollMultiItemEdit(hWnd,nScrollLine); // 滚动窗口
      bResult=TRUE;
    }
    return bResult;
}
/**************************************************
声明:static void SetMIEditVScrollRange(HWND hWnd,int nTotalLine,int nWindowLine)
参数:
	IN hWnd -- 窗口句柄
	IN nTotalLine -- 控件总行数
	IN nWindowLine -- 控件窗口的行数
返回值:无
功能描述:设置垂直滚动条的范围。
引用: 
************************************************/
static void SetMIEditVScrollRange(HWND hWnd,int nTotalLine,int nWindowLine)
{
  int nMinPos,nMaxPos;
  DWORD dwStyle;

      dwStyle=GetWindowLong(hWnd,GWL_STYLE);  // 得到窗口风格
//      if (!(dwStyle&WS_VSCROLL)) return;
	  if (nWindowLine==0)
		  nWindowLine=1;
      if (nTotalLine<=nWindowLine)
      {
// !!! Add By Jami chen in 2004.08.21
		  LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
		  int nScrollLine;

		  lpMultiItemEditStruct=(LPMULTIITEMEDITSTRUCT)GetWindowLong(hWnd,0);
		  if (lpMultiItemEditStruct==NULL) return;
		  // 如果要删除滚动条,则要从0 开始显示
		  nScrollLine=0-lpMultiItemEditStruct->nDisplayLine;
	//      lpMultiItemEditStruct->nDisplayLine=nCaretLine;
		  VScrollMultiItemEdit(hWnd,nScrollLine); // 滚动窗口
//		  lpMultiItemEditStruct->nDisplayLine = 0;
// !!! Add End By Jami chen in 2004.08.21
			if ((dwStyle&WS_VSCROLL))
			{  // 删除滚动条
				ShowScrollBar(hWnd,SB_VERT,FALSE);
				DoSize(hWnd,0,0);  // 调整窗口大小
//						SetHScrollBar(hWnd);
			}
//        EnableScrollBar(hWnd,SB_VERT,ESB_DISABLE_BOTH);
      }
      else
      {
        nMinPos=0;
        nMaxPos=nTotalLine-1;//-nWindowLine+1;
		if ((dwStyle&WS_VSCROLL)==0)
		{ // 需要显示窗口
			ShowScrollBar(hWnd,SB_VERT,TRUE);
			DoSize(hWnd,0,0); // 调整窗口大小
	        Edit_SetScrollRange(hWnd,SB_VERT,nMinPos,nMaxPos,TRUE); // 设置滚动范围
			SetMIEditScrollPage(hWnd);  // 设置滚动页
		}
		else
			Edit_SetScrollRange(hWnd,SB_VERT,nMinPos,nMaxPos,TRUE);
        EnableScrollBar(hWnd,SB_VERT,ESB_ENABLE_BOTH);  // 滚动条ENABLE
      }
}
/**************************************************
声明:static void SetMIEditScrollPage(HWND hWnd)
参数:
	IN hWnd -- 窗口句柄
返回值:无
功能描述:设置水平滚动条的范围。
引用: 
************************************************/
static void SetMIEditScrollPage(HWND hWnd)
{
   int nPageLine;
//   int nTextHeight;
   //RECT rcClientRect;
   SCROLLINFO ScrollInfo;
   DWORD dwStyle;
      
      dwStyle=GetWindowLong(hWnd,GWL_STYLE);  // 得到窗口风格

      nPageLine=GetPageLine(hWnd);  // 得到页的行数

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

      // Set horizonta Scroll Page
      if (dwStyle&WS_HSCROLL)
      {
          ScrollInfo.nPage =1;
          SetScrollInfo(hWnd,SB_HORZ,&ScrollInfo,TRUE);
      }
}
/**************************************************
声明:static void SetMIEditVScrollPos(HWND hWnd,int nNewScrollPos)
参数:
	IN hWnd -- 窗口句柄
	IN nNewScrollPos -- 新的滚动条的位置
返回值:无
功能描述:设置垂直滚动条的位置。
引用: 
************************************************/
static void SetMIEditVScrollPos(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 SetMIEditHScrollPos(HWND hWnd,int nNewScrollPos)
参数:
	IN hWnd -- 窗口句柄
	IN nNewScrollPos -- 新的滚动条的位置
返回值:无
功能描述:设置水平滚动条的位置。
引用: 
************************************************/
static void SetMIEditHScrollPos(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 nTextHeight,yPos;
        
      GetClientRect(hWnd,&rcClientRect);  // 得到客户矩形
      nTextHeight=GetTextHeight(hWnd);  // 得到文本高度
      nWindowLine=rcClientRect.bottom/nTextHeight;
      yPos=Edit_GetScrollPos(hWnd,SB_VERT); // 得到滑块位置
      switch(LOWORD(wParam))
        {
        case SB_PAGEUP: // 上翻页
          nScrollLine=0-nWindowLine;  
          break;
        case SB_PAGEDOWN:  // 下翻页
          nScrollLine=nWindowLine;
          break;
        case SB_LINEUP:  // 上滚行
          nScrollLine=-1;
          break;
        case SB_LINEDOWN:  // 下滚行
          nScrollLine=1;
          break;
        case SB_THUMBTRACK:  // 滑块移动
          nScrollLine=HIWORD(wParam)-yPos;
          break;
        default:
          nScrollLine=0;
          return 0;
        }
        return VScrollMultiItemEdit(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 xScrollPos,xWindowWidth;
    RECT rcClientRect;
    int xPos;
        
      GetClientRect(hWnd,&rcClientRect);  // 得到客户矩形
      xWindowWidth=(rcClientRect.right/HSCROLLWIDTH)*HSCROLLWIDTH;
      xPos=Edit_GetScrollPos(hWnd,SB_HORZ); // 得到滑块位置
      switch(LOWORD(wParam))
        {
        case SB_PAGEUP:  // 上翻页
          xScrollPos=0-xWindowWidth;
          break;
        case SB_PAGEDOWN:  // 下翻页
          xScrollPos=xWindowWidth;
          break;
        case SB_LINEUP:  // 上滚行
          xScrollPos=0-HSCROLLWIDTH;
          break;
        case SB_LINEDOWN:  // 下滚行
          xScrollPos=HSCROLLWIDTH;
          break;
        case SB_THUMBTRACK:  // 移动滑块
          xScrollPos=(HIWORD(wParam)-xPos)*HSCROLLWIDTH;
//          Print(100,10,xScrollPos);
          break;
        default:
          return;

        }
 
      HScrollMultiItemEdit(hWnd,xScrollPos); // 水平滚动窗口
}

/**************************************************
声明: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;
    nTextHeight=GetTextHeight(hWnd);  // 得到文本高度
    GetClientRect(hWnd,&rcClientRect); // 得到窗口客户矩形
    nPageLine=rcClientRect.bottom/nTextHeight; // 得到页行数
	if (nPageLine==0)
		nPageLine=1; // 最少可显示一行
    return nPageLine;
}
*/
/*
static void DoDisplayChanged(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
  int nDisplayx,nCaretLine;
  LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
  int i;
  HWND hActiveWnd;
  int iActiveItem;

      lpMultiItemEditStruct=(LPMULTIITEMEDITSTRUCT)GetWindowLong(hWnd,0);
      if (lpMultiItemEditStruct==NULL) return;

      hActiveWnd=(HWND)wParam;
      nDisplayx=LOWORD(lParam);
      nCaretLine=HIWORD(lParam);
      if (lpMultiItemEditStruct->xDisplayPos!=nDisplayx)
      {
          lpMultiItemEditStruct->xDisplayPos=nDisplayx;

          for (i=0;i<lpMultiItemEditStruct->nItemNum;i++)
          {

//            PostMessage(lpMultiItemEditStruct->hItemWndList[i],MIEM_SETXDISPLAYPOS,lpMultiItemEditStruct->xDisplayPos,0);
          }
          SetMIEditHScrollPos(hWnd,(int)((lpMultiItemEditStruct->xDisplayPos)/HSCROLLWIDTH));
      }
// !!      iActiveItem=GetItemSequence(hWnd,hActiveWnd);
      nCaretLine+=lpMultiItemEditStruct->nItemStartLineList[iActiveItem];
      AdjustCaretPosition(hWnd);
}
*/
/**************************************************
声明:void SetCaretToNextItem(HWND hWnd,LPEDITITEM lpEditItem)
参数:
	IN hWnd -- 窗口句柄
	IN lpEditItem -- 当前的编辑条目结构指针
返回值:无
功能描述:设置光标到下一个条目。
引用: 
************************************************/
void SetCaretToNextItem(HWND hWnd,LPEDITITEM lpEditItem)
{
  LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
  LPEDITITEM lpNewEditItem;
  int iActiveItem;

    lpMultiItemEditStruct=(LPMULTIITEMEDITSTRUCT)GetWindowLong(hWnd,0); // 得到编辑窗口数据
    if (lpMultiItemEditStruct==NULL) return;
    iActiveItem=GetItemSequence(hWnd,lpEditItem);  // 得到条目索引
    iActiveItem++; // 得到下一个条目索引
    if (iActiveItem>=lpMultiItemEditStruct->nItemNum)
      return;
    ClearInvert(hWnd,lpEditItem,TRUE);
    lpMultiItemEditStruct->iActiveItem=iActiveItem;  // 激活条目
    lpNewEditItem=&lpMultiItemEditStruct->lpItemList[iActiveItem];
		SetPDACaretPosition(hWnd,lpNewEditItem,0,0);  // 设置光标到条目开始
    if (AdjustCaretPosition(hWnd)==TRUE);  // 调整光标位置
//		{
				// Redraw the window
//				DrawPDAEditControl(hWnd,hdc);
//				InvalidateRect(hWnd,NULL,TRUE);
//		}

		// set caret position
		SetPDACaret(hWnd);  // 设置光标

    // show caret
    ShowPDACaret(hWnd);  // 显示光标
	SendNotificationMsg(hWnd,EN_ACTIVEITEMCHANGE); // 通知父窗口
//    PostMessage(lpMultiItemEditStruct->hItemWndList[iActiveItem],EM_SETCARETPOS,0,0);

⌨️ 快捷键说明

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