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

📄 diary.c

📁 名人E+E118的应用程序源码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*#########################################################################

  Copyright (c) 2004, MEIJIN COMPUTER TECH LTD.
  All rights reserved.
  
  File name     :Diary.c
  Description   :日记本

  Version       :1.00
  Author        :黄猛
  Complete Date :2004-08-XX

  Function List :
  History       :
  _________________________________________________________________________
  DATE          AUTHOR    VERSION    DESCRIBE
  -------------------------------------------------------------------------
  2004-08-15    黄  猛    Ver1.00    Create
  -------------------------------------------------------------------------
  2004-09-21    黄  猛    Ver1.01    怎加了日记查找的内容查找方式,改进了心
                                     跳回忆的部分算法。
  -------------------------------------------------------------------------
#########################################################################*/



/*初始化###########################################################初始化*/
#include	"Diary.h"

/*程序模式定义*/
#define AP_MODE_CURVE           (EV_APPLICATION+11)		/*心跳回忆模式*/

/*日记本的相关常量*/
#define		INDEX_NUM		1		/*数据库的索引数*/
#define		FIELD_NUM		4		/*多域编辑器域数,数据库的字段数*/
#define		KEYFIELD		0		/*数据库的关键字段号*/
#define		ROWSPACE		2		/*多域编辑器的行间距*/
#define		INDENT			0		/*多域编辑器缩进大小*/
#define		SPIRIT_NUM		5		/*心情域的选项数*/
#define		WEATHER_NUM		5		/*天气域的选项数**/

#define		MAX_SEARCHLEN	64		/*按内容查找时查找缓冲区长度*/

/*心跳回忆的相关设置*/
#define		POINT_SIZE		4				/*点的大小(以所给值作正方形)*/
#define		Y_SPACE         20				/*纵轴(标示心情)各坐标之间距离*/
#define		X_SPACE         4				/*横轴(标示日期)各坐标之间距离*/
#define		CHAR_SIZE		SYSFONT_GBK12	/*标示坐标值的字符的风格*/
#define		CHAR_SPACE		1				/*坐标轴与标示坐标值的字符的间距*/
#define		NUM_WIDTH		7				/*用于标示日期的数字字符的宽度*/
#define		NUM_HEIGH		12				/*用于标示日期的数字字符的高度*/
#define		HEAD_SPACE		5				/*坐标轴头部的空闲长度*/
#define		TAIL_SPACE		5				/*坐标轴尾部的空闲长度*/
#define		LEFT_SPACE		(1+2*CHAR_SIZE+CHAR_SPACE)		/*坐标系纵轴与窗口左边框间距*/
#define		BOTTOM_SPACE	(2*CHAR_SPACE+CHAR_SIZE+15)		/*坐标系横轴与窗口工具条间距*/

/*有关心情的选项*/
UINT8*  DiaryClass_Spirit[] = 
{
	"激动",
	"高兴",
	"一般",
	"郁闷",
	"沮丧"
};

/*有关天气的选项*/
const UINT8* const DiaryClass_Weather[] = 
{
	"大雨",
	"小雨",
	"晴天",
	"阴天",
	"多云"
};

/*多域编辑器参数数组*/
const MEditParam pFieldEditParam[]=
{
	/*日期域*/
	{DateFldExtraHandle, MAKE_ID(IDS_DIARY_FIELD_DATE), 10, EDITALLOW_ALL, EDITALLOW_DATE},
	/*心情域*/
	{TypeFldExtraHandle, MAKE_ID(IDS_DIARY_FIELD_SPIRIT), AP_MAX_EDITLEN, EDITALLOW_CLASS|EDITALLOW_NOMARK, EDITALLOW_CLASS},
	/*天气域*/
	{TypeFldExtraHandle, MAKE_ID(IDS_DIARY_FIELD_WEATHER), AP_MAX_EDITLEN, EDITALLOW_CLASS|EDITALLOW_NOMARK, EDITALLOW_CLASS},
	/*日记内容域*/
	{NULL, MAKE_ID(IDS_DIARY_FIELD_CONTENT), AP_MAX_EDITLEN, EDITALLOW_ALL, EDITALLOW_SBCCASE}
}; 

