📄 wedit.c
字号:
is_virt = ( ( flags & ACCEL_VIRTKEY ) != 0 );
WSetVirtKey ( dlg, is_virt );
if ( is_virt ) {
if ( flags & ACCEL_CONTROL ) {
CheckDlgButton ( dlg, IDM_ACCEDCNTL, 1 );
} else {
CheckDlgButton ( dlg, IDM_ACCEDCNTL, 0 );
}
if ( flags & ACCEL_SHIFT ) {
CheckDlgButton ( dlg, IDM_ACCEDSHFT, 1 );
} else {
CheckDlgButton ( dlg, IDM_ACCEDSHFT, 0 );
}
}
if ( flags & ACCEL_ALT ) {
CheckDlgButton ( dlg, IDM_ACCEDALT, 1 );
} else {
CheckDlgButton ( dlg, IDM_ACCEDALT, 0 );
}
if ( flags & ACCEL_NOINVERT ) {
CheckDlgButton ( dlg, IDM_ACCEDFLASH, 0 );
} else {
CheckDlgButton ( dlg, IDM_ACCEDFLASH, 1 );
}
}
return ( ok );
}
Bool WGetEditWindowFlags ( HWND dlg, uint_16 *flags )
{
Bool ok, is_virt;
ok = ( dlg != (HWND) NULL );
if ( ok ) {
if ( IsDlgButtonChecked ( dlg, IDM_ACCEDVIRT ) ) {
*flags |= ACCEL_VIRTKEY;
is_virt = TRUE;
}
if ( !IsDlgButtonChecked ( dlg, IDM_ACCEDFLASH ) ) {
*flags |= ACCEL_NOINVERT;
}
if ( IsDlgButtonChecked ( dlg, IDM_ACCEDALT ) ) {
*flags |= ACCEL_ALT;
}
if ( is_virt ) {
if ( IsDlgButtonChecked ( dlg, IDM_ACCEDCNTL ) ) {
*flags |= ACCEL_CONTROL;
}
if ( IsDlgButtonChecked ( dlg, IDM_ACCEDSHFT ) ) {
*flags |= ACCEL_SHIFT;
}
}
}
return ( ok );
}
Bool WSetEditWinResName ( WAccelEditInfo *einfo )
{
if ( einfo && einfo->edit_dlg && einfo->info->res_name ) {
return ( WSetEditWithWResID ( GetDlgItem ( einfo->edit_dlg,
IDM_ACCEDRNAME ),
einfo->info->res_name ) );
}
return ( TRUE );
}
void WSetVirtKey ( HWND hDlg, Bool is_virt )
{
CheckDlgButton( hDlg, IDM_ACCEDVIRT, is_virt );
CheckDlgButton( hDlg, IDM_ACCEDASCII, !is_virt );
EnableWindow( GetDlgItem( hDlg, IDM_ACCEDSHFT ), is_virt );
EnableWindow( GetDlgItem( hDlg, IDM_ACCEDCNTL ), is_virt );
EnableWindow( GetDlgItem( hDlg, IDM_ACCEDALT ), is_virt );
if( !is_virt ) {
CheckDlgButton( hDlg, IDM_ACCEDSHFT, FALSE );
CheckDlgButton( hDlg, IDM_ACCEDCNTL, FALSE );
CheckDlgButton( hDlg, IDM_ACCEDALT, FALSE );
}
}
Bool WInitEditWindowListBox ( WAccelEditInfo *einfo )
{
Bool ok;
HWND lbox;
WAccelEntry *entry;
ok = ( einfo && einfo->edit_dlg && einfo->tbl );
if ( ok ) {
lbox = GetDlgItem ( einfo->edit_dlg, IDM_ACCEDLIST );
SendMessage( lbox, WM_SETREDRAW, FALSE, 0 );
SendMessage( lbox, LB_RESETCONTENT, 0, 0 );
entry = einfo->tbl->first_entry;
while ( entry && ok ) {
ok = WAddEditWinLBoxEntry ( einfo, entry, -1 );
entry = entry->next;
}
SendMessage ( lbox, WM_SETREDRAW, TRUE, 0 );
}
return ( ok );
}
Bool WInitEditWindow ( WAccelEditInfo *einfo )
{
HWND lbox;
Bool ok;
ok = ( einfo && einfo->edit_dlg );
if ( ok ) {
ok = WSetEditWinResName ( einfo );
}
if ( ok ) {
ok = WInitEditWindowListBox ( einfo );
}
if ( ok ) {
if ( einfo->tbl->first_entry ) {
ok = WSetEditWindowKeyEntry ( einfo, einfo->tbl->first_entry );
if ( ok ) {
lbox = GetDlgItem ( einfo->edit_dlg, IDM_ACCEDLIST );
ok = ( SendMessage ( lbox, LB_SETCURSEL, 0, 0 ) != LB_ERR );
einfo->current_entry = einfo->tbl->first_entry;
einfo->current_pos = 0;
}
}
}
return ( ok );
}
Bool WPasteAccelItem( WAccelEditInfo *einfo )
{
WAccelEntry entry;
void *data;
uint_32 dsize;
Bool ok;
data = NULL;
entry.symbol = NULL;
ok = ( einfo != NULL );
if( ok ) {
ok = WGetClipData( einfo->win, WItemClipbdFormat, &data, &dsize );
}
if( ok ) {
ok = WMakeEntryFromClipData( &entry, data, dsize );
}
if( ok ) {
WResolveEntrySymbol( &entry, einfo->info->symbol_table );
ok = WSetEditWindowKeyEntry( einfo, &entry );
}
if( ok ) {
ok = WInsertAccelEntry( einfo );
}
if( entry.symbol ) {
WMemFree( entry.symbol );
}
if( data ) {
WMemFree( data );
}
return( ok );
}
Bool WClipAccelItem( WAccelEditInfo *einfo, Bool cut )
{
HWND lbox;
LRESULT index;
WAccelEntry *entry;
void *data;
uint_32 dsize;
Bool ok;
data = NULL;
ok = ( einfo != NULL );
if( ok ) {
lbox = GetDlgItem ( einfo->edit_dlg, IDM_ACCEDLIST );
ok = ( lbox != (HWND)NULL );
}
if( ok ) {
index = SendMessage ( lbox, LB_GETCURSEL, 0, 0 );
ok = ( index != LB_ERR );
}
if( ok ) {
entry = (WAccelEntry *)
SendMessage( lbox, LB_GETITEMDATA, (WPARAM)index, 0 );
ok = ( entry != NULL );
}
if( ok ) {
ok = WMakeEntryClipData( entry, &data, &dsize );
}
if( ok ) {
ok = WCopyClipData( einfo->win, WItemClipbdFormat, data, dsize );
}
if( ok ) {
if( cut ) {
ok = WDeleteAccelEntry( einfo );
}
}
if( data != NULL ) {
WMemFree( data );
}
return( ok );
}
static Bool WQueryChangeEntry( WAccelEditInfo *einfo )
{
int ret;
UINT style;
char *title;
char *text;
style = MB_YESNO | MB_APPLMODAL | MB_ICONEXCLAMATION;
title = WCreateEditTitle( einfo );
text = WAllocRCString( W_CHANGEMODIFIEDMENUITEM );
ret = MessageBox( einfo->edit_dlg, text, title, style );
if( text ) {
WFreeRCString( text );
}
if( title ) {
WMemFree( title );
}
if( ret == IDYES ) {
return( TRUE );
}
return( FALSE );
}
void WDoHandleSelChange( WAccelEditInfo *einfo, Bool change, Bool reset )
{
HWND lbox;
LRESULT index;
WAccelEntry *entry;
Bool mod;
if ( !einfo ) {
return;
}
lbox = GetDlgItem ( einfo->edit_dlg, IDM_ACCEDLIST );
if ( lbox == (HWND) NULL ) {
return;
}
index = SendMessage ( lbox, LB_GETCURSEL, 0, 0 );
if ( index != LB_ERR ) {
entry = (WAccelEntry *)
SendMessage ( lbox, LB_GETITEMDATA, (WPARAM) index, 0 );
} else {
entry = NULL;
}
if( einfo->current_entry && !reset ) {
mod = WGetEditWindowKeyEntry( einfo, einfo->current_entry, TRUE );
if( mod && ( einfo->current_pos != -1 ) ) {
if( change || WQueryChangeEntry( einfo ) ) {
WGetEditWindowKeyEntry( einfo, einfo->current_entry, FALSE );
einfo->info->modified = TRUE;
SendMessage( lbox, LB_DELETESTRING, einfo->current_pos, 0 );
WAddEditWinLBoxEntry( einfo, einfo->current_entry,
einfo->current_pos );
}
}
}
if( entry ) {
if( change ) {
uint_16 id;
if( entry->is32bit ) {
id = entry->entry32.Id;
} else {
id = (uint_16) entry->entry.Id;
}
WSetEditWindowID( einfo->edit_dlg, entry->symbol, id );
} else {
WSetEditWindowKeyEntry( einfo, entry );
}
}
einfo->current_entry = entry;
einfo->current_pos = (index == LB_ERR) ? -1 : index;
if ( index != LB_ERR ) {
SendMessage ( lbox, LB_SETCURSEL, (WPARAM) index, 0 );
}
}
void WHandleChange( WAccelEditInfo *einfo )
{
WDoHandleSelChange( einfo, TRUE, FALSE );
}
void WHandleSelChange( WAccelEditInfo *einfo )
{
WDoHandleSelChange( einfo, FALSE, FALSE );
}
LRESULT WINEXPORT WAcccelEditProc ( HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam )
{
WAccelEditInfo *einfo;
HWND win;
RECT r;
POINT p;
LRESULT ret;
WORD wp;
WORD cmd;
ret = FALSE;
einfo = (WAccelEditInfo *) GetWindowLong ( hDlg, DWL_USER );
switch ( message ) {
case WM_INITDIALOG:
einfo = (WAccelEditInfo *) lParam;
einfo->edit_dlg = hDlg;
SetWindowLong( hDlg, DWL_USER, (LONG) einfo );
WRAddSymbolsToComboBox( einfo->info->symbol_table, hDlg,
IDM_ACCEDCMDID, WR_HASHENTRY_ALL );
ret = TRUE;
break;
case WM_SYSCOLORCHANGE:
WCtl3dColorChange();
break;
#if 0
#ifdef __NT__
case WM_CTLCOLORBTN:
case WM_CTLCOLORDLG:
case WM_CTLCOLOREDIT:
case WM_CTLCOLORLISTBOX:
case WM_CTLCOLORMSGBOX:
case WM_CTLCOLORSCROLLBAR:
case WM_CTLCOLORSTATIC:
#else
case WM_CTLCOLOR:
#endif
return( (LRESULT)WCtl3dCtlColorEx( message, wParam, lParam ) );
#endif
case WM_LBUTTONDBLCLK:
case WM_RBUTTONDBLCLK:
case WM_RBUTTONUP:
MAKE_POINT( p, lParam );
win = GetDlgItem ( hDlg, IDM_ACCEDRNAME );
GetClientRect( win, &r );
MapWindowPoints( win, hDlg, (POINT *)&r, 2 );
if( PtInRect( &r, p ) ) {
WHandleRename( einfo );
}
ret = TRUE;
break;
#if 0
case WM_PARENTNOTIFY:
cmd = GET_WM_PARENTNOTIFY_EVENT(wParam,lParam);
switch( cmd ) {
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
MAKE_POINT( p, lParam );
win = GetDlgItem ( hDlg, IDM_ACCEDLIST );
GetWindowRect( win, &r );
MapWindowPoints( HWND_DESKTOP, hDlg, (POINT *)&r, 2 );
if( PtInRect( &r, p ) ) {
WHandleSelChange( einfo );
}
break;
}
ret = TRUE;
break;
#endif
case WM_COMMAND:
wp = LOWORD(wParam);
cmd = GET_WM_COMMAND_CMD(wParam,lParam);
switch( wp ) {
case IDM_ACCEDINSERT:
WInsertAccelEntry( einfo );
break;
case IDM_ACCEDCHANGE:
WHandleChange( einfo );
break;
case IDM_ACCEDRESET:
WDoHandleSelChange( einfo, FALSE, TRUE );
break;
case IDM_ACCEDSETACC:
if( einfo->tbl && einfo->tbl->num ) {
WHandleSelChange( einfo );
} else {
WInsertAccelEntry( einfo );
}
break;
#if 0
case IDM_ACCEDCMDID:
if( cmd == CBN_SELCHANGE ) {
einfo->combo_change = TRUE;
WHandleSelChange( einfo );
einfo->combo_change = FALSE;
}
break;
#endif
case IDM_ACCEDLIST:
if( cmd == LBN_SELCHANGE ) {
WHandleSelChange( einfo );
}
break;
case IDM_ACCEDVIRT:
case IDM_ACCEDASCII:
if ( cmd == BN_CLICKED ) {
WSetVirtKey ( hDlg, ( wp == IDM_ACCEDVIRT ) );
}
break;
}
break;
}
return ( ret );
}
LRESULT WINEXPORT WTestProc( HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam )
{
RECT r;
_wtouch(wParam);
_wtouch(lParam);
if( message == WM_INITDIALOG ) {
GetWindowRect( hDlg, &r );
appWidth = r.right - r.left + 10;
appHeight = r.bottom - r.top + 85;
DestroyWindow( hDlg );
return( TRUE );
}
return( FALSE );
}
void WInitEditDlg( HINSTANCE inst, HWND parent )
{
FARPROC lpProc;
lpProc = MakeProcInstance( (FARPROC) WTestProc, inst );
JCreateDialog( inst, "WAccelEditDLG", parent, (DLGPROC) lpProc );
FreeProcInstance( lpProc );
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -