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

📄 wdehints.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
,   { { 1,  5 },  NULL, WDE_HINT_ALIGNMENU              }
,   { { 1,  6 },  NULL, WDE_HINT_SIZEMENU               }
,   { { 1, 15 },  NULL, WDE_HINT_EDITSYMMENU            }
,   { { 2, -1 },  NULL, WDE_HINT_DIALOGMENU             }
,   { { 3, -1 },  NULL, WDE_HINT_CONTROLMENU            }
,   { { 4, -1 },  NULL, WDE_HINT_WINDOWMENU             }
,   { { 5, -1 },  NULL, WDE_HINT_HELPMENU               }
};

void WdeHandleMenuSelect ( WPARAM wParam, LPARAM lParam )
{
    HMENU menu;
    HMENU popup;
    WORD  flags;

    menu  = WdeGetMenuHandle();
    flags = GET_WM_MENUSELECT_FLAGS(wParam,lParam);

    if( ( flags == (WORD)-1 ) &&
         ( GET_WM_MENUSELECT_HMENU(wParam,lParam) == (HMENU)NULL ) ) {
        WdeSetStatusText ( NULL, "", TRUE );
    } else if ( flags & (MF_SYSMENU | MF_SEPARATOR) ) {
        WdeSetStatusText ( NULL, "", TRUE );
    } else if ( flags & MF_POPUP ) {
        popup = (HMENU) GET_WM_MENUSELECT_ITEM(wParam,lParam);
        #ifdef __NT__
            popup = GetSubMenu( (HMENU)lParam, (int)popup );
        #endif
        WdeHandlePopupHint ( menu, popup );
    } else {
        WdeDisplayHint ( (int) GET_WM_MENUSELECT_ITEM(wParam,lParam) );
    }
}

void WdeDisplayHint ( int id )
{
    char        *buf;
    char        *mditext;
    WdeHintItem *hint;

    if( id < WDE_MDI_FIRST ) {
        hint = WdeGetHintItem ( id );
        if( hint ) {
            WdeSetStatusByID( -1, hint->hint );
        }
    } else {
        mditext = WdeAllocRCString( WDE_HINT_MDIMSG );
        if( mditext ) {
            buf = WdeMemAlloc( strlen(mditext) + 20 + 1 );
            if( buf ) {
                sprintf( buf, mditext, WDE_MDI_FIRST + 1 - id );
                WdeSetStatusText( NULL, buf, TRUE );
                WdeMemFree( buf );
            }
            WdeFreeRCString( mditext );
        }
    }

    return;
}

WdeHintItem *WdeGetHintItem ( int id )
{
    int i;

    for ( i = 0; WdeHints[i].id != -1; i++ ) {
        if ( WdeHints[i].id == id ) {
            return ( &(WdeHints[i]) );
        }
    }

    return ( NULL );
}

WdePopupListItem *WdeFindPopupListItem ( HMENU menu )
{
    LIST             *plist;
    WdePopupListItem *p;

    for ( plist = WdePopupList; plist; plist = ListNext ( plist ) ) {
        p = (WdePopupListItem *) ListElement ( plist );
        if ( p->menu == menu ) {
            return ( p );
        }
    }

    return ( NULL );
}

DWORD WdeGetPopupHint( WdePopupListItem *p, HMENU popup )
{
    int i;

    for( i = 0; i < p->num; i++ ) {
        if( p->hint_items[i].popup == popup ) {
            return( p->hint_items[i].hint );
        }
    }

    return( -1 );
}

void WdeHandlePopupHint( HMENU menu, HMENU popup )
{
    WdePopupListItem    *p;
    DWORD               hint;

    hint = -1;

    p = WdeFindPopupListItem( menu );

    if( p ) {
        hint = WdeGetPopupHint( p, popup );
        if( hint != -1 ) {
            WdeSetStatusByID( -1, hint );
        }
    }

    if( hint == -1 ) {
        WdeSetStatusText( NULL, "", TRUE );
    }
}

Bool WdeInitHints ( void )
{
    Bool ret;

    ret = TRUE;

    if( !WdeIsDDE() ) {
        ret = WdeCreateWdePopupListItem( 4, WdeGetInitialMenuHandle(),
                                         WdeInitialPopupHints );
    }

    if( ret ) {
        if( WdeIsDDE() ) {
            ret = WdeCreateWdePopupListItem( 10, WdeGetResMenuHandle(),
                                             WdeDDEPopupHints );
        } else {
            ret = WdeCreateWdePopupListItem( 10, WdeGetResMenuHandle(),
                                             WdeResPopupHints );
        }
    }

    return ( ret );
}

void WdeFiniHints ( void )
{
    LIST             *plist;
    WdePopupListItem *p;

    for ( plist = WdePopupList; plist; plist = ListConsume ( plist ) ) {
        p = (WdePopupListItem *) ListElement ( plist );
        WdeMemFree ( p );
    }
}

Bool WdeCreateWdePopupListItem ( int num, HMENU menu,
                                 WdePopupHintItem *hint_items )
{
    WdePopupListItem *p;

    p = (WdePopupListItem *) WdeMemAlloc ( sizeof(WdePopupListItem) );

    if ( p ) {
        p->num        = num;
        p->menu       = menu;
        p->hint_items = hint_items;
        if ( WdeInitHintItems ( num, menu, hint_items ) ) {
            ListAddElt ( &WdePopupList, p );
        } else {
            WdeMemFree ( p );
            return ( FALSE );
        }
    } else {
        return ( FALSE );
    }

    return ( TRUE );
}

Bool WdeInitHintItems ( int num, HMENU menu, WdePopupHintItem *hint_items )
{
    int   i;
    int   j;
    HMENU popup;

    for ( i = 0; i < num; i++ ) {
        popup = menu;
        for ( j = 0;
              (j < MAX_NESTED_POPUPS) && (hint_items[i].loc[j] != -1);
              j++ ) {
            popup = GetSubMenu ( popup, hint_items[i].loc[j] );
        }
        hint_items[i].popup = popup;
    }

    return ( TRUE );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -