📄 multiple.c
字号:
// SetFocus(lpMultiItemEditStruct->hItemWndList[iActiveItem]);
// ShowCaret(lpMultiItemEditStruct->hItemWndList[iActiveItem]);
}
/**************************************************
声明:static LRESULT DoCharFromPos(HWND hWnd,WPARAM wParam,LPARAM lParam)
参数:
IN hWnd -- 窗口句柄
IN wParam -- INT ,指定条目
IN lParam -- MAKELPARAM(x,y),指定的坐标
返回值:低WORD返回指定坐标所在的字符索引位置,高WORD返回该字符所在的行。
功能描述:得到指定点的字符,处理EM_CHARFROMPOS消息。
引用:
************************************************/
static LRESULT DoCharFromPos(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
LPEDITITEM lpEditItem;
int nItem;
int xPos,yPos;
lpMultiItemEditStruct=(LPMULTIITEMEDITSTRUCT)GetWindowLong(hWnd,0); // 得到编辑窗口数据
if (lpMultiItemEditStruct==NULL) return 0;
nItem=(int)wParam; // 得到条目索引
if (nItem>=lpMultiItemEditStruct->nItemNum)
return 0;
lpEditItem=&lpMultiItemEditStruct->lpItemList[nItem]; // 得到条目结构
xPos=LOWORD(lParam);
yPos=HIWORD(lParam);
return GetCharFromPos(hWnd,lpEditItem,xPos,yPos); // 得到指定位置的字符
// return SendMessage(lpMultiItemEditStruct->hItemWndList[nItem],EM_CHARFROMPOS,0,lParam);
}
/**************************************************
声明:static LRESULT DoGetFirstVisibleLine(HWND hWnd,WPARAM wParam,LPARAM lParam)
参数:
IN hWnd -- 窗口句柄
IN wParam -- 保留
IN lParam -- 保留
返回值:返回第一个可见行的索引
功能描述:得到第一个可见行的索引,处理EM_GETFIRSTVISIBLELINE消息。
引用:
************************************************/
static LRESULT DoGetFirstVisibleLine(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
lpMultiItemEditStruct=(LPMULTIITEMEDITSTRUCT)GetWindowLong(hWnd,0); // 得到编辑窗口数据
if (lpMultiItemEditStruct==NULL) return 0;
return lpMultiItemEditStruct->nDisplayLine; // 得到显示行索引
}
/**************************************************
声明:static LRESULT DoGetLimitText(HWND hWnd,WPARAM wParam,LPARAM lParam)
参数:
IN hWnd -- 窗口句柄
IN wParam -- INT ,指定条目
IN lParam -- 保留
返回值:返回指定条目的文本限制
功能描述:得到指定条目的文本限制,处理EM_GETLIMITTEXT消息。
引用:
************************************************/
static LRESULT DoGetLimitText(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
LPEDITITEM lpEditItem;
int nItem;
lpMultiItemEditStruct=(LPMULTIITEMEDITSTRUCT)GetWindowLong(hWnd,0); // 得到编辑窗口数据
if (lpMultiItemEditStruct==NULL) return 0;
nItem=(int)wParam; // 得到条目索引
if (nItem>=lpMultiItemEditStruct->nItemNum)
return 0;
lpEditItem=&lpMultiItemEditStruct->lpItemList[nItem]; // 得到条目结构
return lpEditItem->cbEditLimitLen; // 返回条目文本限制
}
/**************************************************
声明:static LRESULT DoGetLine(HWND hWnd,WPARAM wParam,LPARAM lParam)
参数:
IN hWnd -- 窗口句柄
IN wParam -- INT 指定行的索引
IN lParam -- LPSTR 存放指定行数据的缓存,前2个字节存放缓存的大小
返回值:返回拷贝字符的个数
功能描述:得到指定行的数据,处理EM_GETLINE消息。
引用:
************************************************/
static LRESULT DoGetLine(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
LPEDITITEM lpEditItem;
int nLine,nLineLen,nBufferMaxLen;
LPSTR lpch;
LPSTR lpLineAddress;
int nItem;
lpMultiItemEditStruct=(LPMULTIITEMEDITSTRUCT)GetWindowLong(hWnd,0); // 得到编辑窗口数据
if (lpMultiItemEditStruct==NULL) return 0;
if (lpMultiItemEditStruct->nItemNum==0) return 0; // 没有条目
nLine=(int)wParam; // 得到行索引
#ifdef _MAPPOINTER
lParam = (LPARAM)MapPtrToProcess( (LPVOID)lParam, GetCallerProcess() ); // 映射指针
#endif
lpch=(LPSTR)lParam; // 得到缓存
nItem=lpMultiItemEditStruct->nItemNum-1;
for (;nItem>=0;nItem--)
{
if (lpMultiItemEditStruct->nItemStartLineList[nItem]<=nLine)
break;
}
nLine-=lpMultiItemEditStruct->nItemStartLineList[nItem];
lpEditItem=&lpMultiItemEditStruct->lpItemList[nItem]; // 得到指定行的条目结构
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 DoGetLineCount(HWND hWnd,WPARAM wParam,LPARAM lParam)
参数:
IN hWnd -- 窗口句柄
IN wParam -- 保留
IN lParam -- 保留
返回值:成功返回控件的总行数,否则返回0
功能描述:得到控件的总行数,处理EM_GETLINECOUNT消息。
引用:
************************************************/
static LRESULT DoGetLineCount(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
lpMultiItemEditStruct=(LPMULTIITEMEDITSTRUCT)GetWindowLong(hWnd,0); // 得到编辑窗口数据
if (lpMultiItemEditStruct==NULL) return 0;
if (lpMultiItemEditStruct->nItemNum==0) return 0;
return lpMultiItemEditStruct->nItemStartLineList[lpMultiItemEditStruct->nItemNum]; // 得到总行数
}
/**************************************************
声明:static LRESULT DoGetModify(HWND hWnd,WPARAM wParam,LPARAM lParam)
参数:
IN hWnd -- 窗口句柄
IN wParam -- INT 指定编辑条目
IN lParam -- 保留
返回值:如果指定条目是-1,则返回控件的修改标志,否则返回指定条目的修改标志。
功能描述:返回修改标志,处理EM_GETMODIFY消息。
引用:
************************************************/
static LRESULT DoGetModify(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
int nItem;
LPEDITITEM lpEditItem;
lpMultiItemEditStruct=(LPMULTIITEMEDITSTRUCT)GetWindowLong(hWnd,0); // 得到编辑窗口数据
if (lpMultiItemEditStruct==NULL) return FALSE;
if (lpMultiItemEditStruct->nItemNum==0) return FALSE; // 没有数据
nItem=(int)wParam; // 得到条目索引
if (nItem==-1)
{ // 得到编辑区的编辑标志,是所有条目的标志综合
for (nItem=0;nItem<lpMultiItemEditStruct->nItemNum-1;nItem++)
{
lpEditItem=&lpMultiItemEditStruct->lpItemList[nItem];
if (lpEditItem->fModified)
{ // 有条目编辑过,则当前编辑区为已经编辑过
return TRUE;
}
}
}
else
{ // 得到指定条目的编辑标志
if (nItem>=lpMultiItemEditStruct->nItemNum)
return FALSE;
lpEditItem=&lpMultiItemEditStruct->lpItemList[nItem];
if (lpEditItem->fModified)
{
return TRUE;
}
}
return FALSE;
}
/**************************************************
声明:static LRESULT DoGetPasswordChar(HWND hWnd,WPARAM wParam,LPARAM lParam)
参数:
IN hWnd -- 窗口句柄
IN wParam -- INT 指定条目的次序
IN lParam -- 保留
返回值:返回指定条目的密码字符
功能描述:得到条目的密码字符,处理EM_GETPASSWORDCHAR消息。
引用:
************************************************/
static LRESULT DoGetPasswordChar(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
LPEDITITEM lpEditItem;
int nItem;
lpMultiItemEditStruct=(LPMULTIITEMEDITSTRUCT)GetWindowLong(hWnd,0);
if (lpMultiItemEditStruct==NULL) return 0;
nItem=(int)wParam; // 得到条目索引
if (nItem>=lpMultiItemEditStruct->nItemNum)
return 0;
lpEditItem=&lpMultiItemEditStruct->lpItemList[nItem]; // 得到条目结构
if (lpEditItem->dwStyle&ES_PASSWORD)
return lpEditItem->chPassWordWord; // 返回密码字符
else
return 0;
}
/**************************************************
声明:static LRESULT DoSetLimitText(HWND hWnd,WPARAM wParam,LPARAM lParam)
参数:
IN hWnd -- 窗口句柄
IN wParam -- INT 要设定的文本限制
IN lParam -- INT 指定条目的次序
返回值:成功返回TRUE,否则返回FALSE
功能描述:设置指定条目的文本限制,处理EM_SETLIMITTEXT消息。
引用:
************************************************/
static LRESULT DoSetLimitText(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
LPEDITITEM lpEditItem;
int cchMax;
int nItem;
lpMultiItemEditStruct=(LPMULTIITEMEDITSTRUCT)GetWindowLong(hWnd,0); // 得到编辑窗口数据
if (lpMultiItemEditStruct==NULL) return 0;
cchMax=(int)wParam; // 得到限制文本
nItem=(int)lParam; // 得到条目限制
if (nItem>=lpMultiItemEditStruct->nItemNum)
return 0;
// Get struct EDITITEM data
lpEditItem=&lpMultiItemEditStruct->lpItemList[nItem]; // 得到条目结构
return SetLimitText(hWnd,lpEditItem,cchMax); // 设定条目限制
}
/**************************************************
声明:static LRESULT DoLineFromChar(HWND hWnd,WPARAM wParam,LPARAM lParam)
参数:
IN hWnd -- 窗口句柄
IN wParam -- int ,字符索引
IN lParam -- INT , 指定条目
返回值:返回指定条目的指定索引字符的行索引。
功能描述:返回指定条目的指定索引字符的行索引,处理EM_LINEFROMCHAR消息。
引用:
************************************************/
static LRESULT DoLineFromChar(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
LPEDITITEM lpEditItem;
int nItem;
DWORD dwStyle;
LPTSTR lpCurPos;
int ich,nLine;
lpMultiItemEditStruct=(LPMULTIITEMEDITSTRUCT)GetWindowLong(hWnd,0); // 得到编辑窗口数据
if (lpMultiItemEditStruct==NULL) return 0;
ich=(int)wParam; // 得到字符索引
nItem=(int)lParam; // 得到条目索引
if (nItem>=lpMultiItemEditStruct->nItemNum)
return 0;
// Get struct EDITITEM data
lpEditItem=&lpMultiItemEditStruct->lpItemList[nItem]; // 得到条目结构
dwStyle=lpEditItem->dwStyle; // 得到条目风格
if (ich==-1)
{ // 没有指定字符
if (lpEditItem->lpInvertStart==lpEditItem->lpInvertEnd)
{ // 没有选择
lpCurPos=lpEditItem->lpCaretPosition;
}
else
{ // 选择开始位置
lpCurPos=lpEditItem->lpInvertStart;
}
}
else
{ // 有指定字符
if (ich>lpEditItem->cbEditLen)
ich=lpEditItem->cbEditLen;
lpCurPos=lpEditItem->lpPDAEditBuffer+ich; // 得到字符指针
}
GetCoordinate(hWnd,lpEditItem,lpCurPos,NULL,&nLine,dwStyle&ES_MULTILINE); // 得到指定字符的坐标位置
return (LRESULT)nLine;
}
/**************************************************
声明:static LRESULT DoLineIndex(HWND hWnd,WPARAM wParam,LPARAM lParam)
参数:
IN hWnd -- 窗口句柄
IN wParam -- INT ,指定行的索引
IN lParam -- INT ,指定条目
返回值:返回指定条目指定行索引所对应的字符索引
功能描述:得到指定条目指定行索引所对应的字符索引,处理EM_LINEINDEX消息。
引用:
************************************************/
static LRESULT DoLineIndex(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
LPMULTIITEMEDITSTRUCT lpMultiItemEditStruct;
LPEDITITEM lpEditItem;
LPTSTR lpCurPos;
int nLine;
int nItem;
lpMultiItemEditStruct=(LPMULTIITEMEDITSTRUCT)GetWindowLong(hWnd,0); // 得到编辑窗口数据
if (lpMultiItemEditStruct==NULL) return 0;
nLine=(int)wParam; // 得到行索引
nItem=(int)lParam; // 得到条目索引
if (nItem>=lpMultiItemEditStruct->nItemNum)
return 0;
// Get struct EDITITEM data
lpEditItem=&lpMultiItemEditStruct->lpItemList[nItem]; // 得到条目结构
if (nLine==-1)
{ // 没有指定行索引
nLine=
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -