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

📄 wedit.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
        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 + -