📄 disphistory.c
字号:
// RRDrawTime(hmemDC,0, 560-128+68,320);
//RRDrawTime(hmemDC,128, 560-128*2+68,320);
//显示标尺线
SetPenColor(hmemDC,PIXEL_red);
MoveTo(hmemDC,guage_x,40);
LineTo(hmemDC,guage_x,360);
}
//
void InitHistDlg(HWND hDlg)
{
int i;
unsigned char str[5];
int id;
int firsttime;
int lasttime;
long time;
time=86400;
//默认为历史显示1天(86400秒)的数据为
channel_hist=(CHANNALHIST* )malloc(32*sizeof(CHANNALHIST));
for (id=0;id<gchannum;id++)
{
channel_hist[id].record=(STRURECORD *)malloc(20*sizeof(STRURECORD));
bzero(channel_hist[id].point,sizeof(channel_hist[id].point));
strcpy(channel_hist[id].name,channel_conf[id].name);
strcpy(channel_hist[id].unit,channel_conf[id].unit);
strcpy(channel_hist[id].data,channel_disp[id].data);
channel_hist[id].guage_x=560;
}
}
/*
窗口处理函数
*/
int HistoryDialogProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
HDC hmemDC;
int index; //时间对应的文件中数据点的索引
char dis[20];
static RECT rect;
static int guage_x;
static BOOL bFresh=0;
gal_pixel bar_back_color,bar_rect_color,bar_text_color;
int id ;
id= LOWORD (wParam);
switch (message)
{
case MSG_INITDIALOG:
//建立文件(已经含有首次索引的建立)
InitHistDlg( hDlg);
end_sec=GetSeconds(hDlg);
start_sec=end_sec-560/histzoom;
ReadHisData(1,start_sec,end_sec);
hist_dot_seco=end_sec;
SetTimer(hDlg,_ID_TIMER_HIST,100);
return 1;
case MSG_SHOWWINDOW:
break;
case MSG_DESTROY :
DestroyAllControls(hDlg);
KillTimer(hDlg,_ID_TIMER_HIST);
break;
case MSG_TIMER:
//InvalidateRect (hDlg, NULL, TRUE);
break;
case MSG_READRECORD:
sprintf(topinfo,"历史%2d/%2d/%2d",year,mont,days);
SecondsToTime(start_sec);
printf("MSG_READRECORD: ");
// ReadHisData(1,11111, 112222 );
InvalidateRect(hDlg,NULL,TRUE);
break;
case MSG_PAINT:
hdc = BeginPaint(hDlg);
hmemDC=CreateCompatibleDC(hdc);
bar_back_color=PIXEL_black;//背景
bar_rect_color=RGB2Pixel(hmemDC,0,0,255);//边框颜色
bar_text_color=PIXEL_lightwhite;//RGB2Pixel(hmemDC,0,0,255);//文字颜色
SetBrushColor(hmemDC,bar_back_color);//lightwhite
SetBkMode(hmemDC,BM_TRANSPARENT);//? SetBkMode
FillBox(hmemDC,0,0,WIDTH-LEFT,HEIGHT-TOP-BOTTOM);
SetBkMode(hmemDC,BM_TRANSPARENT);
DrawHistoryline (hmemDC,0 ,6,0,0,640-80,400);//,PandectDataStruct *channel_disp)
DrawHistCurve (hmemDC,0 ,6,0,0,560,400);//,PandectDataStruct *channel_disp)
BitBlt(hmemDC,0,0,WIDTH-LEFT,HEIGHT-TOP-BOTTOM,hdc,LEFT,0,0);
DeleteCompatibleDC(hmemDC);
//----------------------------------
//重新更新TOP栏目,TEST
// dis=SecondsToTime(start_sec);
//printf("/n%s/n",dis);
// sprintf(topinfo,"历史%s", dis);
EndPaint(hDlg,hdc);
return 0;
case MSG_COMMAND:
{
if(id==HIST_UP) // 上一时刻
{
printf("histtory up button is pressed/n");
SetRect (&rect, 80,0,640,400);
InvalidateRect (hDlg, &rect, FALSE);
}
if(id==HIST_DOWN) // 下一时刻
{
SetRect (&rect, 80,0,640,400);
InvalidateRect (hDlg, &rect, FALSE);
}
if(id==HIST_ZOOM)
{
histzoom=histzoom*2;
}
if(id==HIST_DBACK)
{
gdisp_mode=last_mode;
EndDialog (hDlg, 0);
}
if(id==HIST_BUTTON_DOWN) //下载按键
{
} if(id==HIST_BUTTON_SEARCH) //下载按键
{
//恢复下面按钮的功能显示
// SetDlgItemText(hDlg, HIST_ZOOM," " );
// SetDlgItemText(hDlg, HIST_DBACK," " );
SetDlgItemText(hDlg, HIST_BUTTON_DOWN," " );
SetDlgItemText(hDlg, HIST_BUTTON_CLEA," " );
SetDlgItemText(hDlg, HIST_BUTTON_OPER," " );
SetDlgItemText(hDlg, HIST_BUTTON_CONF," " );
SetDlgItemText(hDlg, HIST_BUTTON_SHUT,"取消\nESC" );
SetDlgItemText(hDlg, HIST_BUTTON_SEARCH,"查询\nF7" );
}
}
break;
case MSG_KEYDOWN:
if(!keydowned)
{
if(id==KEY_LEFT)SendDlgItemMessage(hDlg, HIST_LEFT, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_RIGHT)SendDlgItemMessage(hDlg, HIST_RIGHT, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_UP)SendDlgItemMessage(hDlg, HIST_UP, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_DOWN)SendDlgItemMessage(hDlg, HIST_DOWN, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_ENTER)SendDlgItemMessage(hDlg, HIST_ZOOM, BM_SETSTATE, BST_PUSHED,0);
if(id==KEY_EXIT)SendDlgItemMessage(hDlg, HIST_DBACK, BM_SETSTATE, BST_PUSHED,0);
if(id==KEY_DOWNLOAD)SendMessage (GetDlgItem(hDlg,HIST_BUTTON_DOWN),BM_SETSTATE,BST_PUSHED,0);
if(id==KEY_CLEAR)SendMessage (GetDlgItem(hDlg,HIST_BUTTON_CLEA),BM_SETSTATE,BST_PUSHED,0);
if(id==KEY_OPERATE)SendMessage (GetDlgItem(hDlg,HIST_BUTTON_OPER),BM_SETSTATE,BST_PUSHED,0);
if(id==KEY_CONF)SendMessage (GetDlgItem(hDlg,HIST_BUTTON_CONF),BM_SETSTATE,BST_PUSHED,0);
if(id==KEY_SEARCH)SendMessage (GetDlgItem(hDlg,HIST_BUTTON_SEARCH),BM_SETSTATE,BST_PUSHED,0);
if(id==KEY_SHUT)SendMessage (GetDlgItem(hDlg,HIST_BUTTON_SHUT),BM_SETSTATE,BST_PUSHED,0);
keydowned=1;
}
break;
case MSG_KEYUP:
keydowned=0;
if(id==KEY_DOWNLOAD)SendMessage (GetDlgItem(hDlg,HIST_BUTTON_DOWN),BM_SETSTATE,0,0);
if(id==KEY_CLEAR)SendMessage (GetDlgItem(hDlg,HIST_BUTTON_CLEA),BM_SETSTATE,0,0);
if(id==KEY_OPERATE)SendMessage (GetDlgItem(hDlg,HIST_BUTTON_OPER),BM_SETSTATE,0,0);
if(id==KEY_CONF)SendMessage (GetDlgItem(hDlg,HIST_BUTTON_CONF),BM_SETSTATE,0,0);
if(id==KEY_SEARCH)SendMessage (GetDlgItem(hDlg,HIST_BUTTON_SEARCH),BM_SETSTATE,0,0);
if(id==KEY_SHUT)SendMessage (GetDlgItem(hDlg,HIST_BUTTON_SHUT),BM_SETSTATE,0,0);
if(id==KEY_EXIT)
{
SendDlgItemMessage(hDlg, HIST_DBACK, BM_SETSTATE, 0,0);
EndDialog (hDlg, 0);
}
if(id==KEY_LEFT) // 上一时刻
{
GetDistance( 0);
SendDlgItemMessage(hDlg, HIST_LEFT, MSG_LBUTTONUP, 0,0);
bFresh=1;
//SendMessage(GetHosting(hDlg),MSG_READRECORD,0,0);
SetRect (&rect, 80,0,640,400);
InvalidateRect (hDlg, &rect, FALSE);
}
if(id==KEY_RIGHT) // 下一时刻
{
//根据现在guageline象素位置得到INTERVAL
GetDistance(1);
//SecondsToTime(1111);
bFresh=1;
SetRect (&rect, 80,0,640,400);
InvalidateRect (hDlg, &rect, FALSE);
SendDlgItemMessage(hDlg, HIST_RIGHT, MSG_LBUTTONUP, 0,0);
}
if(id==KEY_UP) //上一时间段
{
SendDlgItemMessage(hDlg, HIST_UP, MSG_LBUTTONUP, 0,0);
end_sec=start_sec;
start_sec=end_sec-560/(histzoom);
ReadHisData(1,start_sec,end_sec);
bFresh=1;
SetRect (&rect, 80,0,640,400);
InvalidateRect (hDlg, &rect, FALSE);
}
if(id==KEY_DOWN) //上一时间段
{
SendDlgItemMessage(hDlg, HIST_DOWN, MSG_LBUTTONUP, 0,0);
start_sec=end_sec;
end_sec=start_sec+560/(histzoom);
if(end_sec>nowseconds)
{
end_sec=nowseconds;
start_sec=end_sec-560/(histzoom);
}
ReadHisData(1,start_sec,end_sec);
bFresh=1;
SetRect (&rect, 80,0,640,400);
InvalidateRect (hDlg, &rect, FALSE);
}
if(id==KEY_ENTER) //enter键,缩放功能
{
SendDlgItemMessage(hDlg, HIST_ZOOM, BM_SETSTATE, 0,0);
histzoom=histzoom*2;
if(histzoom>16)histzoom=1;
//重新计算开始显示的时间
start_sec=end_sec-560/histzoom;
bFresh=1;
SetRect (&rect, 80,0,640,400);
InvalidateRect (hDlg, &rect, FALSE);
}
//处理底端按键的程序
ScanBottomKey( hDlg ,id );
//增加
if(id==KEY_SEARCH)
{
SendMessage (GetDlgItem(hDlg,HIST_BUTTON_SEARCH),BM_SETSTATE,0,0);
//改变下面按钮的功能显示
//SetDlgItemText(hDlg, HIST_ZOOM," " );
//SetDlgItemText(hDlg, HIST_DBACK," " );
SetDlgItemText(hDlg, HIST_BUTTON_DOWN," " );
SetDlgItemText(hDlg, HIST_BUTTON_CLEA," " );
SetDlgItemText(hDlg, HIST_BUTTON_OPER," " );
SetDlgItemText(hDlg, HIST_BUTTON_CONF," " );
SetDlgItemText(hDlg, HIST_BUTTON_SHUT,"取消\nESC" );
SetDlgItemText(hDlg, HIST_BUTTON_SEARCH,"查询\nF7" );
HistSearchDlg ( hDlg);
}
break;
case MSG_CLOSE:
EndDialog (hDlg, 0);
break;
}
return DefaultDialogProc (hDlg, message, wParam, lParam);
}
/*
历史显示页面对话框
*/
void HistoryDlg (HWND hWnd)
{
Dlg_history.controls = ctrl_history;
DialogBoxIndirectParam (&Dlg_history, hWnd, HistoryDialogProc, 0L);
}
//
void InitSearchDlg(HWND hDlg)
{ int i;
unsigned char str[5];
int id;
int firsttime;
int lasttime;
long time;
//init the dlg
for (i=0;i<=(year-2000);i++){
sprintf(str,"%04d",2000+i);
SendDlgItemMessage(hDlg,HIST_YEAR,CB_ADDSTRING,0,(LPARAM)str);
}
for (i=0;i<=12;i++){
sprintf(str,"%02d",i);
SendDlgItemMessage(hDlg,HIST_MONT,CB_ADDSTRING,0,(LPARAM)str);
}
for (i=0;i<=31;i++){
sprintf(str,"%02d",i);
SendDlgItemMessage(hDlg,HIST_DATE,CB_ADDSTRING,0,(LPARAM)str);
}
for (i=0;i<=24;i++){
sprintf(str,"%02d",i);
SendDlgItemMessage(hDlg,HIST_HOUR,CB_ADDSTRING,0,(LPARAM)str);
}
for (i=0;i<=59;i++){
sprintf(str,"%02d",i);
SendDlgItemMessage(hDlg,HIST_MINU,CB_ADDSTRING,0,(LPARAM)str);
}
//得到当前时间
SendMessage(GetDlgItem(hDlg,HIST_YEAR),CB_SETCURSEL,(WPARAM)(year-2000),0);
SendMessage(GetDlgItem(hDlg,HIST_MONT),CB_SETCURSEL,(WPARAM)(mont),0);
SendMessage(GetDlgItem(hDlg,HIST_DATE),CB_SETCURSEL,(WPARAM)(days),0);
SendMessage(GetDlgItem(hDlg,HIST_HOUR),CB_SETCURSEL,(WPARAM)(hour),0);
SendMessage(GetDlgItem(hDlg,HIST_MINU),CB_SETCURSEL,(WPARAM)(minu),0);
}
/*历史查询按钮弹出的对话框*/
int SearchDialogProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
HDC hdc,hmemDC;
int id;
id= LOWORD (wParam);
switch (message)
{
case MSG_INITDIALOG:
return 1;
case MSG_SHOWWINDOW:
{
InitSearchDlg(hDlg);
}
break;
case MSG_PAINT:
hdc = BeginPaint(hDlg);
SetTextColor(hdc,PIXEL_black);
SetBkColor(hdc,PIXEL_lightgray);
SelectFont(hdc,songgb16font);
SetTextColor(hdc,PIXEL_black);
SetBkColor(hdc,PIXEL_lightgray);
TextOut(hdc, 60,20, "请输入要查询的时间:");
TextOut(hdc, 5,50, "年:");
TextOut(hdc, 100,50, "月:");
TextOut(hdc, 210,50, "日:");
TextOut(hdc, 5,80, "时");
TextOut(hdc, 100,80, "分");
EndPaint(hDlg,hdc);
break;
case MSG_KEYDOWN:
{
if(id==KEYS_SEARCH)SendDlgItemMessage(hDlg, HIST_SEARCH, BM_SETSTATE, BST_PUSHED,0);
if(id==KEYS_CANCEL)SendDlgItemMessage(hDlg, HIST_SBACK, BM_SETSTATE, BST_PUSHED,0);
keydowned=1;
}
break;
case MSG_KEYUP:
keydowned=0;
if(id==KEYS_SEARCH)
{
SendDlgItemMessage(hDlg, HIST_SEARCH , BM_SETSTATE, 0,0);
SendMessage (hDlg, MSG_COMMAND, HIST_SEARCH,0);
}
if(id==KEYS_CANCEL){
SendDlgItemMessage(hDlg, HIST_SBACK, BM_SETSTATE, 0,0);
//右下角按键响应
SendMessage (hDlg, MSG_COMMAND, HIST_SBACK,0); //进入模式按钮响应
}
break;
case MSG_COMMAND:
{
if(id==HIST_SEARCH)
{
//历史查询
end_sec=GetSeconds(hDlg);
start_sec=end_sec-640/histzoom;
ReadHisData(1,start_sec,end_sec);
SendMessage(GetHosting(hDlg),MSG_READRECORD,0,0) ;
}
if(id==HIST_SBACK)
{
//关闭查询对话框
EndDialog (hDlg, 0);
SendMessage(GetHosting(hDlg),MSG_COMMAND,HIST_BUTTON_SEARCH,0) ;
}
}
break;
case MSG_CLOSE:
EndDialog (hDlg, 0);
break;
}
return DefaultDialogProc (hDlg, message, wParam, lParam);
}
/*
历史查询页面对话框
*/
void HistSearchDlg (HWND hWnd)
{
Dlg_Search.controls = ctrl_search;
DialogBoxIndirectParam (&Dlg_Search, hWnd, SearchDialogProc, 0L);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -