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

📄 dialog.c

📁 这是早期MiniGUI DOS版本的最终版
💻 C
📖 第 1 页 / 共 5 页
字号:
    for(i=0; i<pDlgHeader->NumOfItems; i++)
    {   
        pCtrlData = pDlgHeader->pCtrlData + i;
        if((pCtrlData->wID) == IDCANCEL)
            return TRUE;
    }
    
    return FALSE;
}

/*
 * Function: PCTRLDATA GUIAPI GetControlData( PDLGHEADER pDlgHeader, WORD wID ).
 *      This function get the pointer to CONTROLDATA struct 
 *     according to control's ID.
 * Parameters:
 *      wID: ID of control;
 * Return: 
 *      success----the pointer to CONTROLDATA struct;
 *      failure----NULL.
 */
PCTRLDATA GUIAPI GetControlData( PDLGHEADER pDlgHeader, WORD wID )
{
    short i;
    PCTRLDATA pCtrlData;
    
    for(i=0; i<pDlgHeader->NumOfItems; i++)
    {   
        pCtrlData = pDlgHeader->pCtrlData + i;
        if((pCtrlData->wID) == wID)
            return pCtrlData;
    }
    
    return NULL;
}

void GUIAPI GetControlRect( PDLGHEADER pDlgHeader, WORD wID, LPRECT lpRect)
{
    PCTRLDATA pCtrlData = GetControlData(pDlgHeader, wID);
    
    if(pCtrlData == NULL)
        return;
    
    lpRect->left = pCtrlData->lx;
    lpRect->top = pCtrlData->ty;
    lpRect->right = pCtrlData->rx;
    lpRect->bottom = pCtrlData->by;
}

/*
 * Function: static PCTRLDATA GetNextTabstop( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData ).
 *      This function get the next control with style of WS_TABSTOP.
 * Parameters:
 *      pCtrlData: given control's pointer;
 * Return: 
 *      success----pointer to expect control;
 *      failure----given pointer.
 */
static PCTRLDATA GetNextTabstop( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData )
{
    short i;
    PCTRLDATA pFirst = NULL;
            
    for(i=0; i<pDlgHeader->NumOfItems; i++)
    {   
        if(((pDlgHeader->pCtrlData + i)->lStyle) & WS_TABSTOP)
        {
            pFirst = pDlgHeader->pCtrlData + i;
            break;
        }
    }
    if(pFirst == NULL)
        return pCtrlData;
    
    while(pCtrlData != (pDlgHeader->pCtrlData + pDlgHeader->NumOfItems-1))
    {
        pCtrlData++;
        if((pCtrlData->lStyle) & WS_TABSTOP)
            return  pCtrlData;
            
    }
    
    return pFirst;
}
/*
 * Function: static PCTRLDATA GetLastTabstop( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData ).
 *      This function get the previous control with style of WS_TABSTOP.
 * Parameters:
 *      pCtrlData: given control's pointer;
 * Return: 
 *      success----pointer to expect control;
 *      failure----pointer to given pointer.
 */
static PCTRLDATA GetLastTabstop( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData )
{
    short i;
    PCTRLDATA pLast = NULL;
            
    for(i=0; i<pDlgHeader->NumOfItems; i++)
    {   
        if(((pDlgHeader->pCtrlData + i)->lStyle) & WS_TABSTOP)
            pLast = pDlgHeader->pCtrlData + i;
    }
    if(pLast == NULL)
        return pCtrlData;
    
    while( pCtrlData != pDlgHeader->pCtrlData )
    {
        pCtrlData--;
        if((pCtrlData->lStyle) & WS_TABSTOP)
            return  pCtrlData;
    }
    
    return pLast;
}
/*
 * Function: static PCTRLDATA GetNextItemInGroup( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData ).
 *      This function get the next control that is in a group with 
 *     given control.
 * Parameters:
 *      pCtrlData: given control's pointer;
 * Return: 
 *      success----pointer to expect control;
 *      failure----given pointer.
 */
static PCTRLDATA GetNextItemInGroup( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData )
{
    short i = 0;
    PCTRLDATA pFirstInGrp = NULL;
                     
    do
    {
        if(((pDlgHeader->pCtrlData+i)->lStyle) & WS_GROUP)
            pFirstInGrp = pDlgHeader->pCtrlData + i;
        i++;
    }while((pDlgHeader->pCtrlData+i) != pCtrlData);
    
    if(pCtrlData->lStyle & WS_GROUP)
        pFirstInGrp = pCtrlData;
        
    if(pFirstInGrp == NULL)
        return pCtrlData;
        
    pCtrlData++;
    if(pCtrlData == (pDlgHeader->pCtrlData + pDlgHeader->NumOfItems))
        return pFirstInGrp;
        
    if(!(pCtrlData->lStyle & WS_GROUP))
        return pCtrlData;
    
    return pFirstInGrp;
}