/*浏览日记窗口的工具栏*/
const MToolBar Diary_View_ToolBar[] =
{
	{(UINT8*)IDS_DIARY_VIEW_PREVIOUS, DIARY_CMD_PREVIOUS},		/*上一篇按钮*/
	{(UINT8*)IDS_DIARY_VIEW_NEXT, DIARY_CMD_NEXT},				/*下一篇按钮*/
	{(UINT8*)IDS_DIARY_VIEW_FIND, DIARY_CMD_FIND},				/*查找按钮*/
	{(UINT8*)IDS_DIARY_VIEW_MODIFY, DIARY_CMD_MODIFY},			/*修改按钮*/
	{(UINT8*)IDS_DIARY_VIEW_DELETE, DIARY_CMD_DELETE},			/*删除按钮*/
	{(UINT8*)IDS_DIARY_VIEW_WRITE, DIARY_CMD_WRITE},			/*写日记按钮*/
	{0,0}
};

/*浏览查找到的日记窗口的工具栏*/
const MToolBar Diary_Index_ToolBar[] =
{
	{(UINT8*)IDS_DIARY_VIEW_PREVIOUS, DIARY_CMD_PREVIOUS},		/*上一篇按钮*/
	{(UINT8*)IDS_DIARY_VIEW_NEXT, DIARY_CMD_NEXT},				/*下一篇按钮*/
	{0,0}
};

/*心跳回忆窗口的工具栏*/
const MToolBar Diary_Curve_ToolBar[] =
{
	{(UINT8*)IDS_DIARY_CURVE_PREVIOUS, DIARY_CMD_PREVIOUS},		/*上一月按钮*/
	{(UINT8*)IDS_DIARY_CURVE_NEXT, DIARY_CMD_NEXT},				/*下一月按钮*/
	{(UINT8*)IDS_DIARY_CURVE_CUSTOM, DIARY_CMD_FIND},			/*自定义月份按钮*/
	{0,0}
};

/*数据库域数组常量*/
const StructDbField DiaryField[] =
{
	{"日期", DB_FIELDTYPE_STRING, 1},
	{"心情", DB_FIELDTYPE_STRING, 1},
	{"天气", DB_FIELDTYPE_STRING, 1},
	{"内容", DB_FIELDTYPE_STRING, 1}
};

/*数据库索引数组常量*/
const StructDbIndex DiaryIndex[] =
{
	DB_INDEXTYPE_NORMAL,
	0
};

/*数据库创建信息常量*/
const StructDbCreate DiaryDbCreate = 
{
	"日记本",							/*数据库名*/
	NULL,								/*创建者标志 */
	FIELD_NUM,							/*字段数*/
	(StructDbField*)DiaryField,			/*字段结构数组的地址*/
	INDEX_NUM,							/*索引数*/
	(StructDbIndex*)DiaryIndex			/*索引结构数组的地址*/
};
/*初始化结束###################################################初始化结束*/


/*全局变量声明###############################################全局变量声明*/
/*==========================================================
VARIABLE NAME :g_PresentChoice
DESCRIPTION   :表述当前选择那项功能
VALUE         : 1:写日记
                2:浏览日记
				3:心跳回忆
OTHERS        :被函数DiayInit初始化为1
==========================================================*/
UINT		g_PresentChoice;


/*==========================================================
VARIABLE NAME :g_DbHandle
DESCRIPTION   :在整个程序执行过程中保存数据库句柄
VALUE         :
OTHERS        :被函数DiayInit初始化
==========================================================*/
INT			g_DbHandle;


/*==========================================================
VARIABLE NAME :g_PreViewRecID
DESCRIPTION   :记录浏览日记窗体正在浏览的日记在数据库中的记录
               ID
VALUE         :
               
OTHERS        :被函数DiayInit初始化为0
==========================================================*/
UINT16		g_PreViewRecID;


/*==========================================================
VARIABLE NAME :g_PreViewRecID
DESCRIPTION   :索引窗体的索引缓冲区,即记录的句柄集
VALUE         :
OTHERS        :被函数DiayInit初始化为NULL
==========================================================*/
UINT16*		g_IndexBuf;

/*==========================================================
VARIABLE NAME :g_IndexStatus
DESCRIPTION   :索引窗体是否已暂存g_PreViewRecID
VALUE         :
				FALSE:未暂存
				TRUE:一暂存
OTHERS        :被函数DiayInit初始化为FALSE
==========================================================*/
BOOL		g_IndexStatus;

/*==========================================================
VARIABLE NAME :g_Index_BGround
DESCRIPTION   :暂存索引窗体的背景
VALUE         :
OTHERS        :被函数DiayInit初始化为FALSE
==========================================================*/
BITMAPINFO*		g_Index_BGround;

/*==========================================================
VARIABLE NAME :g_DiaryViewFont
DESCRIPTION   :记录浏览日记窗体所使用的字体
VALUE         :
OTHERS        :被函数DiayInit初始化为SYSFONT_GBK12
==========================================================*/
UINT16		g_DiaryViewFont;


