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

📄 multiple.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
📖 第 1 页 / 共 5 页
字号:
/***************************************************
Copyright(c) 版权所有,1998-2003微逻辑。保留所有权利。
***************************************************/
/**************************************************
文件说明:多条目编辑类
版本号:1.0.0.456
开发时期:2001-12-26
作者:Jami chen 陈建明
修改记录:
  2004.07.19 增加消息功能WM_SYSCOLORCHANGE, 用于在在系统颜色重新
			 设置后,需要重新装载新的颜色
**************************************************/
//#include "StdAfx.h"
#include "eframe.h"
#include "eWindows.h"
//#include "Resource.h"
#include <estring.h>
//#include <memory.h>
//#include <CTYPE.h>
//#include "Show.h"
#include "eedit.h"
#include "eebase.h"
//#include <gwmesrv.h>
#include <eobjcall.h>


//#define _MAPPOINTER

// define const
#define MULTIITEMEDIT classMULTIEDIT
static const char classMULTIEDIT[]={"MultiItemEdit"};

// This function for debug
//void ErrorDisplay(LPCTSTR lpCaption);

// function declare area
LRESULT CALLBACK MultiItemEditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
ATOM RegisterMultiItemEditClass(HINSTANCE hInstance);

extern int GetTextHeight(HWND hWnd);


static void ReleaseMultiItemEdit(HWND hWnd);
//static void DoSizeChanged(HWND hWnd,WPARAM wParam,LPARAM lParam);
static void ReSetItemPos(HWND hWnd,int iChangedSequence,int nChangedLine,BOOL bRedraw);
static void ClearBottomBlankArea(HWND hWnd);
static int GetItemSequence(HWND hWnd,LPEDITITEM lpEditItem);
static int VScrollMultiItemEdit(HWND hWnd,int nScrollLine);
static void HScrollMultiItemEdit(HWND hWnd,int xScrollPos);
static BOOL AdjustCaretPosition(HWND hWnd);
static void SetMIEditVScrollRange(HWND hWnd,int nTotalLine,int nWindowLine);
static void SetMIEditScrollPage(HWND hWnd);
static void SetMIEditVScrollPos(HWND hWnd,int nNewScrollPos);
static int DoVScrollWindow(HWND hWnd,WPARAM wParam,LPARAM lParam);
static void DoHScrollWindow(HWND hWnd,WPARAM wParam,LPARAM lParam);
//static int GetPageLine(HWND hWnd);
static void SetMIEditHScrollPos(HWND hWnd,int nNewScrollPos);
//static void DoDisplayChanged(HWND hWnd,WPARAM wParam,LPARAM lParam);
void SetCaretToNextItem(HWND hWnd,LPEDITITEM lpEditItem);
//static BOOL MoveCaret(HWND hWnd,int nScrollLine);
static BOOL MoveCaret(HWND hWnd,int nScrollLine,int iHorzPos);

static BOOL SetEditItem(HWND hWnd,LPEDITITEM lpEditItem,LPEDITITEMPROPERTY lpEditItemProperty,int iItemStartPos);

static LRESULT DoGetThumb(HWND hWnd,WPARAM wParam,LPARAM lParam);