/*
 * Function: static PCTRLDATA GetLastItemInGroup( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData ).
 *      This function get the previous control that is a group with 
 *     given control.
 * Parameters:
 *      pCtrlData: given control's pointer;
 * Return: 
 *      success----pointer to expect control;
 *      failure----given pointer 
 */
static PCTRLDATA GetLastItemInGroup( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData )
{
    short i = 1;
    PCTRLDATA pLastInGrp = NULL;
                     
    while((pCtrlData + i) != (pDlgHeader->pCtrlData + pDlgHeader->NumOfItems))
    {
        if(((pCtrlData + i)->lStyle) & WS_GROUP)
        {
            pLastInGrp = pCtrlData + i - 1;
            break;
        }
        i++;
    }
    
    if(pLastInGrp == NULL)
        return pCtrlData;
        
    if(pCtrlData->lStyle & WS_GROUP)
        return pLastInGrp;
    else
        return --pCtrlData;
}

/*
 * Function: void GUIAPI GrayDlgItem( PDLGHEADER pDlgHeader, WORD wID ).
 *      This function gray/disable the given control. 
 * Parameters:
 *      pDlgHeader: the pointer to DLGHEADER structure
 *      wID: given control's ID;
 * Return: 
 *      None.
 */
void GUIAPI GrayDlgItem( PDLGHEADER pDlgHeader, WORD wID)
{    
    PCTRLDATA pCtrlData;
    
    if(!(pCtrlData = GetControlData(pDlgHeader, wID)))
        return;
    
    if(pCtrlData->lStyle & WS_DISABLED)
        return;
    
    if(pCtrlData->lStyle & WS_CHECKED)
    {
        pCtrlData->lStyle &= 0xffffefffL;
        _setcolor(7);
        _ellipse(_GFILLINTERIOR, pCtrlData->lx + 4, pCtrlData->ty + 4,pCtrlData->lx + 12,pCtrlData->ty + 12);
                    pCtrlData->lStyle &= 0xffffefffL;
    }       
    pCtrlData->lStyle |= WS_DISABLED;
    
    _setcolor(COLOR_lightgray);
    _rectangle(_GFILLINTERIOR, pCtrlData->lx - 1, pCtrlData->ty - 1, pCtrlData->rx + 1, pCtrlData->by + 1);
    
    DrawCtrl(pCtrlData->bClass, pCtrlData->lStyle, 
        pCtrlData->lx, pCtrlData->ty, pCtrlData->rx, pCtrlData->by);
    DrawCtrlClientArea(pCtrlData);
}

/*
 * Function: void GUIAPI UngrayDlgItem( PDLGHEADER pDlgHeader, WORD wID ).
 *      This function ungray/enable the given control. 
 * Parameters:
 *      pDlgHeader: the pointer to DLGHEADER structure;
 *      wID: given control's ID;
 * Return: 
 *      None.
 */
void GUIAPI UngrayDlgItem( PDLGHEADER pDlgHeader, WORD wID)
{    
    PCTRLDATA pCtrlData;
    
    if(!(pCtrlData = GetControlData(pDlgHeader, wID)))
        return;
    
    if(!(pCtrlData->lStyle & WS_DISABLED))
        return;
        
    pCtrlData->lStyle &= 0xf7ffffffL;
    
    DrawCtrl(pCtrlData->bClass, pCtrlData->lStyle, 
        pCtrlData->lx, pCtrlData->ty, pCtrlData->rx, pCtrlData->by);
    DrawCtrlClientArea(pCtrlData);
}

void GUIAPI ShowDlgItem( PDLGHEADER pDlgHeader, WORD wID )
{
    PCTRLDATA pCtrlData;
    
    if(!(pCtrlData = GetControlData(pDlgHeader, wID)))
        return;
    
    pCtrlData->lStyle &= 0xf7ffffffL;
    
    DrawCtrl(pCtrlData->bClass, pCtrlData->lStyle, 
        pCtrlData->lx, pCtrlData->ty, pCtrlData->rx, pCtrlData->by);
    DrawCtrlClientArea(pCtrlData);
}

