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

📄 diary.c

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




/*==========================================================
FUNCTION   :DiaryALL_BG_CallBack
DESCRIPTION:主窗体背景回调函数
INPUTS     :主窗体设备环境句柄
OUTPUTS    :
RETURN     :
____________________________________________________________
DATE          AUTHOR    VERSION    DESCRIBE
------------------------------------------------------------
2004-08-XX    黄  猛    Ver1.00    Create
==========================================================*/
VOID DiaryALL_BG_CallBack(MDC* hDC)
{
	MRect		ClientRect;
	UINT		uWidth, uHeigh;

	WindowGetClientArea((MWindow*)hDC, &ClientRect);
	GraphGetIconSize(NULL, &uWidth, &uHeigh, MAKE_ID(IDB_BACKGROUND));
	
	GraphDrawBitmap(hDC, ClientRect.x + (ClientRect.width - uWidth)/2		/*画窗口背景图*/
		               , ClientRect.y + (ClientRect.height - uHeigh)/2
					   , 0, 0, NULL, MAKE_ID(IDB_BACKGROUND));

	/*写功能选择菜单*/
    GraphDrawText(hDC, (ClientRect.x + ClientRect.width/2)
		                - 2*hDC->dcFontID
		             , ClientRect.y
					   + (ClientRect.height)/2
		             , 0, 0, NULL, " 写日记 ");
    GraphDrawLine(hDC, (ClientRect.x + ClientRect.width/2)
		               - 4*hDC->dcFontID
		             , ClientRect.y + hDC->dcFontID + 1
					   + (ClientRect.height)/2
					 , (ClientRect.x + ClientRect.width/2)
					   + 4*hDC->dcFontID
					 , ClientRect.y + hDC->dcFontID + 1
					   + (ClientRect.height)/2);	
	GraphDrawText(hDC, (ClientRect.x + ClientRect.width/2)
		               - 2*hDC->dcFontID
		             , ClientRect.y + hDC->dcFontID + hDC->dcFontID/2
					   + (ClientRect.height)/2
		             , 0, 0, NULL, "浏览日记");
	GraphDrawLine(hDC, (ClientRect.x + ClientRect.width/2)
		                - 4*hDC->dcFontID
		             , ClientRect.y + hDC->dcFontID + hDC->dcFontID/2 + hDC->dcFontID + 1
					   + (ClientRect.height)/2
					 , (ClientRect.x + ClientRect.width/2)
					   + 4*hDC->dcFontID
					 , ClientRect.y + hDC->dcFontID + hDC->dcFontID/2 + hDC->dcFontID + 1
					   + (ClientRect.height)/2);
	GraphDrawText(hDC, (ClientRect.x + ClientRect.width/2)
		               - 2*hDC->dcFontID
		             , ClientRect.y + 3*hDC->dcFontID
					   + (ClientRect.height)/2
		             , 0, 0, NULL, "心跳回忆");
	GraphDrawLine(hDC, (ClientRect.x + ClientRect.width/2)
		               - 4*hDC->dcFontID
		             , ClientRect.y + 3*hDC->dcFontID + hDC->dcFontID + 1
					   + (ClientRect.height)/2
					 , (ClientRect.x + ClientRect.width/2)
					   + 4*hDC->dcFontID
					 , ClientRect.y + 3*hDC->dcFontID + hDC->dcFontID + 1
					   + (ClientRect.height)/2);

	DiaryInvertRect(hDC);				/*显亮当前选择的功能*/
}




/*==========================================================
FUNCTION   :DiaryInvertRect
DESCRIPTION:根据用户选择的功能(由g_PresentChoice记录)反显
             其文字所对应的矩形区域
INPUTS     :
            handle:主窗体设备句柄。
			g_PresentChoice:隐式输入。
OUTPUTS    :
RETURN     :
____________________________________________________________
DATE          AUTHOR    VERSION    DESCRIBE
------------------------------------------------------------
2004-08-XX    黄  猛    Ver1.00    Create
==========================================================*/
VOID DiaryInvertRect(MDC* hDC)
{
	MRect rect;

	WindowGetClientArea((MWindow*)hDC, &rect);
	GraphInvertRect(hDC, (rect.x + rect.width/2)
		                 - 2*hDC->dcFontID
						 + ((g_PresentChoice == 1) ? hDC->dcFontID/2:0)
		               , rect.y
					     + (rect.height)/2
						 + (g_PresentChoice - 1)*(hDC->dcFontID + hDC->dcFontID/2)
						 
					   , (rect.x + rect.width/2)
						 - 2*hDC->dcFontID
						 + 4*hDC->dcFontID
						 - ((g_PresentChoice == 1) ? hDC->dcFontID/2:0)
					   , rect.y
						 + (rect.height)/2
						 + (g_PresentChoice - 1)*(hDC->dcFontID + hDC->dcFontID/2)
						 + hDC->dcFontID);
}




