📄 dlg_his.c
字号:
/*-------------------------------------------------*
* $RCSfile$
* $Date$
* $Author$
* $Log$
* Revision 1.3 2004/12/31 08:47:41 lzw
* ok in dvp!
* good!
*
* Revision 1.2 2004/12/27 09:12:57 lzw
* BugId:v6100-
* history function add ok!
*
* Revision 1.1 2004/12/24 09:50:47 lzw
* BugId:v6100-
* his function add in
*
* Function :
* Usage :
* Version :
* Return Code :
* Revision :
* Remark :
*--------------------------------------------------*/
#pragma far_pid_on
#pragma far_pic_on
#include "cb_dic/cb_dic.h"
/*******************************************************
*Func: enter a detail of per word(when come from list
* or come from detail due to a new word)
*In: hwnd -> window header
logic_id -> the number in one srceen
*Out: *word_detail -> save detail of word
*I/O:
*Modify:
*Return: success -> CB_RTN_OK
fail -> CB_RTN_ERROR
*Author:
********************************************************/
INT8 HISinit_detail( HWND hwnd, INT32 record_id, CB_WORD_DETAIL *word_detail )
{
char format_expl[2*L_EXPL+1]; //存放格式化的解释.
memset( word_detail, 0, sizeof(CB_WORD_DETAIL) );
//先不考虑反查 fancha_flag:0
cba_get_his_detail( word_detail, record_id ,0);
SetWindowText( GetDlgItem( hwnd, TXT_WORD ), word_detail->data.word );
memset( format_expl, 0, sizeof(format_expl) );
sprintf( format_expl, "<table><tr><td width=240><p>%s</p>%s</td></tr></table>", word_detail->phon, word_detail->expl );
SetWindowText( GetDlgItem( hwnd, EDT_DETAIL ), format_expl );
SetFocus( GetDlgItem( hwnd, EDT_DETAIL ) );
return CB_RTN_OK;
}
/*********************************************
*Func: His word detail process
*In:
*Out:
*I/O:
*Modify:
*Return:
*Author:
**********************************************/
LRESULT CALLBACK dlgDetailHisProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
{
INT32 record_id;
HDC hdc;
PAINTSTRUCT ps;
static CB_WORD_DETAIL word_detail;
static HIS_GUI_MAIN *p_his_main = NULL;
switch ( iMsg ) {
case WM_CREATE:
#if LINUX_FS
(MWBRUSHOBJ *)hwnd->pClass->hbrBackground = GetStockObject( WHITE_BRUSH );
#endif
break;
case WM_INITDIALOG:
p_his_main = (HIS_GUI_MAIN *)lParam;
record_id = p_his_main->select_record + p_his_main->top_record_id;
HISinit_detail( hwnd, record_id, &word_detail );
break;
case WM_KEYDOWN:
switch( LOWORD( wParam ) ) {
case VK_LEFT:
#if 0
if( p_his_main->hwnd_main == NULL ) break;
SendMessage( p_his_main->hwnd_main,WM_KEYDOWN,VK_UP,0L );
HISinit_detail(hwnd,p_his_main->select_record,&word_detail);
#endif
break;
case VK_RIGHT:
#if 0
if( p_his_main->hwnd_main == NULL ) break;
SendMessage(p_his_main->hwnd_main,WM_KEYDOWN,VK_DOWN,0L);
HISinit_detail(hwnd,p_his_main->select_record,&word_detail);
#endif
break;
}
break;
case WM_KEYUP:
switch( LOWORD( wParam ) ) {
case VK_F3:
break;
//example process
case VK_F4:
if(word_detail.lj_id_num > 0){
SetDefaultKeyWindow( NULL );
ModalDialogBoxParamEx( NULL,
"DLG_EXAM", hwnd,
dlgExamProc,
(LPARAM)&word_detail,
dialog_info, EXAM );
}
break;
case VK_ESCAPE:
EndDialog( hwnd, TRUE );
break;
}
break;
case WM_PAINT:
hdc = BeginPaint( hwnd, &ps );
MoveToEx( hdc, 0, 14, NULL );
LineTo( hdc, V6100_WIDTH, 14 );
MoveToEx( hdc, 0, 15, NULL );
LineTo( hdc, V6100_WIDTH, 15 );
EndPaint( hwnd, &ps );
break;
default:
return DefWindowProc( hwnd, iMsg, wParam, lParam );
}
return ( FALSE );
}
/*********************************************
*Func: History: Display one screen record in listbox
*In: hwnd:
*p_displist -> record list pointer
*p_his_main -> list structure
*Out:
*I/O:
*Modify:
*Return:
*Author:
**********************************************/
void HISshow_list_record( HWND hwnd, const CB_WORD_DATA *p_displist,
const HIS_GUI_MAIN *p_his_main )
{
INT16 i;
SendMessage( GetDlgItem( hwnd, LST_CLASS ), LB_RESETCONTENT, FALSE, FALSE );
for( i = 0; i < p_his_main->page_num_record; i++ ) {
SendMessage( GetDlgItem( hwnd, LST_CLASS ), LB_ADDSTRING,
FALSE, ( LPARAM )( LPSTR )( ( p_displist + i )->word ) );
}
SendMessage( GetDlgItem( hwnd, LST_CLASS ), LB_SETCURSEL, p_his_main->select_record, 0 );
}
/*********************************************
*Func: 处理VK_HOME
*In:
*Out:
*I/O: *p_gui -> 保存主界面的一些信息
*p_list -> 保存一屏记录
*Modify:
*Return:
*Author:
**********************************************/
void HIShomeMainProc( HWND hwnd, HIS_GUI_MAIN *p_gui, CB_WORD_DATA *p_list )
{
INT32 n_rtn = 0;
if( p_gui->page_flag == CB_RTN_LNOR || p_gui->page_flag == CB_RTN_LR ) {
n_rtn = cba_get_displist( p_list,CB_HOME_SCREEN,CB_SCROLL_SCREEN );
p_gui->select_record = 0;
p_gui->page_num_record = HIWORD( n_rtn );
p_gui->page_flag = LOWORD( n_rtn );
HISshow_list_record( hwnd, p_list, p_gui );
#if 0
resetLcdIconStatus( );
setPubLcdIconStatus( p_gui->page_flag );
#endif
}
}
/*********************************************
*Func: 处理VK_END
*In:
*Out:
*I/O: *p_gui -> 保存主界面的一些信息
*p_list -> 保存一屏记录
*Modify:
*Return:
*Author:
**********************************************/
void HISendMainProc( HWND hwnd, HIS_GUI_MAIN *p_gui, CB_WORD_DATA *p_list )
{
INT32 n_rtn = 0;
if( p_gui->page_flag == CB_RTN_RNOL || p_gui->page_flag == CB_RTN_LR ) {
n_rtn = cba_get_displist( p_list,CB_END_SCREEN,CB_SCROLL_SCREEN );
p_gui->select_record = 0;
p_gui->page_num_record = HIWORD( n_rtn );
p_gui->page_flag = LOWORD( n_rtn );
HISshow_list_record( hwnd, p_list, p_gui );
#if 0
resetLcdIconStatus( );
setPubLcdIconStatus( p_gui->page_flag );
#endif
}
}
/*********************************************
*Func: 处理VK_PRIOR
*In:
*Out:
*I/O: *p_gui -> 保存主界面的一些信息
*p_list -> 保存一屏记录
*Modify:
*Return:
*Author:
**********************************************/
void HISpriorMainProc( HWND hwnd, HIS_GUI_MAIN *p_gui, CB_WORD_DATA *p_list )
{
INT32 n_rtn = 0;
if( p_gui->page_flag == CB_RTN_LNOR || p_gui->page_flag == CB_RTN_LR ) {
n_rtn = cba_his_get_displist( p_gui, p_list,CB_GET_UP,CB_SCROLL_SCREEN );
p_gui->select_record = 0;
p_gui->page_num_record = HIWORD( n_rtn );
p_gui->page_flag = LOWORD( n_rtn );
HISshow_list_record( hwnd, p_list, p_gui );
}
}
/*********************************************
*func: 处理VK_NEXT
*in:
*out:
*i/o: *p_gui -> 保存主界面的一些信息
*p_list -> 保存一屏记录
*modify:
*return:
*author:
**********************************************/
void HISnextMainProc( HWND hwnd, HIS_GUI_MAIN *p_gui, CB_WORD_DATA *p_list )
{
INT32 n_rtn = 0;
if( p_gui->page_flag == CB_RTN_RNOL || p_gui->page_flag == CB_RTN_LR ) {
n_rtn = cba_his_get_displist( p_gui, p_list,CB_GET_DOWN,CB_SCROLL_SCREEN );
p_gui->select_record = 0;
p_gui->page_num_record = HIWORD( n_rtn );
p_gui->page_flag = LOWORD( n_rtn );
HISshow_list_record( hwnd, p_list, p_gui );
}
}
/*********************************************
*func: 处理VK_UP
*in:
*out:
*i/o: *p_gui -> 保存主界面的一些信息
*p_list -> 保存一屏记录
*modify:
*return:
*author:
**********************************************/
void HISupMainProc( HWND hwnd, HIS_GUI_MAIN *p_gui, CB_WORD_DATA *p_list )
{
INT32 n_rtn = 0;
if( p_gui->select_record > 0 ) {
p_gui->select_record--;
SendMessage( GetDlgItem(hwnd,LST_CLASS), LB_SETCURSEL, p_gui->select_record, 0 );
return;
}
if( p_gui->page_flag == CB_RTN_LNOR || p_gui->page_flag == CB_RTN_LR ) {
n_rtn = cba_his_get_displist( p_gui, p_list,CB_GET_UP,CB_SCROLL_LINE );
p_gui->page_num_record = HIWORD( n_rtn );
p_gui->page_flag = LOWORD( n_rtn );
HISshow_list_record( hwnd, p_list, p_gui );
}
}
/*********************************************
*func: 处理VK_DOWN
*in:
*out:
*i/o: *p_gui -> 保存主界面的一些信息
*p_list -> 保存一屏记录
*modify:
*return:
*author:
**********************************************/
void HISdownMainProc( HWND hwnd, HIS_GUI_MAIN *p_gui, CB_WORD_DATA *p_list )
{
INT32 n_rtn = 0;
if( p_gui->select_record < PAGE_NUM_RECORD - 1 ) {
if( p_gui->select_record < p_gui->page_num_record - 1 ) {
p_gui->select_record++;
SendMessage( GetDlgItem(hwnd,LST_CLASS), LB_SETCURSEL,
p_gui->select_record, 0 );
}
return;
}
if( p_gui->page_flag == CB_RTN_RNOL || p_gui->page_flag == CB_RTN_LR ) {
n_rtn = cba_his_get_displist( p_gui, p_list,CB_GET_DOWN,CB_SCROLL_LINE );
p_gui->page_num_record = HIWORD( n_rtn );
p_gui->page_flag = LOWORD( n_rtn );
HISshow_list_record( hwnd, p_list, p_gui );
}
}
/*********************************************
*Func: 处理WM_KEYDOWN消息
*In: hwnd -> 窗口句柄
key -> 按键消息
*Out:
*I/O: *p_gui -> 保存主界面的一些信息
*p_list -> 保存一屏记录
*Modify:
*Return:
*Author:
**********************************************/
void HISkeyDownMainProc( HWND hwnd, int key, HIS_GUI_MAIN *p_gui, CB_WORD_DATA *p_list )
{
switch( key ) {
//previous page
case VK_PRIOR:
HISpriorMainProc( hwnd, p_gui, p_list );
break;
//next page
case VK_NEXT:
HISnextMainProc( hwnd, p_gui, p_list );
break;
//previous record
case VK_UP:
HISupMainProc( hwnd, p_gui, p_list );
break;
//next record
case VK_DOWN:
HISdownMainProc( hwnd, p_gui, p_list );
break;
//top record
case VK_HOME:
HIShomeMainProc( hwnd, p_gui, p_list );
break;
//bottom record
case VK_END:
HISendMainProc( hwnd, p_gui, p_list );
break;
case VK_RETURN:
SendMessage( hwnd, WM_COMMAND, MAKELONG(LST_CLASS,LBN_SELCHANGE),0L );
return;
}
}
/*********************************************
*Func: list process
*In:
*Out:
*I/O:
*Modify:
*Return:
*Author:
**********************************************/
LRESULT CALLBACK dlgHisProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
{
HDC hdc;
PAINTSTRUCT ps;
INT32 n_rtn = 0;
static INT32 n_item;
static CB_WORD_DATA* p_displist = NULL;
static HIS_GUI_MAIN* p_his_main = NULL;
switch ( iMsg ) {
case WM_CREATE:
#if LINUX_FS
(MWBRUSHOBJ *)hwnd->pClass->hbrBackground = GetStockObject( WHITE_BRUSH );
#endif
break;
case WM_INITDIALOG:
p_his_main = (HIS_GUI_MAIN *)malloc(sizeof(HIS_GUI_MAIN));
if( p_his_main == NULL ) {
debug( "malloc error!\n" );
}
memset( p_his_main, 0, sizeof(HIS_GUI_MAIN) );
p_his_main->select_record = 0;
p_his_main->top_record_id = 0;
p_his_main->total_record_num = (UINT8)lParam;
//cba_set_displistnum( PAGE_NUM_RECORD );
p_displist = (CB_WORD_DATA *)malloc(
sizeof(CB_WORD_DATA)*PAGE_NUM_RECORD );
if( p_displist == NULL ) {
debug( "malloc error!\n" );
}
memset( p_displist,0,sizeof(CB_WORD_DATA)*PAGE_NUM_RECORD );
ShowWindow( GetDlgItem( hwnd, TXT_WORD ), TRUE );
ShowWindow( GetDlgItem( hwnd, LST_CLASS ), TRUE );
n_rtn = cba_his_get_displist( p_his_main, p_displist, CB_CUR_SCREEN, CB_SCROLL_SCREEN );
p_his_main->page_num_record = HIWORD( n_rtn );
p_his_main->page_flag = LOWORD( n_rtn );
HISshow_list_record( hwnd, p_displist, p_his_main );
break;
case WM_COMMAND:
switch( LOWORD( wParam ) ) {
#if 1
case EDT_INPUT:
switch( HIWORD( wParam ) ) {
case EN_SETFOCUS:
break;
case EN_KILLFOCUS:
break;
case EN_CHANGE:
break;
//enter key , send message to LST_CLASS
case EN_RETURN:
SendMessage( hwnd, WM_COMMAND,
MAKELONG(LST_CLASS,LBN_SELCHANGE),0L );
break;
}
#endif
break;
case LST_CLASS:
switch( HIWORD( wParam ) ) {
case LBN_SELCHANGE:
n_item = SendMessage( GetDlgItem( hwnd,
LST_CLASS ),
LB_GETCURSEL, FALSE, FALSE );
if( n_item == p_his_main->select_record ){
cba_his_get_displist(p_his_main,
p_displist,
CB_CUR_SCREEN,
CB_SCROLL_SCREEN );
p_his_main->hwnd_main = hwnd;
SetDefaultKeyWindow( NULL );
ModalDialogBoxParamEx( NULL,
"DLG_HIS_DETAIL", hwnd,
dlgDetailHisProc,
(LPARAM)p_his_main,
dialog_info, HIS_DETAIL );
} else {
p_his_main->select_record=n_item;
}
break;
}
break;
default:
break;
}
break;
case WM_KEYDOWN:
#if 0
if( p_his_main->bmp_show_flag ) {
p_his_main->bmp_show_flag = FALSE;
KillTimer( hwnd, ID_CLOCK );
SetFocus( GetDlgItem( hwnd, EDT_INPUT ) );
p_his_main->select_record = 0;
p_his_main->page_num_record = 0;
p_his_main->page_flag = CB_RTN_NOLR;
cba_set_displistnum( PAGE_NUM_RECORD );
p_displist = (CB_WORD_DATA *)malloc(
sizeof(CB_WORD_DATA)*PAGE_NUM_RECORD );
if( p_displist == NULL ) {
debug( "malloc error!\n" );
}
memset( p_displist,0,sizeof(CB_WORD_DATA)*PAGE_NUM_RECORD );
p_his_main->page_num_record = PAGE_NUM_RECORD;
p_his_main->page_flag = LOWORD( n_rtn );
HISshow_list_record( hwnd, p_displist, p_his_main );
break;
}
#endif
HISkeyDownMainProc( hwnd, LOWORD( wParam ), p_his_main, p_displist );
break;
case WM_KEYUP:
switch( LOWORD( wParam ) ) {
case VK_F1:
break;
case VK_F2:
break;
case VK_F3:
break;
case VK_F4:
break;
case VK_ESCAPE:
if( p_his_main != NULL ) {
free( p_his_main );
}
EndDialog( hwnd, TRUE );
break;
}
break;
case WM_PAINT:
if( GetActiveWindow( ) != hwnd ) {
break;
}
SetDefaultKeyWindow( hwnd );
#if 0
if( p_his_main->input_ch != 0 ) {
char input_word[2];
SetFocus( GetDlgItem( hwnd, EDT_INPUT ) );
memset( input_word, 0, sizeof(input_word) );
input_word[0] = p_his_main->input_ch;
SetWindowText( GetDlgItem( hwnd, EDT_INPUT ), input_word );
SendMessage( hwnd, WM_COMMAND, MAKELONG(EDT_INPUT,EN_CHANGE),0L );
}
#endif
hdc = BeginPaint( hwnd, &ps );
EndPaint( hwnd, &ps );
break;
case WM_DESTROY:
break;
default:
return DefWindowProc( hwnd, iMsg, wParam, lParam );
}
return ( FALSE );
}
#pragma far_pic_off
#pragma far_pid_off
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -