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

📄 dlg_main.c

📁 利用microwindows实现英英词典 此为功能文件
💻 C
字号:
/*-------------------------------------------------** $RCSfile$* $Date$* $Author$* $Log$* Function	:* Usage         :* Version	:* Return Code   :* Revision      :* Remark        :*--------------------------------------------------*/#pragma far_pid_on#pragma far_pic_on#include "cb_dic/cb_dic.h"/**********************************************Func:	 Display one screen record in listbox*In:	 hwnd:	 *p_displist -> record list pointer	 *p_gui_main -> list structure*Out:*I/O:*Modify:*Return:*Author: **********************************************/void show_list_record( HWND hwnd, const CB_WORD_DATA *p_displist, 			const CB_GUI_MAIN *p_gui_main ){	INT16	i;		SendMessage( GetDlgItem( hwnd, LST_CLASS ), LB_RESETCONTENT, FALSE, FALSE );	for( i = 0; i < p_gui_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_gui_main->select_record, 0 );}/**********************************************Func:	 处理EN_CHANGE消息*In:	 hwnd -> 窗口句柄.*Out:*I/O:	 *p_displist -> record list	 *p_gui_main -> the main window msg*Modify:*Return:*Author: **********************************************/void proc_input_change( HWND hwnd, CB_GUI_MAIN *p_gui, CB_WORD_DATA *p_list ) {	INT32	n_rtn = 0;	INT32	input_size = 0;	CHAR	input[L_WORD+1];	CHAR	chr;	input_size = (long)SendMessage( GetDlgItem( hwnd, EDT_INPUT ), WM_GETTEXTLENGTH, 0, 0 );	memset( input, 0, sizeof(input) );	GetWindowText( GetDlgItem( hwnd, EDT_INPUT ), input, input_size+1 );	chr = input[input_size-1];#if 0	if( ( input[input_size-1] >= 'A' && input[input_size-1] <= 'Z' ) ||	    ( input[input_size-1] >= 'a' && input[input_size-1] <= 'z' ) ) {#else	//if( ( !isalpha(input[0] ) ) break;	if( ( chr >= 'A' && chr <= 'Z' ) || ( chr >= 'a' && chr <= 'z' ) 		|| (chr == '*' ) || ( chr == '?' ) ) {#endif		if( cba_set_search( input ) == CB_RTN_ERROR ) return;		n_rtn = cba_get_displist(p_list,CB_CUR_SCREEN,CB_SCROLL_SCREEN);		p_gui->select_record = 0;		p_gui->page_num_record = HIWORD( n_rtn );		p_gui->page_flag = LOWORD( n_rtn );		show_list_record( hwnd, p_list, p_gui );	} else {		SendMessage( GetDlgItem( hwnd, EDT_INPUT ), WM_KEYDOWN, VK_BACK, 0L );	}	}/**********************************************Func:	 处理WM_TIMER消息*In:	 hwnd -> 窗口句柄	 key -> 计时器ID*Out:*I/O:	 *bmp_show_num -> 当前显示的图片编号*Modify:*Return:*Author: **********************************************/void proc_timer_msg( HWND hwnd, INT32 key, INT16 *bmp_show_num ){	HDC	hdc;#if !LINUX_FS	MWIMAGEHDR *image_cb[3] = {&image_cb0, &image_cb1, &image_cb2};	switch( key ) {		case ID_CLOCK:			hdc = GetDC( hwnd );			BitBlt( hdc, 75, 0, 55, V6100_HEIGHT, hdc, 185, 0, SRCCOPY );			BitBlt( hdc, 130, 0, 55, V6100_HEIGHT, hdc, 185, 0, SRCCOPY );			DrawDIB( hdc, 48, 20, image_cb[0] );			switch( *bmp_show_num ) {				case 1:					DrawDIB( hdc, 48, 20, image_cb[*bmp_show_num] );					break;				case 2:					DrawDIB( hdc, 48, 20, image_cb[*bmp_show_num] );					break;			}#else	MWIMAGEHDR image_cb[3] = {image_cb0, image_cb1, image_cb2};	switch( key ) {		case ID_CLOCK:			hdc = GetDC( hwnd );			BitBlt( hdc, 75, 0, 55, V6100_HEIGHT, hdc, 185, 0, SRCCOPY );			BitBlt( hdc, 130, 0, 55, V6100_HEIGHT, hdc, 185, 0, SRCCOPY );			DrawDIB( hdc, 48, 20, &image_cb[0] );			switch( *bmp_show_num ) {				case 1:					DrawDIB( hdc, 48, 20, &image_cb[*bmp_show_num] );					break;				case 2:					DrawDIB( hdc, 48, 20, &image_cb[*bmp_show_num] );					break;			}#endif			*bmp_show_num = ( *bmp_show_num == 2 ) ? 1 : 2;			ReleaseDC( hwnd, hdc );			break;	}}/**********************************************Func:	 处理VK_HOME*In:*Out:*I/O:	 *p_gui -> 保存主界面的一些信息	 *p_list -> 保存一屏记录*Modify:*Return:*Author:**********************************************/void homeMainProc( HWND hwnd, CB_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 );		show_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 endMainProc( HWND hwnd, CB_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 );		show_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 priorMainProc( HWND hwnd, CB_GUI_MAIN *p_gui, CB_WORD_DATA *p_list ){	INT32	n_rtn = 0;	//previous page	if( p_gui->page_flag == CB_RTN_LNOR || p_gui->page_flag == CB_RTN_LR ) {		n_rtn = cba_get_displist( p_list,CB_GET_UP,CB_SCROLL_SCREEN );		//get one scr list		p_gui->select_record = 0;		p_gui->page_num_record = HIWORD( n_rtn );		p_gui->page_flag = LOWORD( n_rtn );		show_list_record( hwnd, p_list, p_gui );#if	0		resetLcdIconStatus( );		setPubLcdIconStatus( p_gui->page_flag );#endif	}}/**********************************************func:	 处理VK_NEXT*in:*out:*i/o:	 *p_gui -> 保存主界面的一些信息	 *p_list -> 保存一屏记录*modify:*return:*author:**********************************************/void nextMainProc( HWND hwnd, CB_GUI_MAIN *p_gui, CB_WORD_DATA *p_list ){	INT32	n_rtn = 0;	//next page	if( p_gui->page_flag == CB_RTN_RNOL || p_gui->page_flag == CB_RTN_LR ) {		n_rtn = cba_get_displist( 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 );		show_list_record( hwnd, p_list, p_gui );#if	0		resetLcdIconStatus( );		setPubLcdIconStatus( p_gui->page_flag );#endif	}}/**********************************************func:	 处理VK_UP*in:*out:*i/o:	 *p_gui -> 保存主界面的一些信息	 *p_list -> 保存一屏记录*modify:*return:*author:**********************************************/void upMainProc( HWND hwnd, CB_GUI_MAIN *p_gui, CB_WORD_DATA *p_list ){	INT32	n_rtn = 0;	//the page not change	if( p_gui->select_record > 0 ) {		p_gui->select_record--;		SendMessage( GetDlgItem(hwnd,LST_CLASS), LB_SETCURSEL, p_gui->select_record, 0 );		return;	} 	//the page must change	if( p_gui->page_flag == CB_RTN_LNOR || p_gui->page_flag == CB_RTN_LR ) {		n_rtn = cba_get_displist( p_list,CB_GET_UP,CB_SCROLL_LINE );		p_gui->page_num_record = HIWORD( n_rtn );		p_gui->page_flag = LOWORD( n_rtn );		show_list_record( hwnd, p_list, p_gui );#if	0		if( !p_gui->detail_flag ) {			resetLcdIconStatus( );			setPubLcdIconStatus( p_gui->page_flag );		} //如果不是详情浏览,才设置.#endif	}}/**********************************************func:	 处理VK_DOWN*in:*out:*i/o:	 *p_gui -> 保存主界面的一些信息	 *p_list -> 保存一屏记录*modify:*return:*author:**********************************************/void downMainProc( HWND hwnd, CB_GUI_MAIN *p_gui, CB_WORD_DATA *p_list ){	INT32	n_rtn = 0;	//if the focus less than max scr num, then focus move next Item and the page not change	if( p_gui->select_record < PAGE_NUM_RECORD - 1 ) {		if( p_gui->select_record < p_gui->page_num_record - 1 ) {			p_gui->select_record++;						//reverse the next item			SendMessage( GetDlgItem(hwnd,LST_CLASS), LB_SETCURSEL, 					p_gui->select_record, 0 );		}		return;	} 	//the page need change	if( p_gui->page_flag == CB_RTN_RNOL || p_gui->page_flag == CB_RTN_LR ) {		n_rtn = cba_get_displist( p_list,CB_GET_DOWN,CB_SCROLL_LINE );		p_gui->page_num_record = HIWORD( n_rtn );		p_gui->page_flag = LOWORD( n_rtn );		show_list_record( hwnd, p_list, p_gui );#if	0		if( !p_gui->detail_flag ) {			resetLcdIconStatus( );			setPubLcdIconStatus( p_gui->page_flag );		} //如果不是详情浏览,才设置.#endif	}}/**********************************************Func:	 处理WM_KEYDOWN消息*In:	 hwnd -> 窗口句柄	 key -> 按键消息*Out:*I/O:	 *p_gui -> 保存主界面的一些信息	 *p_list -> 保存一屏记录*Modify:*Return:*Author: **********************************************/void keyDownMainProc( HWND hwnd, int key, CB_GUI_MAIN *p_gui, CB_WORD_DATA *p_list ){	switch( key ) {		//previous page		case VK_PRIOR:			priorMainProc( hwnd, p_gui, p_list );			break;		//next page		case VK_NEXT:			nextMainProc( hwnd, p_gui, p_list );			break;		//previous record		case VK_UP:			upMainProc( hwnd, p_gui, p_list );			break;		//next record		case VK_DOWN:			downMainProc( hwnd, p_gui, p_list );			break;		//top record		case VK_HOME:			homeMainProc( hwnd, p_gui, p_list );			break;		//bottom record		case VK_END:			endMainProc( hwnd, p_gui, p_list );			break;		//i not know		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 dlgMainProc( 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 CB_GUI_MAIN*	p_gui_main = NULL;	switch ( iMsg ) {		case WM_CREATE:#if LINUX_FS			(MWBRUSHOBJ *)hwnd->pClass->hbrBackground = GetStockObject( WHITE_BRUSH );#endif			break;		case WM_INITDIALOG:			SendMessage( GetDlgItem( hwnd, EDT_INPUT ), EM_SETLIMITTEXT, L_WORD, 0L );			p_gui_main = (CB_GUI_MAIN *)malloc(sizeof(CB_GUI_MAIN));			if( p_gui_main == NULL ) {				debug( "malloc error!\n" );			}			memset( p_gui_main, 0, sizeof(CB_GUI_MAIN) );			p_gui_main->bmp_show_num = 1;			p_gui_main->bmp_show_flag = TRUE;			p_gui_main->his_db_num  = 0;			ShowWindow( GetDlgItem( hwnd, EDT_INPUT ), FALSE );			ShowWindow( GetDlgItem( hwnd, LST_CLASS ), FALSE );			SetTimer( hwnd, ID_CLOCK, BMP_SHOW_TIME, NULL );			break;		case WM_COMMAND:			switch( LOWORD( wParam ) ) {				case EDT_INPUT:					switch( HIWORD( wParam ) ) {						case EN_SETFOCUS:							//edit receive input and display input							SetDefaultKeyWindow( NULL );							break;						case EN_KILLFOCUS:							SetDefaultKeyWindow( hwnd );							break;						case EN_CHANGE:							proc_input_change( hwnd, p_gui_main,										p_displist );							break;							//enter key , send message to LST_CLASS						case EN_RETURN:							SendMessage( hwnd, WM_COMMAND, 							MAKELONG(LST_CLASS,LBN_SELCHANGE),0L );							break;					}					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_gui_main->select_record ){								cba_get_displist(p_displist, 									CB_CUR_SCREEN,									CB_SCROLL_SCREEN  );								p_gui_main->hwnd_main = hwnd;								p_gui_main->his_db_num++;								SetDefaultKeyWindow( NULL );								ModalDialogBoxParamEx( NULL, 									"DLG_DETAIL", hwnd, 									dlgDetailProc, 									(LPARAM)p_gui_main, 									dialog_info, DETAIL );							} else {								p_gui_main->select_record=n_item;							}						break;					}					break;				default:					break;			}			break;		case WM_TIMER:			proc_timer_msg( hwnd, LOWORD( wParam ), &(p_gui_main->bmp_show_num) );			break;		case WM_KEYDOWN:			if( p_gui_main->bmp_show_flag ) {				p_gui_main->bmp_show_flag = FALSE;				KillTimer( hwnd, ID_CLOCK );				ShowWindow( GetDlgItem( hwnd, EDT_INPUT ), TRUE );				ShowWindow( GetDlgItem( hwnd, LST_CLASS ), TRUE );				SetFocus( GetDlgItem( hwnd, EDT_INPUT ) );				p_gui_main->select_record = 0;				p_gui_main->page_num_record = 0;				p_gui_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_gui_main->page_num_record = PAGE_NUM_RECORD;				p_gui_main->page_flag = LOWORD( n_rtn );				show_list_record( hwnd, p_displist, p_gui_main );				break;			}			keyDownMainProc( hwnd, LOWORD( wParam ), p_gui_main, p_displist );			break;		case WM_KEYUP:			switch( LOWORD( wParam ) ) {				case VK_F1:					//spell check					break;				case VK_F2: 					break;				case VK_F3:					//history function					if(cba_his_rec_cnt ( ) == 0 ) break;					ModalDialogBoxParamEx( NULL, 							"DLG_HIS", hwnd, 							dlgHisProc, 							(LPARAM)p_gui_main->his_db_num, 							dialog_info, HIS );					break;				case VK_F4:					//new word db browse					ModalDialogBoxParamEx( NULL, 							"DLG_NW", hwnd, 							dlgNWProc, 							(LPARAM)NULL, 							dialog_info, NEW_WORD );					break;				case VK_ESCAPE:					SetDefaultKeyWindow( NULL );					SendMessage( hwnd, WM_DESTROY, 0L, 0L );					break;			}						break;		case WM_PAINT:			if( GetActiveWindow( ) != hwnd ) {				break;			}			SetDefaultKeyWindow( hwnd );			if( p_gui_main->input_ch != 0 ) {				char	input_word[2];				SetFocus( GetDlgItem( hwnd, EDT_INPUT ) );				memset( input_word, 0, sizeof(input_word) );				input_word[0] = p_gui_main->input_ch;				SetWindowText( GetDlgItem( hwnd, EDT_INPUT ), input_word );				SendMessage( hwnd, WM_COMMAND, MAKELONG(EDT_INPUT,EN_CHANGE),0L );			} 			hdc = BeginPaint( hwnd, &ps ); 			EndPaint( hwnd, &ps ); 			break;		case WM_DESTROY:#if	0			return_xime( p_gui_main->hxime, p_gui_main->hxime_parent ) ; #endif			if( p_gui_main != NULL ) {				free( p_gui_main );			}			if( p_displist != NULL ) {				free( p_displist );			}			cba_destroy( );			PostQuitMessage( FALSE );			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 + -