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

📄 diary.c

📁 名人E+E118的应用程序源码
💻 C
📖 第 1 页 / 共 5 页
字号:
					            WEATHER_NUM, 7);
			}
			pSrc += sDbData.uFieldLen[nCurFld];
			
            pDst += sizeof(MEdExtraCharHead) + 2*(sizeof(UINT16) + sizeof(UINT32));
            *pDst = FIELD_SEPARATOR;
			pDst++;
        }

		/*填充普通域*/
        else
        {
            memmove(pDst, pSrc,	sDbData.uFieldLen[nCurFld]);
            pDst += sDbData.uFieldLen[nCurFld];
            pSrc += sDbData.uFieldLen[nCurFld];
        }
    }

    MemFree(pRecBufr);
    return TRUE;
}



/*==========================================================
FUNCTION   :RenewEditExChar
DESCRIPTION:将数据库记录中的扩展字符串数据恢复到编辑器的缓冲
INPUTS     :
            editbuf:编辑器缓冲区指针
			databuf:扩展字符串数据指针
			ItemAddr:扩展字符串的类别数组指针
			ItemNum:扩展字符串的类别数
			ItemWidth:扩展字符串的宽度
OUTPUTS    :
RETURN     :写入编辑器缓冲区的字节数
____________________________________________________________
DATE          AUTHOR    VERSION    DESCRIBE
------------------------------------------------------------
2004-08-XX    黄  猛    Ver1.00    Create
==========================================================*/
UINT16 RenewEditExChar(UINT8 *editbuf, UINT8 *databuf, UINT32 ItemAddr, UINT16 ItemNum, UINT8 ItemWidth)
{
	MEdExtraCharHead TypeExtraStr;
	UINT16 i,ItemLen;
	UINT32 ItemStrAddr;
	UINT8 *tmpaddr,findflag;
	UINT8 tmpstr[20];
	UINT32 tmpdata;
	
	memmove(tmpstr,databuf,19);
	tmpaddr = editbuf;
	
	TypeExtraStr.byFlag = CHAR_EXTRA;
	TypeExtraStr.wMemLen = sizeof(MEdExtraCharHead) + 12;
	TypeExtraStr.byWidth = ItemWidth;
	TypeExtraStr.byHeight = 1;
	TypeExtraStr.wCharType = EDITALLOW_CLASS;
	TypeExtraStr.fpExtraFunc = ListExtraCharHandle;
	ItemStrAddr = ItemAddr;
	findflag = 0;
	
	for (i = 0; i < ItemNum; i++)
	{
		tmpdata = *(UINT32 *)ItemStrAddr;
		ItemLen = (UINT16)strlen((UINT8 *)tmpdata);
		if (memcmp((UINT8 *)tmpdata,tmpstr,ItemLen) == 0)
		{
			findflag = 1;
			TypeExtraStr.byWidth = ItemLen + 3;
			break;
		}
		ItemStrAddr += 4;
	}
	
	memmove(tmpaddr,(UINT8 *)&TypeExtraStr,sizeof(MEdExtraCharHead));
	tmpaddr += sizeof(MEdExtraCharHead);
	
	if (findflag)
	{
		memcpy(tmpaddr, &i, sizeof(UINT16));
	}
	else 
	{
		i = 0;
		memcpy(tmpaddr, &i, sizeof(UINT16));
	}
	
	tmpaddr += 2;
	memcpy(tmpaddr, &ItemNum, sizeof(UINT16));
	tmpaddr += 2;
	memcpy(tmpaddr, &ItemAddr, sizeof(UINT32));
	tmpaddr += 4;
	
	if (findflag)
	{
		memcpy(tmpaddr, &tmpdata, sizeof(UINT32));
	}
	else
	{
		memcpy(tmpaddr, (UINT8*)ItemAddr, sizeof(UINT32));
	}
	
	return (sizeof(MEdExtraCharHead)+12);
}




/*==========================================================
FUNCTION   :DiaryNEW_BG_CallBack
DESCRIPTION:写日记窗体的背景回调函数
INPUTS     :
            hDC:窗口句柄
OUTPUTS    :
RETURN     :
____________________________________________________________
DATE          AUTHOR    VERSION    DESCRIBE
------------------------------------------------------------
2004-08-XX    黄  猛    Ver1.00    Create
==========================================================*/
VOID DiaryNEW_BG_CallBack(MDC* hDC)
{
	MRect	rc;
	MDC		dc;
	MInputME	mime = {0};
	
	WindowGetClientArea((MWindow*)hDC, &rc);
	GraphInitialDC(&dc);
	dc.dcX		= rc.x;
	dc.dcY		= rc.y;
	dc.dcWidth  = rc.width;
	dc.dcHeight = rc.height;

	/*设置输入法*/
	mime.uType = ImeGetCurrent((MWinView*)hDC);
	ImeGetInfo(&mime);
}




