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

📄 uipersoninfolist.cpp

📁 嵌入式系统PDA的流程
💻 CPP
字号:
#include "UIPersonInfoList.h"

#include "UI_Button.h"
#include "UI_String.h"
#include "UI_Scrollbar.h"
#include "UIPersonContainer.h"

enum {
	ID_GRXXLIST_BASE	= ID_XXX_BASE + 890,

	NUM_ROWS = 5,
	NUM_STRINGS = NUM_ROWS + 2,//2 titles and NUM_ROWS "Is Read" marks
	NUM_BUTTONS = NUM_ROWS,//NUM_ROWS "Receive Time"

	ID_STRING_ISREAD= ID_GRXXLIST_BASE + 1,
	ID_STRING_READ0	= ID_STRING_ISREAD +1,
	ID_STRING_TIME	= ID_STRING_READ0 + NUM_ROWS,
	ID_BTN_TIME0	= ID_STRING_TIME + 1,
	ID_SCROLLBAR	= ID_BTN_TIME0 + NUM_ROWS
};
static struct StringInitInfo
{
	ObjectID ID;
	SHORT x, y;
	SHORT Width, Height;
	BYTE Name[10];
}Strings[NUM_STRINGS] =
{
	{ID_STRING_ISREAD,	10,	SECTIONUP_HEIGHT+2,		40,	15,	"已读否"},

	{ID_STRING_READ0,	10,	SECTIONUP_HEIGHT+20,	40,	15,	""},
	{ID_STRING_READ0+1,	10,	SECTIONUP_HEIGHT+37,	40,	15,	""},
	{ID_STRING_READ0+2,	10,	SECTIONUP_HEIGHT+54,	40,	15,	""},
	{ID_STRING_READ0+3,	10,	SECTIONUP_HEIGHT+71,	40,	15,	""},
	{ID_STRING_READ0+4,	10,	SECTIONUP_HEIGHT+88,	40,	15,	""},

	{ID_STRING_TIME,	55,	SECTIONUP_HEIGHT+2,		70,15,	"接收时间"},
};
const static struct ButtonInitInfo
{
	ObjectID ID;
	SHORT x, y;
	SHORT Width, Height;
	BYTE  Name[DBPersonInfo::RECV_TIME_LEN];
}Buttons[NUM_BUTTONS] =
{
	{ID_BTN_TIME0,	55,	SECTIONUP_HEIGHT + 20,	95,	15,	""},
	{ID_BTN_TIME0+1,55,	SECTIONUP_HEIGHT + 37,	95,	15,	""},
	{ID_BTN_TIME0+2,55,	SECTIONUP_HEIGHT + 54,	95,	15,	""},
	{ID_BTN_TIME0+3,55,	SECTIONUP_HEIGHT + 71,	95,	15,	""},
	{ID_BTN_TIME0+4,55,	SECTIONUP_HEIGHT + 88,	95,	15,	""},
};

UIPersonInfoList::UIPersonInfoList()
{
	m_IndexTopRec = 0;
}

Err UIPersonInfoList::Initialize()
{
	SHORT i;
	BOOLEAN IsNew;
	DBPersonInfo theDBPersonInfo;

	theDBPersonInfo.OpenTable(EMDB_RDONLY);
	m_CountRecs = theDBPersonInfo.GetRecCnt();
	for (i = 0; i < m_CountRecs; i++)
	{
		theDBPersonInfo.GetIsNewFlag(i, &IsNew);
		if (IsNew)
			m_IsRead[i] = FALSE;
		else
			m_IsRead[i] = TRUE;
		theDBPersonInfo.GetRecvTime(i, m_strRecvTime[i]);
	}
	theDBPersonInfo.CloseTable();

	//create strings
	for (i = 0; i < NUM_STRINGS; i++)
	{
		UI_StringInit(Strings[i].ID,
								Strings[i].x, Strings[i].y,
								Strings[i].Height, Strings[i].Width,
								(BYTE*)(Strings[i].Name),
								PDAXWT_FORM);//form id
	}
	StringSetAttribute(ID_STRING_ISREAD, TRUE,TRUE);
	StringSetAttribute(ID_STRING_TIME, TRUE,TRUE);

	//create buttons
	for (i = 0; i < NUM_BUTTONS; i++)
	{
		UI_ButtonInit2(Buttons[i].ID,
							Buttons[i].x, Buttons[i].y,
							Buttons[i].Height, Buttons[i].Width,
							(BYTE*)(Buttons[i].Name),
							PDAXWT_FORM);//form id
		UI_ButtonSetAlign(Buttons[i].ID, LEFT_ALIGN);
	}
	//create scrollbar
	if (m_IndexTopRec + NUM_ROWS > m_CountRecs)
		if (NUM_ROWS >= m_CountRecs)
			m_IndexTopRec = 0;
		else
			m_IndexTopRec = m_CountRecs - NUM_ROWS;
	if (m_CountRecs > NUM_ROWS)
	{
		UI_ScrollBarInit(ID_SCROLLBAR, 151, SECTIONUP_HEIGHT+22, 80, PDAXWT_FORM);
		ScrollbarSetScrollbar(ID_SCROLLBAR,
							m_IndexTopRec,//value
							m_CountRecs - NUM_ROWS,0,//max, min value
							NUM_ROWS, m_CountRecs);//page_size, total_num_lines
		ScrollbarSetScrollbarDrawPagesize(ID_SCROLLBAR, NUM_ROWS);
		ScrollbarSetScrollbarVisible(ID_SCROLLBAR, TRUE);
	}
	//create return button
	UISectionCenter::CreateUIObjects();

	return SUC;
}

