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

📄 multiple.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
📖 第 1 页 / 共 5 页
字号:


		default:
			// default procedure
			return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}
/**************************************************
声明:static LRESULT InitialPDAEdit(HWND hWnd,LPARAM lParam)
参数:
	IN hWnd -- 窗口句柄
	IN lParam -- 指向CREATESTRUCT的指针,可以为NULL。
返回值:成功返回0,否则返回-1。
功能描述:创建多条目编辑控件
引用: 
************************************************/
static LRESULT InitialMultiItemEdit(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
//	PDAEDITPROPERTY PDAEditProperty;
  RECT ClientRect;
  int iNextWndPos=0,nTextHeigth;
  LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
  int nClientLine;
	LPCREATESTRUCT lpcs;
  LPMULTIITEMEDITPROPERTY lpMultiItemEditProperty;
  LPEDITITEMPROPERTY lpEditItemProperty;
  int i;
  LPEDITITEM lpEditItem;
 // int nFormatLen;
  DWORD dwStyle;

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

	  lpcs = (LPCREATESTRUCT) lParam; // structure with creation data
	  lpMultiItemEditProperty=(LPMULTIITEMEDITPROPERTY)lpcs->lpCreateParams; // 得到创建结构指针

// !!! Add By Jami chen in 2003.07.31
#ifdef _MAPPOINTER
	  if (lpMultiItemEditProperty)
			lpEditItemProperty = (LPEDITITEMPROPERTY)MapPtrToProcess( (LPVOID)lpMultiItemEditProperty->lpEditItemProperty, GetCallerProcess() ); 
#else
	  if (lpMultiItemEditProperty)
			lpEditItemProperty = lpMultiItemEditProperty->lpEditItemProperty;
#endif
// !!! Add End By Jami chen in 2003.07.31

      lpMultiItemEditStruct=malloc(sizeof(MULTIITEMEDITSTRUCT));  // 分配空间
      dwStyle=GetWindowLong(hWnd,GWL_STYLE);
      dwStyle|=ES_MULTIITEMEDIT|ES_LINESEPARATE;
      SetWindowLong(hWnd,GWL_STYLE,dwStyle);
      if (lpMultiItemEditStruct==NULL)
			{ // 分配失败
				//SendNotificationMsg(hWnd,EN_ERRSPACE);
				return -1;
			}
      if (lpMultiItemEditProperty==NULL)
      { // 没有初始化条目
        lpMultiItemEditStruct->nItemNum=0;
      }
      else
      { // 设定初始化条目个数
        lpMultiItemEditStruct->nItemNum=lpMultiItemEditProperty->nItemNum;
      }
/*
      lpMultiItemEditStruct->hItemWndList=malloc((lpMultiItemEditProperty->nItemNum)*sizeof(HWND));
      if (lpMultiItemEditStruct->hItemWndList==NULL)
      {
        free(lpMultiItemEditStruct);
				SendNotificationMsg(hWnd,EN_ERRSPACE);
        return -1;
      }
*/
      if (lpMultiItemEditStruct->nItemNum)
      {
        lpMultiItemEditStruct->lpItemList=malloc((lpMultiItemEditStruct->nItemNum)*sizeof(EDITITEM)); // 分配条目内存
        if (lpMultiItemEditStruct->lpItemList==NULL)
        {
          free(lpMultiItemEditStruct);
				  //SendNotificationMsg(hWnd,EN_ERRSPACE);
          return -1;
        }
      }
      else
        lpMultiItemEditStruct->lpItemList=NULL;
      lpMultiItemEditStruct->nDisplayLine=0;
      lpMultiItemEditStruct->xDisplayPos=0;
      lpMultiItemEditStruct->nItemStartLineList=malloc((lpMultiItemEditStruct->nItemNum+1)*sizeof(int)); // 分配条目开始位置列表
      if (lpMultiItemEditStruct->nItemStartLineList==NULL)
      {
        free(lpMultiItemEditStruct->lpItemList);
        free(lpMultiItemEditStruct);
				//SendNotificationMsg(hWnd,EN_ERRSPACE);
        return -1;
      }
//      lpMultiItemEditStruct->nItemNum=lpMultiItemEditProperty->nItemNum;


      nTextHeigth=GetTextHeight(hWnd); // 得到文本高度
      GetClientRect(hWnd,&ClientRect);
      for (i=0;i<lpMultiItemEditStruct->nItemNum;i++)
      { // 初始化条目
          lpEditItem=&lpMultiItemEditStruct->lpItemList[i];
// !!! Modified By Jami chen in 2003.07.31
//          if (SetEditItem(hWnd,lpEditItem,&lpMultiItemEditProperty->lpEditItemProperty[i],iNextWndPos)==FALSE)
          if (SetEditItem(hWnd,lpEditItem,&lpEditItemProperty[i],iNextWndPos)==FALSE)
// !!! Modified End By Jami chen in 2003.07.31
          { // 设置条目内容失败
            for (i--;i>=0;i--)
            { // 清除其他条目,及内存空间
                lpEditItem=&lpMultiItemEditStruct->lpItemList[i];
                if (lpEditItem->lpPDAControlBuffer)
                  free(lpEditItem->lpPDAControlBuffer);
                if (lpEditItem->lpPDASaveEditBuffer)
                  free(lpEditItem->lpPDASaveEditBuffer);
                if (lpEditItem->lpFormat)
                  free(lpEditItem->lpFormat);
            }
            free(lpMultiItemEditStruct->nItemStartLineList);
            free(lpMultiItemEditStruct->lpItemList);
            free(lpMultiItemEditStruct);
            //SendNotificationMsg(hWnd,EN_ERRSPACE);
            return -1;
          }
/*
          {
//             if (lpPDAEditProperty!=NULL)
             {
	             // get the text limit
	             if ((lpMultiItemEditProperty->lpEditItemProperty[i]).cLimited!=0)
		             lpEditItem->cbEditLimitLen=(lpMultiItemEditProperty->lpEditItemProperty[i]).cLimited;
	             else
		             lpEditItem->cbEditLimitLen=INITIALEDITSIZE;

	             // get the edit title text
	             if ((lpMultiItemEditProperty->lpEditItemProperty[i]).lpTitle!=NULL)
		             lpEditItem->cbTitleLen=strlen((lpMultiItemEditProperty->lpEditItemProperty[i]).lpTitle);
	             else
		             lpEditItem->cbTitleLen=0;
             }

             lpEditItem->cbEditBufferLen=lpEditItem->cbEditLimitLen+1;

             lpEditItem->cbControlBufferLen=lpEditItem->cbEditBufferLen+lpEditItem->cbTitleLen;
             // allocate memory
             lpEditItem->lpPDAControlBuffer=(LPTSTR)malloc(lpEditItem->cbControlBufferLen);

             if (lpEditItem->lpPDAControlBuffer==NULL)
             {  // allocate failare then free struct EDITITEM and return FALSe
	             free(lpEditItem);
	             lpEditItem->cbEditBufferLen=0;
	             lpEditItem->cbControlBufferLen=0;
	             SendNotificationMsg(hWnd,EN_ERRSPACE);
	             return -1;
             }

             lpEditItem->lpPDASaveEditBuffer=(LPTSTR)malloc(lpEditItem->cbEditBufferLen);
             if (lpEditItem->lpPDASaveEditBuffer==NULL)
             {  // allocate failare then free struct EDITITEM and return FALSe
	             free(lpEditItem->lpPDAControlBuffer);
	             free(lpEditItem);
	             lpEditItem->cbEditBufferLen=0;
	             lpEditItem->cbControlBufferLen=0;
	             SendNotificationMsg(hWnd,EN_ERRSPACE);
	             return -1;
             }

             lpEditItem->lpPDAEditBuffer=lpEditItem->lpPDAControlBuffer+lpEditItem->cbTitleLen;
             lpEditItem->dwStyle=((lpMultiItemEditProperty->lpEditItemProperty[i]).dwItemStyle|ES_AUTOEXTEND|ES_MULTIITEMEDIT);

             // clear struct EDITITEM
//             Clear(lpEditItem);
             ClearEditItemStruct(lpEditItem);

             // read control title text
             if (lpEditItem->cbTitleLen)
	             memcpy(lpEditItem->lpPDAControlBuffer,(lpMultiItemEditProperty->lpEditItemProperty[i]).lpTitle, lpEditItem->cbTitleLen );		// Read Text Success

             // read Window text
             if ((lpMultiItemEditProperty->lpEditItemProperty[i]).lpItemText!=NULL)
             {
	             lpEditItem->cbEditLen=strlen((lpMultiItemEditProperty->lpEditItemProperty[i]).lpItemText);
	             // the window text can put the default buffer ??
	             if (lpEditItem->cbEditLen>lpEditItem->cbEditLimitLen)
	             {
		             lpEditItem->cbEditLen=0;
		             SaveEditText(lpEditItem->lpPDASaveEditBuffer,(LPCTSTR)"",(int)(lpEditItem->cbEditLen+1));
	             }
	             if (lpEditItem->dwStyle&ES_PASSWORD)
	             {
		             lpEditItem->dwStyle&=~ES_MULTILINE;
//		             SetWindowLong(hWnd,GWL_STYLE,lpEditItem->dwStyle);
		             // read Window text
		             FillPassWordChar(lpEditItem->lpPDAEditBuffer,lpEditItem->cbEditLen,lpEditItem->chPassWordWord);
	             }
	             else
	             {
		             GetEditText(lpEditItem->lpPDAEditBuffer,(lpMultiItemEditProperty->lpEditItemProperty[i]).lpItemText,(int)(lpEditItem->cbEditLen+1)); // +1 is read end code 'null'
	             }
	             SaveEditText(lpEditItem->lpPDASaveEditBuffer,lpcs->lpszName,(int)(lpEditItem->cbEditLen+1));
             }
             else
             {
	             lpEditItem->cbEditLen=0;
	             SaveEditText(lpEditItem->lpPDASaveEditBuffer,(LPCTSTR)"",(int)(lpEditItem->cbEditLen+1));
             }
             // Read Text Success

             // get edit format
             lpEditItem->lpFormat=NULL;
             if (lpEditItem->dwStyle&ES_FORMAT)
             {
	             if ((lpMultiItemEditProperty->lpEditItemProperty[i]).lpFormat!=NULL)
	             {
		             lpEditItem->dwStyle&=~ES_MULTILINE;
//		             SetWindowLong(hWnd,GWL_STYLE,lpEditItem->dwStyle);
		             nFormatLen=strlen((lpMultiItemEditProperty->lpEditItemProperty[i]).lpFormat)+1;
		             if (nFormatLen)
		             {
			             lpEditItem->lpFormat=(LPTSTR)malloc(nFormatLen);
			             if (lpEditItem->lpFormat)
				             memcpy(lpEditItem->lpFormat,(lpMultiItemEditProperty->lpEditItemProperty[i]).lpFormat, nFormatLen );		// Read Text Success
			             else
				             SendNotificationMsg(hWnd,EN_ERRSPACE);
		             }
	             }
	             else
	             {
		             lpEditItem->dwStyle&=~ES_FORMAT;
//		             SetWindowLong(hWnd,GWL_STYLE,lpEditItem->dwStyle);
	             }
             }
//             lpEditItem->nTotalLine=GetTotalLine(hWnd,lpEditItem);
             lpEditItem->iStartPos=iNextWndPos;
             lpEditItem->rect.top=0;
             lpEditItem->rect.left=0;
             lpEditItem->rect.right=ClientRect.right;
             lpEditItem->nTotalLine=GetTotalLine(hWnd,lpEditItem);
             lpEditItem->rect.bottom=lpEditItem->rect.top+lpEditItem->nTotalLine*nTextHeigth;
//             SetWindowPos(hWnd,0,0,0,ClientRect.right,ClientRect.top+nTextHeight*nTotalLine,SWP_NOMOVE|SWP_NOREDRAW|SWP_NOZORDER);

          }
          */
//          GetClientRect(hItemWnd,&rect);
//          lpMultiItemEditStruct->hItemWndList[i]=hItemWnd;
          lpMultiItemEditStruct->nItemStartLineList[i]=iNextWndPos/nTextHeigth;
//          lpMultiItemEditStruct->nItemStartPosList[i]=iNextWndPos;
          iNextWndPos+=(int)lpEditItem->rect.bottom;  // 下一个条目的开始位置
      }

      lpMultiItemEditStruct->nItemStartLineList[lpMultiItemEditStruct->nItemNum]=iNextWndPos/nTextHeigth;
      lpMultiItemEditStruct->nContextBottomPos=iNextWndPos;

	  /*
	  lpMultiItemEditStruct->cl_NormalText = CL_BLACK;
	  lpMultiItemEditStruct->cl_NormalBkColor = CL_WHITE;

	  lpMultiItemEditStruct->cl_InvertText = CL_WHITE;
	  lpMultiItemEditStruct->cl_InvertBkColor = CL_BLACK;

	  lpMultiItemEditStruct->cl_DisableText = CL_LIGHTGRAY;
	  lpMultiItemEditStruct->cl_DisableBkColor = CL_WHITE;
	  */
      // 初始化显示颜色
	  lpMultiItemEditStruct->cl_NormalText = GetSysColor(COLOR_WINDOWTEXT);
	  lpMultiItemEditStruct->cl_NormalBkColor = GetSysColor(COLOR_WINDOW);

	  lpMultiItemEditStruct->cl_InvertText = GetSysColor(COLOR_HIGHLIGHTTEXT);
	  lpMultiItemEditStruct->cl_InvertBkColor = GetSysColor(COLOR_HIGHLIGHT);

	  lpMultiItemEditStruct->cl_DisableText = GetSysColor(COLOR_GRAYTEXT);
	  lpMultiItemEditStruct->cl_DisableBkColor = GetSysColor(COLOR_WINDOW);

	  lpMultiItemEditStruct->cl_ReadOnly = lpMultiItemEditStruct->cl_NormalText;
	  lpMultiItemEditStruct->cl_ReadOnlyBk = lpMultiItemEditStruct->cl_NormalBkColor;

	  lpMultiItemEditStruct->cl_Title = lpMultiItemEditStruct->cl_NormalText;
	  lpMultiItemEditStruct->cl_TitleBk = lpMultiItemEditStruct->cl_NormalBkColor;

      SetWindowLong(hWnd,0,(LONG)lpMultiItemEditStruct);
      nClientLine=ClientRect.bottom/nTextHeigth;
//      SetMIEditScrollPage(hWnd);
      SetMIEditVScrollRange(hWnd,lpMultiItemEditStruct->nItemStartLineList[lpMultiItemEditStruct->nItemNum],nClientLine);

			lpMultiItemEditStruct->iActiveItem=0;
	  SendNotificationMsg(hWnd,EN_ACTIVEITEMCHANGE); // 统治父窗口
//      AdjustCaretPosition(hWnd);
      return 0;
}
/**************************************************
声明:static void ReleaseMultiItemEdit(HWND hWnd)
参数:
	IN hWnd -- 窗口句柄
返回值:无
功能描述:释放窗口资源。
引用: 
************************************************/
static void ReleaseMultiItemEdit(HWND hWnd)
{
    LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
    LPEDITITEM lpEditItem;
    int nItem;

      lpMultiItemEditStruct=(LPMULTIITEMEDITSTRUCT)GetWindowLong(hWnd,0); // 得到编辑窗口数据
      if (lpMultiItemEditStruct==NULL) return;
			if (lpMultiItemEditStruct->nItemStartLineList)
				free(lpMultiItemEditStruct->nItemStartLineList); // 释放开始数据列表

      for (nItem=0;nItem<lpMultiItemEditStruct->nItemNum;nItem++)
      {  // 释放条目数据
         lpEditItem=&lpMultiItemEditStruct->lpItemList[nItem];

			   if (lpEditItem->lpPDASaveEditBuffer)
				   free(lpEditItem->lpPDASaveEditBuffer);
			   if (lpEditItem->lpPDAControlBuffer)
				   free(lpEditItem->lpPDAControlBuffer);
			   if (lpEditItem->lpFormat)
				   free(lpEditItem->lpFormat);
      }

			if (lpMultiItemEditStruct->lpItemList)
				free(lpMultiItemEditStruct->lpItemList); // 释放条目列表
			free(lpMultiItemEditStruct);

	    DeletePDACaret(hWnd);  // 删除光标
	    SendNotificationMsg(hWnd,EN_KILLFOCUS);  // 发送通知消息
			return;
}
/*static void DoSizeChanged(HWND hWnd,WPARAM wParam,LPARAM lParam)

⌨️ 快捷键说明

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