/*==========================================================
FUNCTION   :DiaryNEW_BG_CallBack
DESCRIPTION:浏览日记窗体的背景回调函数
INPUTS     :
            hDC:窗口句柄
OUTPUTS    :
RETURN     :
____________________________________________________________
DATE          AUTHOR    VERSION    DESCRIBE
------------------------------------------------------------
2004-08-XX    黄  猛    Ver1.00    Create
==========================================================*/
VOID DiaryVIEW_BG_CallBack(MDC* hDC)
{
	MRect	rc;
	MDC		dc;
	MInputME	mime = {0};
	
	WindowGetClientArea((MWindow*)hDC, &rc);
	GraphInitialDC(&dc);
	dc.dcX		= rc.x;
	dc.dcY		= rc.y;
	dc.dcWidth  = rc.width;
	dc.dcHeight = rc.height;

	/*设置输入法*/
	mime.uType = ImeGetCurrent((MWinView*)hDC);
	ImeGetInfo(&mime);
}




/*==========================================================
FUNCTION   :DiaryNEW_BG_CallBack
DESCRIPTION:写日记窗体的事件回调函数
INPUTS     :
            hDC:窗口句柄
			g_DbHandle:数据库句柄,隐式输入。
OUTPUTS    :
RETURN     :处理结果
____________________________________________________________
DATE          AUTHOR    VERSION    DESCRIBE
------------------------------------------------------------
2004-08-XX    黄  猛    Ver1.00    Create
==========================================================*/
UINT32 DiaryNEW_EV_CallBack(MView* handle, MEvent* pEvent)
{
	MWindow*	hWnd;
    MEdit*		hEdit;
    UINT8*		pEdtBufr;
    UINT32		dwRet;
    BOOL		bChged;			/*编辑器改变标志*/
    STATUS		status;			/*数据库操作返回值*/
    hWnd = (MWindow*)handle;

	switch(pEvent->dwMsgType)
    {
    case EV_QUIT:
		{
			StructDbInfo	dbInfo;
			UINT8			pSearchBuf[11];			/*要查找的字符串(日期)*/
			UINT16			wPreRecIdTmp = g_PreViewRecID;			/*暂存当前记录ID*/
			
			status		= -1;
			hEdit		= (MEdit*)GetHandleFromID((MView*)hWnd, DIARY_EDIT_NEW_ID);
			bChged		= EditIsModified(hEdit);
			pEdtBufr	= FldEditGetFldPtr((MFldEdit*)hEdit, KEYFIELD);

			memset(pSearchBuf, 0, 11);
			memcpy(pSearchBuf, pEdtBufr, 10);
			DbGetDbInfo(g_DbHandle, &dbInfo);		

			/*检查日记本是否已写满*/
			if (AP_MODE_NEW == ApGetMode() && DB_MAX_RECORDNUM <= dbInfo.uRecordNum)
			{
				MsgBoxRun((MWinView*)handle, NULL, MAKE_ID(IDS_DIARY_DBFULL)
					, MAKE_ID(IDS_DIARY_TITLE_NEW), MT_OK|MT_ICONINFO);
				ApExit(AP_MODE_ALL);
				return QUIT_NORMAL;
			}

			/*消息处理*/
			switch(pEvent->xParam)
			{
			/*关机退出消息*/
			case QUIT_POWEROFF:	
				if (bChged && CheckDateField((MFldEdit*)hEdit))
				{
					/*数据被修改并且日期域的数据格式和日期范围合法*/
					switch (ApGetMode())
					{
					case AP_MODE_NEW:
						if(DiaryViewSearch((MWinView*)handle, 0, pSearchBuf) > 0)
						{
							/*该片日记已存在,直接覆盖*/
							ApSetMode(AP_MODE_MODIFY);
							ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
							ApSetMode(AP_MODE_NEW);
						}
						else
						{
							/*该片日记不存在,直接存储*/
							ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
						}
						break;

					case AP_MODE_MODIFY:
						{
							if(DiaryViewSearch((MWinView*)handle, 0, pSearchBuf) > 0)
							{
								/*该片日记已存在*/
								if (g_PreViewRecID == wPreRecIdTmp)
								{
									/*日期未被修改,直接覆盖,保存修改*/
									ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
								}
								else
								{
									/*被修改日记的已被修改为另外一篇已存在的日记,直接覆盖*/
									dwRet = MT_OK;			//MsgBoxRun();
									if (MT_OK == dwRet)
									{
										ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);									
									}
									else
									{
										
									}
									g_PreViewRecID = wPreRecIdTmp;		/*回复原“当前记录ID”*/
								}
							}
							else
							{
								/*被修改的日记被修改为另外一篇日记,直接保存*/
								dwRet = MT_OK;				//MsgBoxRun();
								if (MT_OK == dwRet)
								{
									ApSetMode(AP_MODE_NEW);
									ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
									ApSetMode(AP_MODE_MODIFY);
								}
								else
								{
								}
							}
						}
					}
				}
				return QUIT_DESKTOP;

			/*正常退出*/
			case QUIT_HOTKEY:
			case QUIT_NORMAL:
				if (bChged)				            
				{
					/*用户有过修改操作*/
					UINT16	wMsgRet;
					UINT8*	pAskStr = (UINT8*)IDS_DIARY_SAVE_NEW;
					if (AP_MODE_MODIFY == ApGetMode())
					{
						pAskStr = (UINT8*)IDS_DIARY_SAVE_MODIFY;
					}
					wMsgRet = MsgBoxRun((MWinView*)hWnd, DIARY_MSGBOX_SAVE		/*询问是否保存*/
						                , pAskStr
									    , MAKE_ID(IDS_DIARY_TITLE_NEW)
									    , MT_YESNOCANCEL|MT_ICONQUESTION );

					if (QUIT_POWEROFF == wMsgRet)
					{
						/*用户直接关机,得到关机消息,处理同前面关机处理*/
						if (CheckDateField((MFldEdit*)hEdit))
						{
							switch (ApGetMode())
							{
							case AP_MODE_NEW:
								if(DiaryViewSearch((MWinView*)handle, 0, pSearchBuf) > 0)
								{
									ApSetMode(AP_MODE_MODIFY);
									ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
									ApSetMode(AP_MODE_NEW);
								}
								else
								{
									ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
								}
								break;
							case AP_MODE_MODIFY:
								{
									if(DiaryViewSearch((MWinView*)handle, 0, pSearchBuf) > 0)
									{
										if (g_PreViewRecID == wPreRecIdTmp)
										{
											ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
										}
										else
										{
											dwRet = MT_OK;			//MsgBoxRun();
											if (MT_OK == dwRet)
											{
												ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);									
											}
											else
											{
												
											}
											g_PreViewRecID = wPreRecIdTmp;
										}
									}
									else
									{
										dwRet = MT_OK;				//MsgBoxRun();
										if (MT_OK == dwRet)
										{
											ApSetMode(AP_MODE_NEW);
											ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
											ApSetMode(AP_MODE_MODIFY);
										}
										else
										{
										}
									}
								}
							}
						}
						return QUIT_DESKTOP;
					}
					else if (QUIT_YES == wMsgRet)
					{
						/*用户同意存储,检查日期域*/
						if (!CheckDateField((MFldEdit*)hEdit))
						{
							/*未输入日期或者日期格式不对*/
							MsgBoxRun((MWinView*)handle, NULL, MAKE_ID(IDS_DIARY_DATE_FORMAT)
								, MAKE_ID(IDS_DIARY_TITLE_NEW)
								, MT_OK|MT_ICONINFO);
							FldEditSetCurrentFld((MFldEdit*)hEdit, KEYFIELD);								
							return QUIT_ABORT;
						}
						else
						{
							/*日期域正常,正常存储*/
							switch (ApGetMode())
							{
							case AP_MODE_NEW:
								if(DiaryViewSearch((MWinView*)handle, 0, pSearchBuf) > 0)
								{
									/*日记已存在,询问是否覆盖*/
									dwRet = MsgBoxRun((MWinView*)handle
										              , NULL,MAKE_ID(IDS_DIARY_IS_EXIST)
													  ,MAKE_ID(IDS_DIARY_TITLE_NEW)
													  ,MT_YESNO|MT_ICONINFO);
									if (QUIT_YES == dwRet || QUIT_POWEROFF == dwRet)
									{
										/*同意覆盖*/
										ApSetMode(AP_MODE_MODIFY);
										status = ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
										ApSetMode(AP_MODE_NEW);
										g_PreViewRecID = wPreRecIdTmp;		/*恢复当前记录ID*/

										if (QUIT_POWEROFF == dwRet)
										{
											return QUIT_DESKTOP;
										}
									}
									else
									{
										/*取消覆盖,返回程序继续执行*/
										g_PreViewRecID = wPreRecIdTmp;
										return QUIT_ABORT;
									}
								}
								else
								{
								    /*新日记直接存储*/
									status = ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
								}
								break;

							case AP_MODE_MODIFY:
								{
									if(DiaryViewSearch((MWinView*)handle, 0, pSearchBuf) > 0)
									{
										/*被修改日记被修改为另一篇日记*/
										if (g_PreViewRecID == wPreRecIdTmp)
										{
											/*日期未被修改,直接保存所作的修改*/
											status = ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
										}
										else
										{
											/*被修改成另一篇已存在的日记,询问覆盖*/
											dwRet = MsgBoxRun((MWinView*)handle, NULL
												              ,MAKE_ID(IDS_DIARY_MODIFY_EXIST)
															  ,MAKE_ID(IDS_DIARY_TITLE_NEW)
															  , MT_YESNO|MT_ICONINFO);
											if (QUIT_YES == dwRet || QUIT_POWEROFF == dwRet)
											{
												/*覆盖*/
												status = ApSaveItem(g_DbHandle, pEdtBufr, g_PreViewRecID);
												g_PreViewRecID = wPreRecIdTmp;		/*恢复当前记录ID*/
												if (QUIT_POWEROFF == dwRet)
												{
													return QUIT_DESKTOP;
												}
											}
											else
											{
												/*取消覆盖*/
												g_PreViewRecID = wPreRecIdTmp;

⌨️ 快捷键说明

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