/*==========================================================
VARIABLE NAME :g_Date
DESCRIPTION   :记录心跳回忆窗体所察看的心跳曲线对应的日期
VALUE         :
OTHERS        :被函数DiayInit初始化为当前日期
==========================================================*/
DateType	g_Date;

/*全局变量声明结束#######################################全局变量声明结束*/


/*函数声明#######################################################函数声明*/
VOID		DiaryInit(VOID);
VOID		DiaryEnd(VOID);

/*主窗体相关函数*/
MWindow*	DiaryCreateWin_ALL(VOID);
VOID		DiaryALL_BG_CallBack(MDC* hDC);
VOID		DiaryInvertRect(MDC* hDC);
UINT32		DiaryALL_EV_CallBack(MView* handle, MEvent* pEvent);

/*写日记、浏览日记相关函数*/
MWindow*	DiaryCreateWin_WR(VOID);
VOID		EditInitBuf(UINT8* pBuf);
BOOL		EditSetBuf(UINT8* pBuf);
UINT16		RenewEditExChar(UINT8 *editbuf, UINT8 *databuf, UINT32 ItemAddr
							, UINT16 ItemNum, UINT8 ItemWidth);
VOID		DiaryNEW_BG_CallBack(MDC* hDC);
UINT32		DiaryNEW_EV_CallBack(MView* handle, MEvent* pEvent);
BOOL		CheckDateField(MFldEdit* hEdit);

VOID		DiaryVIEW_BG_CallBack(MDC* hDC);
UINT32		DiaryVIEW_EV_CallBack(MView* handle, MEvent* pEvent);
BOOL		ViewCmdProcess(MWindow* hWnd, MEvent* pEvent);
INT			DiaryViewSearch(MWinView* hApWnd, UINT16 wField, UINT8* const pszChar);
VOID		DiaryPringMessage(MWindow* hWnd, UINT8* hEditor
							  , MEditParam* pEditParam, UINT16 wIndex);
/*索引窗口相关函数*/
MWindow*	DiaryCreateWin_INDEX(VOID);
VOID		DiaryINDEX_BG_CallBack(MDC* hDC);
UINT32		DiaryINDEX_EV_CallBack(MView* handle, MEvent* pEvent);

/*心跳回忆相关函数*/
MWindow*	DiaryCreateWin_CURVE(VOID);
VOID		DiaryCURVE_BG_CallBack(MDC* hDC);
VOID		Draw_CoordinatesSys(MDC* hDC, MPoint* pOrigin);
VOID		Draw_Curve(MDC* hDC, MPoint* pOrigin);
VOID		Draw_Point(MDC* hDC, MPoint* pOrigin, UINT32 uDate, UINT32 uSpirit);
VOID		Draw_Point2(MDC* hDC, MPoint* pOrigin, UINT8 (*pSpiritList)[31]);
UINT32		DiaryCURVE_EV_CallBack(MView* handle, MEvent* pEvent);

/*查找窗口相关函数*/
VOID		CreateFindDialog(UINT8 *handle);
VOID		FindDialogDrawCallback(MDC *hDC);
UINT32		FindDialogHandleEvent(UINT8 *handle, MEvent *pEvent);
BOOL		DiaryCreatList(MWindow* hWnd, MRect* pRect, UINT32 dwStyle, UINT16* pIndexBuf);

/*函数声明结束###############################################函数声明结束*/



/*主函数###########################################################主函数*/
APP_DLL UINT32 GuiMain(UINT32 hInstance, UINT32 hPrev, UINT8* pCmdLine, INT nCmdShow)
{
    MWindow* hDiaryWin;
    UINT32 dwMode;

	DiaryInit();			/*初始化*/
	hDiaryWin = NULL;
	dwMode = ApGetMode();

	while (TRUE)
	{	
		switch (dwMode)
		{
		case AP_MODE_ALL:
			{
				hDiaryWin = DiaryCreateWin_ALL();
				if (NULL == hDiaryWin)
				{
					dwMode = QUIT_ERROR;
				}
				break;
			}
			
		case AP_MODE_NEW:
		case AP_MODE_VIEW:
		case AP_MODE_MODIFY:
			{
				hDiaryWin = DiaryCreateWin_WR();
				if (NULL == hDiaryWin)
				{
					dwMode = QUIT_ERROR;
				}
				break;
			}
		case AP_MODE_INDEX:
			{
				hDiaryWin = DiaryCreateWin_INDEX();
				if (NULL == hDiaryWin)
				{
					dwMode = QUIT_ERROR;
				}
				break;
			}
		case AP_MODE_CURVE:
			{
				hDiaryWin = DiaryCreateWin_CURVE();
				if (NULL == hDiaryWin)
				{
					dwMode = QUIT_ERROR;
				}
				break;
			}
		}
		if (NULL == hDiaryWin)
		{
			break;
		}

		dwMode = ApRun ((MWinView *)hDiaryWin);
		GuiDestroy ((MView *)hDiaryWin);
		ApSetMode (dwMode);
		hDiaryWin = NULL;
	}
    
	DiaryEnd();				/*关闭数据库*/
    return dwMode;
}
/*主函数结束###################################################主函数结束*/