/*==========================================================
FUNCTION   :DiaryALL_EV_CallBack
DESCRIPTION:主窗体事件回调函数
INPUTS     :
            handle:主窗体视图句柄
			pEvent:消息实例
OUTPUTS    :
RETURN     :处理结果
____________________________________________________________
DATE          AUTHOR    VERSION    DESCRIBE
------------------------------------------------------------
2004-08-XX    黄  猛    Ver1.00    Create
==========================================================*/
UINT32 DiaryALL_EV_CallBack(MView* handle, MEvent* pEvent)
{
	switch (pEvent->dwMsgType)
	{
	case EV_KEY_DOWN:
		{
			switch (pEvent->xParam)
			{
			case  MJ_VK_UP:								/*上一个功能*/
				{	
					DiaryInvertRect((MDC*)handle);
					if (g_PresentChoice == 1)
					{
						g_PresentChoice = 3;
					}
					else
					{
						g_PresentChoice--;
					}
					DiaryInvertRect((MDC*)handle);
					return 0;
				}
			case MJ_VK_DOWN:							/*下一个功能*/
				{
					DiaryInvertRect((MDC*)handle);
					if (g_PresentChoice == 3)
					{
						g_PresentChoice = 1;
					}
					else
					{
						g_PresentChoice++;
					}
					DiaryInvertRect((MDC*)handle);
					return 0;
				}
			case MJ_VK_ENTER:							/*进入所选择的功能*/
				{
					switch (g_PresentChoice)
					{
					case 1:
						ApExit(AP_MODE_NEW);
						return 0;
					case 2:
						ApExit(AP_MODE_VIEW);
						return 0;
					case 3:
						ApExit(AP_MODE_CURVE);
						return 0;
					}
				}
			}
		}
		break;
	}
	
	return WindowHandleEvent((MWindow*)handle, pEvent);
}