static LRESULT DoKeyDown(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT InitialMultiItemEdit(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoPaint(HWND hWnd,HDC hdc);
static LRESULT DoSize(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoWindowPosChanged(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoLButtonDown(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoMouseMove(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoLButtonUp(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoProcessChar(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoSetFocus(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoKillFocus(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoPrintClient(HWND hWnd,WPARAM wParam,LPARAM lParam);
//static LRESULT DoNoticeSetFocus(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoCharFromPos(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoGetFirstVisibleLine(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoGetLimitText(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoGetLine(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoGetLineCount(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoGetModify(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoGetPasswordChar(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoGetSel(HWND hWnd, WPARAM wParam, LPARAM lParam);
static LRESULT DoSetLimitText(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoLineFromChar(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoLineIndex(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoLinelength(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoLineScroll(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoPosFromChar(HWND hWnd, WPARAM wParam,LPARAM lParam);
static LRESULT DoReplaceSel(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoScroll(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoScrollCaret(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoSetModify(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoSetPasswordChar(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoSetReadOnly(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoSetSel(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoSetText(HWND hWnd , WPARAM wParam ,LPARAM lParam);
static LRESULT DoSetItemText(HWND hWnd , WPARAM wParam ,LPARAM lParam);
static LRESULT DoGetText(HWND hWnd , WPARAM wParam ,LPARAM lParam);
static LRESULT DoGetItemText(HWND hWnd , WPARAM wParam ,LPARAM lParam);
static LRESULT DoGetTextLength(HWND hWnd , WPARAM wParam ,LPARAM lParam);
static LRESULT DoGetItemTextLength(HWND hWnd , WPARAM wParam ,LPARAM lParam);
static LRESULT DoCopy(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoPaste(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoCut(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoClear(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoEmpty(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoInsertItem(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoSetItem(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoDeleteItem(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoSetItemCallBack(HWND hWnd,WPARAM wParam,LPARAM lParam);

static LRESULT DoGetActiveItem(HWND hWnd,WPARAM wParam,LPARAM lParam);

static LRESULT DoSetColor(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoGetColor(HWND hWnd,WPARAM wParam,LPARAM lParam);

static LRESULT DoGetItemStyle(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoSetItemStyle(HWND hWnd,WPARAM wParam,LPARAM lParam);

static LRESULT DoSysColorChanged(HWND hWnd,WPARAM wParam,LPARAM lParam);

static void DoGetCaretPosition(HWND hWnd,WPARAM wParam,LPARAM lParam);

/**************************************************
声明:ATOM RegisterMultiItemEditClass(HINSTANCE hInstance)
参数:
	IN hInstance -- 实例句柄
返回值:返回系统注册结果
功能描述:注册多条目编辑类
引用: 
************************************************/
ATOM RegisterMultiItemEditClass(HINSTANCE hInstance)
{
	WNDCLASS wcex;

	// size of the struct 'WNDCLASSEX'
//	wcex.cbSize = sizeof(WNDCLASSEX);

	// the class propertiy
	wcex.style			= CS_HREDRAW | CS_VREDRAW;
	// this class window procedure
	wcex.lpfnWndProc	= (WNDPROC)MultiItemEditProc;
	// no class extra
	wcex.cbClsExtra		= 0;
	// window extra 4 byte to save address
	wcex.cbWndExtra		= sizeof(long);
	wcex.hInstance		= hInstance;
	// no icon
	wcex.hIcon			= NULL;
	// I-Beam Cursor
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
  // no background
  wcex.hbrBackground	= 0;
	// no menu
	wcex.lpszMenuName	= NULL; // no menu ,add to future
	// class name
	wcex.lpszClassName	= MULTIITEMEDIT;
	// no small icon
//	wcex.hIconSm		= NULL;

	// register this class
	return RegisterClass(&wcex);
}

/**************************************************
声明:LRESULT CALLBACK MultiItemEditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
参数:
	IN hWnd -- 窗口句柄
	IN uMsg -- 要处理的消息
	IN wParam -- 消息参数
	IN lParam -- 消息参数
返回值:消息处理结果
功能描述:处理多条目编辑类消息。
引用: 
************************************************/
LRESULT CALLBACK MultiItemEditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hdc;
 
	switch (message)
	{
		case WM_CREATE:  // 创建窗口
			// Create a window use this class
		  return InitialMultiItemEdit(hWnd,wParam,lParam);
		case WM_COMMAND:  // 命令消息
			break;
		case WM_PAINT:
			// Paint this window
			hdc = BeginPaint(hWnd, &ps);  // Get hdc
//			ClearBottomBlankArea(hWnd);
  	      DoPaint(hWnd,hdc);
			EndPaint(hWnd, &ps);  //release hdc
			break;
	    case WM_SIZE:  // 改变窗口大小
 	      return DoSize(hWnd,wParam,lParam);
		case WM_WINDOWPOSCHANGED:
			return DoWindowPosChanged(hWnd,wParam,lParam);
		case WM_SETFOCUS: // 设置焦点
		  return DoSetFocus(hWnd,wParam,lParam);
		case WM_KILLFOCUS: // 杀死焦点
		  return DoKillFocus(hWnd,wParam,lParam);
			case WM_LBUTTONDOWN:  // 鼠标左键按下
		  return DoLButtonDown(hWnd,wParam,lParam);
		case WM_MOUSEMOVE: // 鼠标移动
		  return DoMouseMove(hWnd,wParam,lParam);
		case WM_LBUTTONUP: // 鼠标左键弹起
		  return DoLButtonUp(hWnd,wParam,lParam);
		case WM_CHAR: // 字符输入
		  return DoProcessChar(hWnd,wParam,lParam);
		case WM_KEYDOWN: // 键盘消息
		  return DoKeyDown(hWnd,wParam,lParam);
		case WM_DESTROY: // 破坏窗口
				// close this window
				ReleaseMultiItemEdit(hWnd);
				break;
		case WM_VSCROLL:  // 垂直滚动
		  DoVScrollWindow(hWnd,wParam,lParam);
		  break;
		case WM_HSCROLL:  // 水平滚动
		  DoHScrollWindow(hWnd,wParam,lParam);
		  break;
		case WM_PRINTCLIENT: // 打印客户区数据
		  DoPrintClient(hWnd,wParam,lParam);
		  break;

// !!! Add By Jami chen in 2004.07.19
		case WM_SYSCOLORCHANGE:
			return DoSysColorChanged(hWnd,wParam,lParam);
// !!! Add End By Jami chen in 2004.07.19

		case EM_CHARFROMPOS:  // 得到指定点的字符
			return DoCharFromPos(hWnd,wParam,lParam);
		case EM_GETFIRSTVISIBLELINE:  // 得到第一个可见行的索引
			return DoGetFirstVisibleLine(hWnd,wParam,lParam);
		case EM_GETLIMITTEXT: // 得到指定条目的文本限制
			return DoGetLimitText(hWnd,wParam,lParam);
		case EM_GETLINE: // 得到指定行的数据
			return DoGetLine(hWnd,wParam,lParam);
		case EM_GETLINECOUNT: // 得到控件的总行数
			return DoGetLineCount(hWnd,wParam,lParam);
		case EM_GETMODIFY: // 返回修改标志
			return DoGetModify(hWnd,wParam,lParam);
		case EM_GETSEL: // 得到编辑区的选择区域
			return DoGetSel(hWnd,wParam,lParam);
		case EM_GETPASSWORDCHAR: // 得到条目的密码字符
			return DoGetPasswordChar(hWnd,wParam,lParam);
		case EM_GETTHUMB: // 得到垂直滚动条滚动块的位置
			return DoGetThumb(hWnd,wParam,lParam);
		case EM_LINEFROMCHAR: // 返回指定条目的指定索引字符的行索引
			return DoLineFromChar(hWnd,wParam,lParam);
		case EM_LINEINDEX: // 得到指定条目指定行索引所对应的字符索引
				return DoLineIndex(hWnd,wParam,lParam);
		case EM_LINELENGTH: // 得到指定条目指定字符所在行的字符个数
				return DoLinelength(hWnd,wParam,lParam);
		case EM_LINESCROLL: // 滚动窗口
				return DoLineScroll(hWnd,wParam,lParam);
		case EM_POSFROMCHAR: // 得到指定条目指定字符的坐标
			return DoPosFromChar(hWnd,wParam,lParam);
		case EM_REPLACESEL: // 用指定的字符串替换选择字符
			return DoReplaceSel(hWnd,wParam,lParam);
		case EM_SCROLL: // 垂直滚动屏幕
			return DoScroll(hWnd,wParam,lParam);
		case EM_SCROLLCARET: // 滚动光标到可见位置
			return DoScrollCaret(hWnd,wParam,lParam);
		case EM_SETLIMITTEXT: // 设置指定条目的文本限制
			return DoSetLimitText(hWnd,wParam,lParam);
		case EM_SETMODIFY: // 设置指定条目新的修改标志
			return DoSetModify(hWnd,wParam,lParam);
		case EM_SETPASSWORDCHAR: // 设置指定条目新的修改标志
			return DoSetPasswordChar(hWnd,wParam,lParam);
		case EM_SETREADONLY: // 设置指定条目编辑区的只读属性
			return DoSetReadOnly(hWnd,wParam,lParam);
		case EM_SETSEL:  // 设置选择区域
			return DoSetSel(hWnd,wParam,lParam);
		case EM_EMPTY: // 清空编辑区
			return DoEmpty(hWnd,wParam,lParam);
// new message
		case EM_INSERTITEM: // 在指定条目下插入一个条目
			return DoInsertItem(hWnd,wParam,lParam);
		case EM_SETITEM:  // 设置指定条目的文本
			return DoSetItem(hWnd,wParam,lParam);
		case EM_DELETEITEM: // 删除指定条目
			return DoDeleteItem(hWnd,wParam,lParam);
		case WM_COPY: // 拷贝选择区域字符到剪切板
			return DoCopy(hWnd,wParam,lParam);
		case WM_PASTE:  // 粘帖
			return DoPaste(hWnd,wParam,lParam);
		case WM_CUT:  // 剪切
			return DoCut(hWnd,wParam,lParam);
		case WM_CLEAR:  // 清除
			return DoClear(hWnd,wParam,lParam);
		case WM_SETTEXT:  // 设置激活编辑区文本
			return DoSetText(hWnd,wParam,lParam);
		case WM_GETTEXT:  // 得到激活编辑区的文本
			return DoGetText(hWnd,wParam,lParam);
	    case WM_GETTEXTLENGTH:  // 得到激活编辑区的文本长度
			 return DoGetTextLength(hWnd , wParam ,lParam);

		
		case EM_GETITEMTEXT:  // 得到指定条目编辑区的文本
			return DoGetItemText(hWnd,wParam,lParam);
		case EM_SETITEMTEXT:  // 设置指定条目的文本
			return DoSetItemText(hWnd,wParam,lParam);
	    case EM_GETITEMTEXTLENGTH: // 得到指定条目编辑区的文本长度
			 return DoGetItemTextLength(hWnd , wParam ,lParam);
		case EM_SETITEMCALLBACK: // 设置指定条目的回调函数指针
			 return DoSetItemCallBack(hWnd,wParam,lParam);

		case EM_GETACTIVEITEM:  // 得到激活条目的索引
			return DoGetActiveItem(hWnd,wParam,lParam);
//		case EM_SETCOLOR:
//			return DoSetColor(hWnd,wParam,lParam);
//		case EM_GETCOLOR:
//			return DoGetColor(hWnd,wParam,lParam);
		case WM_SETCTLCOLOR	: // 设置窗口颜色
			return DoSetColor(hWnd,wParam,lParam);
		case WM_GETCTLCOLOR	:  // 得到当前窗口的颜色
			return DoGetColor(hWnd,wParam,lParam);
		case EM_GETITEMSTYLE:  // 得到指定条目的风格
			return DoGetItemStyle(hWnd,wParam,lParam);
		case EM_SETITEMSTYLE: // 设定指定条目的风格
			return DoSetItemStyle(hWnd,wParam,lParam);

    case EM_GETCARETPOS:  // 得到光标位置
	      DoGetCaretPosition(hWnd,wParam,lParam);
		  break;

⌨️ 快捷键说明

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