📄 multiple.c
字号:
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 + -