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