Team OS/2 Italia - Developer Assistant

------------------------------------------

INI Copier v1.00

Un esempio di programma PM Multi-Threaded

about.c

/***************************************************************************
 
 About Box for INI Copier
 
 ****************************************************************************/

#define INCL_WINMENUS
#define INCL_WINFRAMEMGR

#include "global.h"

void SetSysMenu(HWND hDlg);

/* Questa funzione gestisce i messaggi della finestra About */
#if (defined(__IBMC__) || defined(__IBMCPP__))
/* Questa #pragma serve per esportare i simboli con il VisualAge */
	#pragma export(AboutWndProc,"AboutWndProc",100)
#endif
LINKAGE MRESULT EXPENTRY AboutWndProc(HWND hDlg,
                                      ULONG msg,
                                      MPARAM mParam1,
                                      MPARAM mParam2)
{
    switch(msg)
    {
/* Nell'inizializzazione della finestra modifico il menu` di sistema */
        case WM_INITDLG:
            SetSysMenu(hDlg);
            break;
            
/* Al primo comando che arriva chiudo la finestra */
        case WM_COMMAND:
            WinDismissDlg(hDlg,TRUE);
            break;
            
/* default meassage processing */
        default:
            return WinDefDlgProc(hDlg,msg,mParam1,mParam2);
            break;
    }
    return (MRESULT)FALSE;
}


/* Modifica il menu` di sistema in modo che rimangano solo le voci 'Move' e
 'Close' */
void SetSysMenu(HWND hDlg)
{
    HWND    	hSysMenu; /* handle del menu` di sistema */
    MENUITEM    mItem;    /* Struttura relativa ad una voce del menu */
    ULONG       Pos;      /* Posizione nel menu */
    MRESULT     Id;       /* ID della voce nel menu` */
    SHORT       cItems;   /* Numero di voci nel menu */
    
/* ottengo l'handle del menu` di sistema della dialog window hDlg */
    hSysMenu=WinWindowFromID(hDlg,FID_SYSMENU);
    
/* ottengo la prima voce del menu` per avere l'handle del menu` a tendina */
    WinSendMsg(hSysMenu,MM_QUERYITEM,MPFROM2SHORT(SC_SYSMENU,FALSE),
               MPFROMP(&mItem));
    Pos=0;
    
/* Chiedo quante voci ci sono nella tendina */
    cItems=(SHORT)WinSendMsg(mItem.hwndSubMenu,MM_QUERYITEMCOUNT,
                             NULL,NULL);
    
/* Itero su tutte le voci del menu` cancellandole tutte eccetto 'Move' e
 'Close' */
    while(cItems--)
    {
        Id=WinSendMsg(mItem.hwndSubMenu,MM_ITEMIDFROMPOSITION,MPFROMLONG(Pos),
                      NULL);
        switch(SHORT1FROMMR(Id))
        {
            case SC_MOVE:
            case SC_CLOSE:
                Pos++;
                break;
            default:
                WinSendMsg(mItem.hwndSubMenu,MM_DELETEITEM,
                           MPFROM2SHORT((USHORT)Id,TRUE),NULL);
        }
    }
}

/* fine di about.c */

---------------------------------------------------

Torna alla nostra HomePage - Pagina a cura di: Giovanni Pagni
Last modified 20-11-96