void UIPersonInfoList::OnScrollbarClick (void)
{
	SHORT i,iNumDisplayedRows;
	//the rows that displays
	iNumDisplayedRows = (m_CountRecs - m_IndexTopRec < NUM_ROWS) ?
							(m_CountRecs - m_IndexTopRec) : NUM_ROWS;
	for (i = 0; i < iNumDisplayedRows; i++)
	{
		StringEraseString (ID_STRING_READ0 + i);
		StringSetText(ID_STRING_READ0 + i, (BYTE*)(m_IsRead[m_IndexTopRec + i] ? "是" : "否"));
		StringDrawString (ID_STRING_READ0 + i);
		//StringSetAttribute(ID_STRING_READ0 + i, FALSE,TRUE);
		ControlEraseControl (ID_BTN_TIME0 + i);
		ControlSetLabel(ID_BTN_TIME0 + i, (BYTE*)this->m_strRecvTime[m_IndexTopRec + i]);
		ControlDrawControl (ID_BTN_TIME0 + i);
		//ControlSetAttributes(ID_BTN_TIME0 + i, TRUE,FALSE,FALSE,TRUE,TRUE);
	}

	//ScrollbarDrawScrollbar (ID_SCROLLBAR);
}

void UIPersonInfoList::Show()
{
	SHORT i,iNumDisplayedRows;
	//the rows that displays
	iNumDisplayedRows = (m_CountRecs - m_IndexTopRec < NUM_ROWS) ?
							(m_CountRecs - m_IndexTopRec) : NUM_ROWS;

	StringDrawString (ID_STRING_ISREAD);
	StringDrawString (ID_STRING_TIME);

	for (i = 0; i < iNumDisplayedRows; i++)
	{
		StringSetText(ID_STRING_READ0 + i, (BYTE*)(m_IsRead[m_IndexTopRec + i] ? "是" : "否"));
		StringSetAttribute(ID_STRING_READ0 + i, FALSE,TRUE);
		ControlSetLabel(ID_BTN_TIME0 + i, (BYTE*)this->m_strRecvTime[m_IndexTopRec + i]);
		ControlSetAttributes(ID_BTN_TIME0 + i, TRUE,FALSE,FALSE,TRUE,TRUE);

		ControlDrawControl (ID_BTN_TIME0 + i);
		StringDrawString(ID_STRING_READ0 + i);
	}
	//empty rows
	for (i = iNumDisplayedRows; i < NUM_ROWS; i++)
	{
		StringSetAttribute(ID_STRING_READ0 + i, FALSE,FALSE);
		ControlSetAttributes(ID_BTN_TIME0 + i, FALSE,FALSE,FALSE,FALSE,FALSE);
	}
	//redraw the whole form
	if (m_CountRecs > NUM_ROWS)
	{
		ScrollbarDrawScrollbar (ID_SCROLLBAR);
	}
	DrawReturnButton ();
}

Err UIPersonInfoList::DestroyWindow()
{
	int i;

	for (i = 0; i < NUM_BUTTONS; i++)
	{
		//ControlEraseControl(Buttons[i].ID);
		UI_FormDeleteObject(Buttons[i].ID, PDAXWT_FORM);
	}
	for (i = 0; i < NUM_STRINGS; i++)
	{
		//StringEraseString(Strings[i].ID);
		UI_FormDeleteObject(Strings[i].ID, PDAXWT_FORM);
	}
	if (m_CountRecs > NUM_ROWS)
	{
		//ScrollbarEraseScrollbar(ID_SCROLLBAR);
		UI_FormDeleteObject(ID_SCROLLBAR, PDAXWT_FORM);
	}
	//delete return button
	UISectionCenter::DestroyUIObjects();

	return SUC;
}

BOOLEAN UIPersonInfoList::HandleEvent(EvtType* pEvent)
{
	BOOLEAN bHandled = FALSE;
	switch (pEvent->eventType)
	{
	case EVT_CONTROL_SELECT:
		switch (pEvent->eventID)
		{
		case ID_MAIN_RETURN:
			OnReturnClick();//derived from UISectionCenter
			bHandled = TRUE;
			break;
		default:
			if (pEvent->eventID>= ID_BTN_TIME0
				&& pEvent->eventID < ID_BTN_TIME0 + NUM_ROWS)
			{
				SHORT iRecID = m_IndexTopRec + (pEvent->eventID - ID_BTN_TIME0);
				if (!m_IsRead[iRecID])
				{//Mark this record "read"
					DBPersonInfo theDBPersonInfo;
					theDBPersonInfo.OpenTable(EMDB_RDWR);
					theDBPersonInfo.SetIsNewFlag(iRecID, FALSE);
					theDBPersonInfo.CloseTable();
				}
				//enter next view to desplay the content
				UISectionCenter *pPersonContainer = new UIPersonContainer(iRecID);
				DestroyWindow();
				pPersonContainer->Enter(this);
				bHandled = TRUE;
			}
		}
		break;
	case EVT_SCROLLBAR_REPEAT:
		ScrollbarDrawScrollbar (ID_SCROLLBAR);
		bHandled = TRUE;
		break;
	case EVT_SCROLLBAR_SELECT:
		m_IndexTopRec = (SHORT)pEvent->para2;//current scrollbar value
		OnScrollbarClick();
		bHandled = TRUE;
	}

	return bHandled;
}

⌨️ 快捷键说明

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