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

📄 dlg_his.c

📁 利用microwindows实现英英词典 此为功能文件
💻 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 + -