📄 dlg_main.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 + -