void GUIAPI HideDlgItem( PDLGHEADER pDlgHeader, WORD wID )
{
    PCTRLDATA pCtrlData;
    
    if(!(pCtrlData = GetControlData(pDlgHeader, wID)))
        return;
    
    pCtrlData->lStyle |= WS_DISABLED;
    
    _setcolor(COLOR_lightgray);
    _rectangle(_GFILLINTERIOR, pCtrlData->lx - 1, pCtrlData->ty - 1, pCtrlData->rx + 1, pCtrlData->by + 1);
}

/*
 * Function: void GUIAPI DrawTextInStaticItem( PDLGHEADER pDlgHeader, WORD wID, LPSTR lpStr )
 *      This function output text in the specified static control.
 * Parameters:
 *      pDlgHeader: the pointer to DLGHEADER structure;
 *      wID: given control's ID;
 *      lpStr: the text that want to output;
 * Return: 
 *      None.
 */
void GUIAPI DrawTextInStaticItem( PDLGHEADER pDlgHeader, WORD wID, LPCSTR lpStr )
{
    PCTRLDATA pCtrlData;
    short buttonx, buttony;
    
    if(!(pCtrlData = GetControlData(pDlgHeader, wID)))
        return;
    
    set_cliprgn(pCtrlData->lx, pCtrlData->ty, pCtrlData->rx, pCtrlData->by);

    _setcolor(7);
    _rectangle(_GFILLINTERIOR, pCtrlData->lx, pCtrlData->ty, pCtrlData->rx, pCtrlData->by);
    
    buttony = (pCtrlData->ty
            + pCtrlData->by)/2
            - 8;
    switch((pCtrlData->lStyle) & 0x0000000fL)
    {
        case ES_RIGHT:
            buttonx = pCtrlData->rx
                    - _fstrlen(lpStr) * 8;
        break;
        
        case ES_LEFT:
            buttonx = pCtrlData->lx;
        break;
        
        case ES_CENTER:
            buttonx = (pCtrlData->lx
                        + pCtrlData->rx)/2
                    - _fstrlen(lpStr) * 4;
        break;
        
        default:
            buttonx = pCtrlData->lx;
        break;
        
    }
    
    set_color(0);
    if(pCtrlData->lStyle & WS_DISABLED)
        SetGrayTextMask();
    cc_printf(lpStr, buttonx, buttony);
    if(pCtrlData->lStyle & WS_DISABLED)
        RemoveDisplayMask();
        
    set_cliprgn(0, 0, vc.numxpixels - 1, vc.numypixels - 1);
}

static BOOL bIsSysMsgBox = FALSE;
/*
 * Function: int GUIAPI SysMessageBox( PGUIINFO pGUIInfo, int Index, LPSTR lpImpMsg).
 *      This function manage a system message box. 
 * Parameters:
 *      Index: the index of MessageBox;
 *      lpImpMsg: the pointer to important message string.
 * Return: 
 *      the choice of MessageBox, such as OK, CANCEL etc..
 */
int GUIAPI SysMessageBox( PGUIINFO pGUIInfo, LPCSTR lpszText, LPCSTR lpszCaption, DWORD lStyle)
{
    int iRet;
    
    bIsSysMsgBox = TRUE;
    iRet = MessageBox(pGUIInfo, lpszText, lpszCaption, lStyle);
    bIsSysMsgBox = FALSE;
    
    return iRet;
}

/*
 * Function: int GUIAPI MessageBox( PGUIINFO pGUIInfo, int Index, LPSTR lpImpMsg).
 *      This function manage a message box. 
 * Parameters:
 *      Index: the index of MessageBox;
 *      lpImpMsg: the pointer to important message string.
 * Return: 
 *      the choice of MessageBox, such as OK, CANCEL etc..
 */
int GUIAPI MessageBox( PGUIINFO pGUIInfo, LPCSTR lpszText, LPCSTR lpszCaption, DWORD lStyle)
{
    int          i;
    int          iNumOfRow, iMaxCol, iCol;
    short        Width, Height;
    _vmhnd_t     hdlImage;
    int          iRetCtrl = 0;
    int          CtrlRet[3];
    int          RetValue;
    MSG          Msg;
    BOOL         fEND = FALSE;
    CTRLDATA     CtrlData[3] = {
                    {BS_PUSHBUTTON | WS_TABSTOP,
                     0, 0, 0, 0, 1, BUTTON, NULL, NULL},
                    {BS_PUSHBUTTON | WS_TABSTOP,

⌨️ 快捷键说明

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