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

📄 dlg_new_word.c

📁 利用microwindows实现英英词典 此为功能文件
💻 C
字号:
/*-------------------------------------------------*
* Function	:
* Usage         :
* Version	:
* Return Code   :
* Revision      :
* Remark        :
*--------------------------------------------------*/

#pragma far_pid_on
#pragma far_pic_on

#include "cb_dic/cb_dic.h"

/*******************************************************
*Func:	 New word: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 NWinit_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_nw_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:	 new word detail process
*In:
*Out:
*I/O:
*Modify:
*Return:
*Author: 
**********************************************/
LRESULT CALLBACK dlgNWDetailProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
{
	INT32	record_id;
	HDC hdc;
	PAINTSTRUCT ps;
	static CB_WORD_DETAIL	word_detail;
	static NW_GUI_MAIN	*p_nw_main = NULL;

	switch ( iMsg ) {
		case WM_CREATE:
#if LINUX_FS
			(MWBRUSHOBJ *)hwnd->pClass->hbrBackground = GetStockObject( WHITE_BRUSH );
#endif
			break;
		case WM_INITDIALOG:
			p_nw_main = (NW_GUI_MAIN *)lParam;
			record_id = p_nw_main->select_record + p_nw_main->top_record_id;
			NWinit_detail( hwnd, record_id, &word_detail );
			break;

		case WM_KEYDOWN:
			switch( LOWORD( wParam ) ) {
				case VK_LEFT:
					break;
				case VK_RIGHT:
					break;
			}
			break;
		case WM_KEYUP:
			switch( LOWORD( wParam ) ) {
				case VK_F3:
					break;
				case VK_F4:
					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:	 New word: Display one screen record in listbox
*In:	 hwnd:
	 *p_list -> record list pointer
	 *p_nw_main -> list structure
*Out:
*I/O:
*Modify:
*Return:
*Author: 
**********************************************/
void NWshow_list_record( HWND hwnd, CB_WORD_DATA *p_list, 
			 NW_GUI_MAIN *p_nw_main )
{
	INT16	i;
	
	SendMessage( GetDlgItem( hwnd, LST_CLASS ), LB_RESETCONTENT, FALSE, FALSE );
	for( i = 0; i < p_nw_main->page_num_record; i++ ) {
		SendMessage( GetDlgItem( hwnd, LST_CLASS ), LB_ADDSTRING, 
				FALSE, ( LPARAM )( LPSTR )( ( p_list + i )->word ) );
	}
	SendMessage( GetDlgItem( hwnd, LST_CLASS ), LB_SETCURSEL, p_nw_main->select_record, 0 );
}

/*********************************************
*Func:	 处理VK_HOME
*In:
*Out:
*I/O:	 *p_nw_main -> 保存主界面的一些信息
	 *p_list -> 保存一屏记录
*Modify:
*Return:
*Author:
**********************************************/
void NWhomeMainProc( HWND hwnd, NW_GUI_MAIN *p_nw_main, CB_WORD_DATA *p_list )
{
	INT32	n_rtn = 0;

	if( p_nw_main->page_flag == CB_RTN_LNOR || p_nw_main->page_flag == CB_RTN_LR ) {
		n_rtn = cba_nw_get_displist( p_nw_main, p_list, CB_CUR_SCREEN, CB_SCROLL_SCREEN );
		p_nw_main->select_record = 0;
		p_nw_main->page_num_record = HIWORD( n_rtn );
		p_nw_main->page_flag = LOWORD( n_rtn );
		NWshow_list_record( hwnd, p_list, p_nw_main );
#if	0
		resetLcdIconStatus( );
		setPubLcdIconStatus( p_nw_main->page_flag );
#endif
	}
}

/*********************************************
*Func:	 处理VK_END
*In:
*Out:
*I/O:	 *p_nw_main -> 保存主界面的一些信息
	 *p_list -> 保存一屏记录
*Modify:
*Return:
*Author:
**********************************************/
void NWendMainProc( HWND hwnd, NW_GUI_MAIN *p_nw_main, CB_WORD_DATA *p_list )
{
	INT32	n_rtn = 0;

	if( p_nw_main->page_flag == CB_RTN_RNOL || p_nw_main->page_flag == CB_RTN_LR ) {
		n_rtn = cba_nw_get_displist( p_nw_main, p_list, CB_CUR_SCREEN, CB_SCROLL_SCREEN );
		p_nw_main->select_record = 0;
		p_nw_main->page_num_record = HIWORD( n_rtn );
		p_nw_main->page_flag = LOWORD( n_rtn );
		NWshow_list_record( hwnd, p_list, p_nw_main );
#if	0
		resetLcdIconStatus( );
		setPubLcdIconStatus( p_nw_main->page_flag );
#endif
	}
}

/*********************************************
*Func:	 处理VK_PRIOR
*In:
*Out:
*I/O:	 *p_nw_main -> 保存主界面的一些信息
	 *p_list -> 保存一屏记录
*Modify:
*Return:
*Author:
**********************************************/
void NWpriorMainProc( HWND hwnd, NW_GUI_MAIN *p_nw_main, CB_WORD_DATA *p_list )
{
	INT32	n_rtn = 0;

	if( p_nw_main->page_flag == CB_RTN_LNOR || p_nw_main->page_flag == CB_RTN_LR ) {
		n_rtn = cba_nw_get_displist( p_nw_main, p_list,CB_GET_UP,CB_SCROLL_SCREEN );
		p_nw_main->select_record = 0;
		p_nw_main->page_num_record = HIWORD( n_rtn );
		p_nw_main->page_flag = LOWORD( n_rtn );
		NWshow_list_record( hwnd, p_list, p_nw_main );
	}
}

/*********************************************
*func:	 处理VK_NEXT
*in:
*out:
*i/o:	 *p_nw_main -> 保存主界面的一些信息
	 *p_list -> 保存一屏记录
*modify:
*return:
*author:
**********************************************/
void NWnextMainProc( HWND hwnd, NW_GUI_MAIN *p_nw_main, CB_WORD_DATA *p_list )
{
	INT32	n_rtn = 0;

	if( p_nw_main->page_flag == CB_RTN_RNOL || p_nw_main->page_flag == CB_RTN_LR ) {
		n_rtn = cba_nw_get_displist( p_nw_main, p_list,CB_GET_DOWN,CB_SCROLL_SCREEN );
		p_nw_main->select_record = 0;
		p_nw_main->page_num_record = HIWORD( n_rtn );
		p_nw_main->page_flag = LOWORD( n_rtn );
		NWshow_list_record( hwnd, p_list, p_nw_main );
	}
}

/*********************************************
*func:	 处理VK_UP
*in:
*out:
*i/o:	 *p_nw_main -> 保存主界面的一些信息
	 *p_list -> 保存一屏记录
*modify:
*return:
*author:
**********************************************/
void NWupMainProc( HWND hwnd, NW_GUI_MAIN *p_nw_main, CB_WORD_DATA *p_list )
{
	INT32	n_rtn = 0;

	if( p_nw_main->select_record > 0 ) {
		p_nw_main->select_record--;
		SendMessage( GetDlgItem(hwnd,LST_CLASS), LB_SETCURSEL, p_nw_main->select_record, 0 );
		return;
	} 

	if( p_nw_main->page_flag == CB_RTN_LNOR || p_nw_main->page_flag == CB_RTN_LR ) {
		n_rtn = cba_nw_get_displist( p_nw_main, p_list,CB_GET_UP,CB_SCROLL_LINE );
		p_nw_main->page_num_record = HIWORD( n_rtn );
		p_nw_main->page_flag = LOWORD( n_rtn );
		NWshow_list_record( hwnd, p_list, p_nw_main );
	}
}

/*********************************************
*func:	 处理VK_DOWN
*in:
*out:
*i/o:	 *p_nw_main -> 保存主界面的一些信息
	 *p_list -> 保存一屏记录
*modify:
*return:
*author:
**********************************************/
void NWdownMainProc( HWND hwnd, NW_GUI_MAIN *p_nw_main, CB_WORD_DATA *p_list )
{
	INT32	n_rtn = 0;

	if( p_nw_main->select_record < PAGE_NUM_RECORD - 1 ) {
		if( p_nw_main->select_record < p_nw_main->page_num_record - 1 ) {
			p_nw_main->select_record++;
			SendMessage( GetDlgItem(hwnd,LST_CLASS), LB_SETCURSEL, 
					p_nw_main->select_record, 0 );
		}
		return;
	} 

	if( p_nw_main->page_flag == CB_RTN_RNOL || p_nw_main->page_flag == CB_RTN_LR ) {
		n_rtn = cba_nw_get_displist( p_nw_main, p_list,CB_GET_DOWN,CB_SCROLL_LINE );
		p_nw_main->page_num_record = HIWORD( n_rtn );
		p_nw_main->page_flag = LOWORD( n_rtn );
		NWshow_list_record( hwnd, p_list, p_nw_main );
	}
}
/*********************************************
*Func:	 处理WM_KEYDOWN消息
*In:	 hwnd -> 窗口句柄
	 key -> 按键消息
*Out:
*I/O:	 *p_nw_main -> 保存主界面的一些信息
	 *p_list -> 保存一屏记录
*Modify:
*Return:
*Author: 
**********************************************/
void NWkeyDownMainProc( HWND hwnd, int key, NW_GUI_MAIN *p_nw_main, CB_WORD_DATA *p_list )
{
	switch( key ) {
		//previous page
		case VK_PRIOR:
			NWpriorMainProc( hwnd, p_nw_main, p_list );
			break;
		//next page
		case VK_NEXT:
			NWnextMainProc( hwnd, p_nw_main, p_list );
			break;
		//previous record
		case VK_UP:
			NWupMainProc( hwnd, p_nw_main, p_list );
			break;
		//next record
		case VK_DOWN:
			NWdownMainProc( hwnd, p_nw_main, p_list );
			break;
		//top record
		case VK_HOME:
			NWhomeMainProc( hwnd, p_nw_main, p_list );
			break;
		//bottom record
		case VK_END:
			NWendMainProc( hwnd, p_nw_main, p_list );
			break;
		case VK_RETURN:
			SendMessage( hwnd, WM_COMMAND, MAKELONG(LST_CLASS,LBN_SELCHANGE),0L );
			return;
	}
}
/*********************************************
*Func:	 new word list  process
*In:
*Out:
*I/O:
*Modify:
*Return:
*Author: 
**********************************************/
LRESULT CALLBACK dlgNWProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
{
	HDC hdc;
	PAINTSTRUCT ps;
	INT32	n_rtn = 0;
	static INT32	n_item;
	static NW_GUI_MAIN*	p_nw_main  = NULL;	//list one screen of sub db
	static CB_WORD_DATA*	p_displist = NULL;	//sub db's name

	switch ( iMsg ) {
		case WM_CREATE:
#if LINUX_FS
			(MWBRUSHOBJ *)hwnd->pClass->hbrBackground = GetStockObject( WHITE_BRUSH );
#endif
			break;
		case WM_INITDIALOG:
			p_nw_main = (NW_GUI_MAIN *)malloc(sizeof(NW_GUI_MAIN));
			if( p_nw_main == NULL ) {
				debug( "malloc error!\n" );
				exit(-1);
			}
			memset( p_nw_main, 0, sizeof(NW_GUI_MAIN) );
			p_nw_main->select_record = 0;
			p_nw_main->top_record_id = 0;
			p_nw_main->total_num_record = cba_get_nw_record_num( );
			if(p_nw_main->total_num_record <= 0){
				MessageBox( NULL, STR_FWRITE_ERR, STR_WRONG, MB_OK |MB_ICONSTOP );
				if(p_nw_main != NULL)
					free(p_nw_main);
				EndDialog(hwnd, TRUE);
			}
			p_displist = (CB_WORD_DATA *)malloc( 
					sizeof(CB_WORD_DATA)*PAGE_NUM_RECORD );
			if( p_displist == NULL ) {
				debug( "malloc error!\n" );
				exit(-1);
			}
			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_nw_get_displist( p_nw_main, p_displist, CB_CUR_SCREEN, CB_SCROLL_SCREEN );
			p_nw_main->page_num_record = HIWORD( n_rtn );
			p_nw_main->page_flag = LOWORD( n_rtn );
			NWshow_list_record( hwnd, p_displist, p_nw_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;
						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_nw_main->select_record ){
								cba_nw_get_displist(p_nw_main,
									p_displist, 
									CB_CUR_SCREEN,
									CB_SCROLL_SCREEN  );
								p_nw_main->hwnd_main = hwnd;
								SetDefaultKeyWindow( NULL );
								ModalDialogBoxParamEx( NULL, 
									"DLG_NW_DETAIL", hwnd, 
									dlgNWDetailProc, 
									(LPARAM)p_nw_main, 
									dialog_info, NW_DETAIL );
							} else {
								p_nw_main->select_record=n_item;
							}
						break;
					}
					break;
				default:
					break;
			}
			break;
		case WM_KEYDOWN:
			NWkeyDownMainProc( hwnd, LOWORD( wParam ), p_nw_main, p_displist );
			break;
		case WM_KEYUP:
			switch( LOWORD( wParam ) ) {
				case VK_F1:
					break;
				case VK_F2:
					//delete group
					break;
				case VK_F3:
					break;
				case VK_F4:
					break;
				case VK_ESCAPE:
					if(p_nw_main != NULL)
						free(p_nw_main);
					EndDialog( hwnd, TRUE );
					break;
			}			
			break;
		case WM_PAINT:
			if( GetActiveWindow( ) != hwnd ) {
				break;
			}
			SetDefaultKeyWindow( hwnd );
			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 + -