/*==========================================================
FUNCTION   :DiaryCreateWin_WR
DESCRIPTION:创建写日记、浏览日记窗口
INPUTS     :
OUTPUTS    :
RETURN     :窗口句柄
____________________________________________________________
DATE          AUTHOR    VERSION    DESCRIBE
------------------------------------------------------------
2004-08-XX    黄  猛    Ver1.00    Create
==========================================================*/
MWindow* DiaryCreateWin_WR(VOID)
{
	MWindow*		hWnd;			/*窗口句柄*/
	MToolBar*		pToolBar;		/*窗口工具条*/
	UINT8*          pHelpID;		/*窗口帮助资源指针*/
	UINT8*			pTitle;			/*窗口标题*/
	MFldEdit*		hFldEdit;		/*多域编辑器句柄*/
	UINT16			wEditStyle;		/*多域编辑器风格*/
    MRect			rect;			/*窗口区域*/
	UINT8*			pBuf;			/*多域编辑器编辑缓冲区*/
	MEditParam*		pParam;			/*多域编辑器创建参数结构数组*/
	UINT16			iFont;			/*多域编辑器字体*/

	pParam = (MEditParam*)pFieldEditParam;
    GuiGetUserFullRect(&rect);

	/*初始化窗体创建参数*/
	switch (ApGetMode())
	{
	case AP_MODE_NEW:			/*写日记*/
	case AP_MODE_MODIFY:		/*修改日记*/
		{
			pTitle = (UINT8*)IDS_DIARY_TITLE_NEW;
			wEditStyle = EDS_MULTILINE|EDS_HORZCURSOR|EDS_LINETHREAD;
			pHelpID = (UINT8*)IDR_HELP_WRITE;
			pToolBar = NULL;
			iFont = SYSFONT_GBK16;
		}
		break;
	case AP_MODE_VIEW:			/*浏览日记*/
		{
			if (NULL == g_IndexBuf)
			{
				pTitle = (UINT8*)IDS_DIARY_TITLE_VIEW;
				pHelpID = (UINT8*)IDR_HELP_VIEW;
				pToolBar = (MToolBar*)Diary_View_ToolBar;
			}
			else
			{
				pTitle = (UINT8*)IDS_DIARY_TITLE_INDEX_VIEW;
				pHelpID = (UINT8*)IDR_HELP_INDEXVIEW;
				pToolBar = (MToolBar*)Diary_Index_ToolBar;
			}			
			wEditStyle = EDS_MULTILINE|EDS_HORZCURSOR|EDS_READONLY;			
			iFont = g_DiaryViewFont;
		}
		break;
	}
	hWnd = WindowCreate(NULL, NULL, DIARY_WND_NEW_ID
						, &rect, WS_APWINDOW|WS_TITLE
						, pHelpID, pTitle, NULL, pToolBar);
	if (NULL == hWnd)
	{
		SysWatchHotReset(SYS_INIT_RESET);
	}

	/*申请多域编辑器缓冲区*/
	pBuf = MemAlloc(AP_MAX_EDITLEN);
	if (NULL == pBuf)
	{
		SysWatchHotReset(SYS_INIT_RESET);

	}
	memset(pBuf, 0, AP_MAX_EDITLEN);

	/*初始化编辑器缓冲区*/
	switch (ApGetMode())
	{
	case AP_MODE_NEW:			/*写日记模式*/
		EditInitBuf(pBuf);
		break;
	case AP_MODE_VIEW:			/*浏览日记模式*/
	case AP_MODE_MODIFY:		/*修改日记模式*/
		if (!EditSetBuf(pBuf))
		{
			MemFree(pBuf);
			SysWatchHotReset(SYS_INIT_RESET);
		}
		break;
	}

	/*在创建的窗体中创建编辑器*/
	memset(&rect, 0, sizeof(MRect));
	WindowGetClientArea(hWnd, &rect);
	rect.height--;
    hFldEdit = FldEditCreate((MView*)hWnd, NULL, DIARY_EDIT_NEW_ID
							 , &rect, SYSFONT_GBK16, wEditStyle, pBuf
							 , AP_MAX_EDITLEN, ROWSPACE, INDENT, FIELD_NUM, pParam);
	if (NULL == hFldEdit)
	{
		MemFree(pBuf);
		SysWatchHotReset(SYS_INIT_RESET);
	}

	/*指定消息处理函数*/
	switch(ApGetMode())
	{
	case AP_MODE_NEW:
	case AP_MODE_MODIFY:
		((MView*)hWnd) -> fpDrawBackGround = DiaryNEW_BG_CallBack;
		((MView*)hWnd) -> fpHandleEvent = DiaryNEW_EV_CallBack;
		break;
	case AP_MODE_VIEW:
		((MView*)hWnd) -> fpDrawBackGround = DiaryVIEW_BG_CallBack;
		((MView*)hWnd) -> fpHandleEvent = DiaryVIEW_EV_CallBack;
		break;
	}
	
	return hWnd;
}




