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

📄 edit.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 <ctype.h>
#include "eframe.h"
//#include "Resource.h"
//#include <memory.h>
//#include <wingdi.h>
#include <estring.h>

//#include "Show.h"
#include "eedit.h"
#include "eeBase.h"
#include "eclipbrd.h"
//#include <gwmesrv.h>


// define const 
#define EDIT classEDIT
static const char classEDIT[]="Edit";

#define DOT '.'

//#define _MAPPOINTER

//#define INITIALEDITSIZE 64
#define INITIALEDITSIZE 64
//#define LINEHEIGHT      16
//#define CHINESEWIDTH    16

#define NORMALCOLOR      0
#define INVERTCOLOR      1

/*
#define PE_SHOWCLIENT         0x00000000
#define PE_SHOWLINEEND     0x00000001
#define PE_SHOWTEXTEND     0x00000002
#define PE_SHOWSPECIALLEN  0x00000003
*/

#define ENTERCODE        0x0D
#define BACKSPACE		 0x08
// static function declare area
LRESULT CALLBACK PDAEditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
ATOM RegisterEditClass(HINSTANCE hInstance);

static LRESULT DoDeleteChar(HWND hWnd);

static LRESULT InitialPDAEdit(HWND hwnd,LPARAM lParam);  // initial PDAEdit State data
static LRESULT DoSize(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 void DoLButtonUp(HWND hWnd,WPARAM wParam,LPARAM lParam);
static void DoProcessChar(HWND hWnd,WPARAM wParam,LPARAM lParam);
static void DoGetCaretPosition(HWND hWnd,WPARAM wParam,LPARAM lParam);
static void DoSetCaretPosition(HWND hWnd,WPARAM wParam,LPARAM lParam);
static void DoSetxDisplayPos(HWND hWnd,WPARAM wParam,LPARAM lParam);
static int DoVScrollWindow(HWND hWnd,WPARAM wParam,LPARAM lParam);
static void DoHScrollWindow(HWND hWnd,WPARAM wParam,LPARAM lParam);
static void ClearBottomBlankArea(HWND hWnd,HDC hdc,LPEDITITEM lpEditItem);

static void DoKeyDown(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoPaint(HWND hWnd,HDC hdc);
static LRESULT DoPrintClient(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoStyleChanged(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoSysColorChanged(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 DoCharFromPos(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoGetFirstVisibleLine(HWND hWnd);
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 DoGetThumb(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 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 DoSetText(HWND hWnd , WPARAM wParam ,LPARAM lParam);
static LRESULT DoGetText(HWND hWnd , WPARAM wParam ,LPARAM lParam);
static LRESULT DoGetTextLength(HWND hWnd , WPARAM wParam ,LPARAM lParam);
static LRESULT DoEmpty(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoSearchString(HWND hWnd,WPARAM wParam,LPARAM lParam);
static LRESULT DoWindowPosChanged(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 void ReleasePDAEdit(HWND hWnd);
static void SetPDAEditVScrollPos(HWND hWnd,int nNewScrollPos);
static void SetPDAEditHScrollPos(HWND hWnd,int nNewScrollPos);

static int VScrollWindowInPDAEdit(HWND hWnd,int nScrollLine);
static void HScrollWindowInPDAEdit(HWND hWnd,int nHScrollPos);

static char * ab_strstr( const char * str1, const char * str2 );



// **************************************************
// 声明:ATOM RegisterPDAEditClass(HINSTANCE hInstance)
// 参数:
// 	IN hInstance -- 实例句柄
// 返回值:返回系统注册结果
// 功能描述:注册编辑类
// 引用: 
// **************************************************
ATOM RegisterPDAEditClass(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)PDAEditProc;
	// 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_IBEAM);
	// background color
	wcex.hbrBackground	= 0;
	// no menu
	wcex.lpszMenuName	= NULL; // no menu ,add to future
	// class name
	wcex.lpszClassName	= EDIT;
	// no small icon
//	wcex.hIconSm		= NULL;

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

// **************************************************
// 声明:LRESULT CALLBACK PDAEditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
// 参数:
// 	IN hWnd -- 窗口句柄
// 	IN uMsg -- 要处理的消息
// 	IN wParam -- 消息参数
// 	IN lParam -- 消息参数
// 返回值:消息处理结果
// 功能描述:处理编辑类消息。
// 引用: 
// **************************************************
LRESULT CALLBACK PDAEditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message) 
	{
		case WM_CREATE:
			// Create a window use this class
			return InitialPDAEdit(hWnd,lParam);  // initial PDAEdit State data
		case WM_COMMAND:
			break;
		case WM_PAINT:
			// Paint this window
			hdc = BeginPaint(hWnd, &ps);  // Get hdc
		    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_LBUTTONDOWN:
			// the mouse left button be pressed down
			DoLButtonDown(hWnd,wParam,lParam);
			break;
   	    case WM_MOUSEMOVE:
			// the mouse move
			DoMouseMove(hWnd,wParam,lParam);
			break;
   	    case WM_LBUTTONUP:
			// the mouse left button be released
			DoLButtonUp(hWnd,wParam,lParam);
			break;
		case WM_SETFOCUS:
			// this window get focus
			// Create new caret
			return DoSetFocus(hWnd,wParam,lParam);
		case WM_KILLFOCUS:
			// this window lose foucs
			// kill caret
//      DeletePDACaret(hWnd);
			return DoKillFocus(hWnd,wParam,lParam);
		case WM_CHAR:
			// input char
			DoProcessChar(hWnd,wParam,lParam);
			break;
		case WM_KEYDOWN:
			// have key be pressed
			DoKeyDown(hWnd,wParam,lParam);
			break;
		case WM_DESTROY:
			// close this window
			ReleasePDAEdit(hWnd);
//			PostQuitMessage(0);
			break;
    case EM_GETCARETPOS:  // 得到光标位置
      DoGetCaretPosition(hWnd,wParam,lParam);
	  break;
    case EM_SETCARETPOS: // 设置光标位置
      DoSetCaretPosition(hWnd,wParam,lParam);
      break;
    case MIEM_SETXDISPLAYPOS: // 设置水平方向的显示位置
      DoSetxDisplayPos(hWnd,wParam,lParam);
      break;
    case WM_VSCROLL: // 垂直滚动
      DoVScrollWindow(hWnd,wParam,lParam);
      break;
    case WM_HSCROLL:  // 水平滚动
      DoHScrollWindow(hWnd,wParam,lParam);
      break;
    case EM_CHARFROMPOS:  //得到指定点的字符
      return DoCharFromPos(hWnd,wParam,lParam);
    case EM_GETFIRSTVISIBLELINE: //得到第一个可见行
      return DoGetFirstVisibleLine(hWnd);
		case EM_GETTHUMB: // 得到垂直滚动条滚动块的位置
			return DoGetThumb(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_GETPASSWORDCHAR:// 得到当前编辑区的密码字符
			return DoGetPasswordChar(hWnd,wParam,lParam);	
		case EM_GETSEL: // 得到编辑区的选择区域
			return DoGetSel(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);

		case EM_SEARCHSTRING: // 查找字串
			return DoSearchString(hWnd,wParam,lParam);
// Color Control 
//		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 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 WM_PRINTCLIENT: // 将编辑区打印到指定的设备
		  DoPrintClient(hWnd,wParam,lParam);
		  break;
		case WM_STYLECHANGED: // 窗口风格改变
		case WM_ENABLE: // 窗口改变
			return DoStyleChanged(hWnd,wParam,lParam);

// !!! 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
	    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 InitialPDAEdit(HWND hWnd,LPARAM lParam)  // initial PDAEdit State data
{
    LPEDITITEM lpEditItem;
	LPCREATESTRUCT lpcs;
	LPPDAEDITPROPERTY lpPDAEditProperty;
  DWORD dwStyle;
  int nFormatLen;
	
		lpcs = (LPCREATESTRUCT) lParam; // structure with creation data  

//		RETAILMSG(1,(TEXT("Enter InitialPDAEdit ...\r\n")));
		// Get Edit Window struct PDAEDITPROPERTY data
		lpPDAEditProperty=(LPPDAEDITPROPERTY)lpcs->lpCreateParams;
    dwStyle=lpcs->style;  // 得到窗口风格

    dwStyle&=~ES_MULTIITEMEDIT;  // 清除多条目编辑的风格

		SetWindowLong(hWnd,0,NULL); // 设置窗口扩展为空

		// allocate memory to struct EDITITEM
		lpEditItem=(LPEDITITEM)malloc(sizeof(EDITITEM));
		// allocate failare then return FALSE
		if (lpEditItem==NULL)
		{
///			SendNotificationMsg(hWnd,EN_ERRSPACE);
			return -1;
		}

⌨️ 快捷键说明

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