📄 uipersoninfolist.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 + -