/*==========================================================
FUNCTION   :EditInitBuf
DESCRIPTION:初始化写日记窗体的编辑器的缓冲区(写新日记模式下)
INPUTS     :
            pBuf:指向编辑器的编辑缓冲区。
OUTPUTS    :
RETURN     :
____________________________________________________________
DATE          AUTHOR    VERSION    DESCRIBE
------------------------------------------------------------
2004-08-XX    黄  猛    Ver1.00    Create
==========================================================*/
VOID EditInitBuf(UINT8* pBuf)
{
    struct EditTail
	{
		UINT16 Serial_Num;
		UINT16 Class_Num;
		UINT32 Class_Addr;
		UINT32 Default_Class;
	}EditTailTmp;
	DateType date;
	MEdExtraCharHead EditHeadTmp;
	UINT8* pCurBuf = pBuf;

	EditHeadTmp.byFlag = CHAR_EXTRA;
	EditHeadTmp.byReserve = NULL;
	EditHeadTmp.wMemLen = sizeof(MEdExtraCharHead)+2*(sizeof(UINT16)+sizeof(UINT32));
	EditHeadTmp.byWidth = 7;
	EditHeadTmp.byHeight = 1;
	EditHeadTmp.wCharType = EDITALLOW_CLASS;
	EditHeadTmp.fpExtraFunc = ListExtraCharHandle;

	/*初始化日期域*/
	TimGetDate(&date);
	sprintf(pCurBuf, "%d-%02d-%02d", date.dateYear		/*将当前日期的格式化字符串写入缓冲区*/
	        , date.dateMonth, date.dateDay);			/*作为默认日期*/
	pCurBuf += 10;

	/*插入与分隔符*/
	*pCurBuf = 0x2;
	pCurBuf++;
	
	/*初始化心情域*/
	{
		EditTailTmp.Serial_Num = 2;									/*该域默认类别的序号*/
		EditTailTmp.Class_Num = SPIRIT_NUM;							/*该域最多的类别数*/
		EditTailTmp.Class_Addr = (UINT32)&DiaryClass_Spirit[0];		/*该域的类别存储地址*/
		EditTailTmp.Default_Class = (UINT32)DiaryClass_Spirit[2];	/*该域的默认类别名*/
		
		memcpy(pCurBuf, &EditHeadTmp, sizeof(MEdExtraCharHead));
		pCurBuf += sizeof(MEdExtraCharHead);
		memcpy(pCurBuf, &EditTailTmp, sizeof(struct EditTail));
		pCurBuf += sizeof(struct EditTail);
				
	}

	/*插入与分隔符*/
	*pCurBuf = 0x2;
	pCurBuf++;

	/*初始化天气域*/
	{
		EditTailTmp.Serial_Num = 2;
		EditTailTmp.Class_Num = WEATHER_NUM;
		EditTailTmp.Class_Addr = (UINT32)&DiaryClass_Weather[0];
		EditTailTmp.Default_Class = (UINT32)DiaryClass_Weather[2];
		
		memcpy(pCurBuf, &EditHeadTmp, sizeof(MEdExtraCharHead));
		pCurBuf += sizeof(MEdExtraCharHead);
		memcpy(pCurBuf, &EditTailTmp, sizeof(struct EditTail));
		pCurBuf += sizeof(struct EditTail);
		
  }

	/*初始化内容域*/
	*pCurBuf = 0x2;
	pCurBuf++;
}



/*==========================================================
FUNCTION   :EditSetBuf
DESCRIPTION:初始化浏览日记记窗体的编辑器的缓冲区
             或者初始化写日记窗体编辑器的缓冲区(修改日记模式)
INPUTS     :
            pBuf:指向编辑器的编辑缓冲区。
			g_PreViewRecID:隐式输入。
OUTPUTS    :
RETURN     :设置成功标志
____________________________________________________________
DATE          AUTHOR    VERSION    DESCRIBE
------------------------------------------------------------
2004-08-XX    黄  猛    Ver1.00    Create
==========================================================*/
BOOL EditSetBuf(UINT8* pBuf)
{
    INT             nCurFld;    /*域处理循环变量*/
    INT             nFldCnt;    /*通讯录域的总数*/
    StructDbData    sDbData;	/*数据库记录数据结构,暂存欲浏览、修改的记录的数据*/
    UINT8*          pRecBufr;   /*记录数结构的数据缓冲区*/
    UINT8*          pSrc;	
    UINT8*          pDst     = pBuf;
//    MEditParam*     pCurArgs = pEditArgs;

    /*申请记录缓冲区*/
    pRecBufr = MemAlloc(AP_MAX_EDITLEN);
    if (NULL == pRecBufr)
    {
        MsgBoxRun(NULL, NULL, (UINT8*)IDS_DIARY_MEMORY_FULL, 
                  MAKE_ID(IDS_DIARY_TITLE_VIEW),MT_OK|MT_ICONINFO);
        return FALSE;
    }
	
    /*将选定记录数据读到缓冲区内*/
    sDbData.pBuf = pRecBufr;
    DbRecordRead(g_DbHandle,&sDbData, g_PreViewRecID, -1);
	
    /*得到域的总数*/
    nFldCnt  = sizeof(pFieldEditParam) / sizeof(MEditParam);
    pSrc     = pRecBufr;

	/*将记录中的数据读入编辑器缓冲区各个编辑域*/
    for (nCurFld = 0; nCurFld < nFldCnt; nCurFld++)
    {
		/*填充扩展域*/
        if (1 == nCurFld || 2 == nCurFld)
        {
			/*填充心情域*/
			if (1 == nCurFld)
			{
				RenewEditExChar(pDst,pSrc,(UINT32)&DiaryClass_Spirit[0], 
				                SPIRIT_NUM, 7);
			}
			/*填充天气域*/
			else
			{
				RenewEditExChar(pDst,pSrc,(UINT32)&DiaryClass_Weather[0], 

⌨️ 快捷键说明

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