/*函数定义#######################################################函数定义*/
/*==========================================================
FUNCTION   :DiaryInit
DESCRIPTION:初始化全局变量,打开数据库,设置工作模式
INPUTS     :
OUTPUTS    :
RETURN     :
____________________________________________________________
DATE          AUTHOR    VERSION    DESCRIBE
------------------------------------------------------------
2004-08-XX    黄  猛    Ver1.00    Create
==========================================================*/
VOID DiaryInit(VOID)
{
	UINT32 msgResult;
	HDB dbHandle;
	STATUS state;
	StructDbCreate dbCreate;
	StructDbInfo dbInfo;

	/*初始化全局变量*/
	g_PresentChoice = 1;					/*当前选择的功能,初始化为1,代表“写日记”*/
	g_DbHandle = NULL;
	g_IndexBuf = NULL;
	g_Index_BGround = NULL;
	g_IndexStatus = FALSE;
	g_PreViewRecID = 0;						/*当前浏览的日记的数据库记录ID,0表示第一条*/
	                                        /*即最近的一篇日记*/
	g_DiaryViewFont = SYSFONT_GBK16;		/*浏览日记的字体*/
	TimGetDate(&g_Date);						/*获取当前日期*/
	
	/*打开或创建数据库*/
	memcpy(&dbCreate, &DiaryDbCreate, sizeof(StructDbCreate));
	state = ApMakeDir(USER_DEFAULT_PATH);
	if (state < 0 && (state != NUF_EXIST))
	{
		ApErrorMessage(state);
		return;
	}
	FileSetCurrentDir(USER_DEFAULT_PATH);
	FileSetAttributes("日记本.DBF", ATTR_NORMAL);
	dbHandle = DbCreate(&dbCreate);
	if ((dbHandle == DB_ERR_NONE) || (dbHandle == DB_ERR_ISEXIST))
	{
		dbHandle = DbOpen(dbCreate.pDbName, DBMODE_READWRITE|DBMODE_DESCEND, 0);
	}
	if (dbHandle < 0)
	{
		ApErrorMessage(dbHandle);
		ApSetMode(QUIT_ERROR);
		return;
	}
	g_DbHandle = dbHandle;

	DbGetDbInfo(dbHandle, &dbInfo);
	if (0 != dbInfo.uRecordNum)
	{
		ApSetMode(AP_MODE_ALL);
		return;
	}
	
	/*在第一次打开日记本时提示用户写日记*/
	msgResult = MsgBoxRun(NULL, NULL, MAKE_ID(IDS_DIARY_ASKNEW)
		                  , MAKE_ID(IDS_DIARY_APNAME), MT_YESNO|MT_ICONQUESTION);
	if (QUIT_YES == msgResult)
	{
		ApSetMode(AP_MODE_NEW);
	}
	else
	{
		ApSetMode(QUIT_NORMAL);
	}
}




/*==========================================================
FUNCTION   :DiaryCreateWin_ALL
DESCRIPTION:创建主窗体
INPUTS     :
OUTPUTS    :
RETURN     :主窗体句柄
____________________________________________________________
DATE          AUTHOR    VERSION    DESCRIBE
------------------------------------------------------------
2004-08-XX    黄  猛    Ver1.00    Create
==========================================================*/
MWindow* DiaryCreateWin_ALL()
{
    MWindow*		hWnd;
    MRect			rect;
    
    GuiGetUserFullRect(&rect);
    hWnd = WindowCreate(NULL, NULL, DIARY_WND_ALL_ID
							, &rect, WS_APWINDOW|WS_TITLE
							, MAKE_ID(IDR_HELP_MAIN)
							, MAKE_ID(IDS_DIARY_TITLE_ALL)
							, NULL, NULL);
    
    ((MView*)hWnd) -> fpDrawBackGround = DiaryALL_BG_CallBack;
	((MView*)hWnd)->fpHandleEvent = DiaryALL_EV_CallBack;

	return hWnd;
}

⌨️ 快捷键说明

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