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

📄 cpsk_skin.c

📁 VC++视频开发实例集锦(包括“远程视频监控”"语音识别系统"等13个经典例子)
💻 C
📖 第 1 页 / 共 2 页
字号:
    {
        pRect = &pSkin->mpl_rVScrollBar_Track_Tile;
        ppImage = &pSkin->mpl_pVScrollBar_TrackDn;
    }
    else
        return;

    // Set data members
    if(*ppImage)
        CPIG_DestroyImage(*ppImage);
    *ppImage = CPIG_CreateImage_FromSubFile(hComposite, cFile);
    *pRect = rTileBorders;
    if(*ppImage)
    {
        pRect->right = (*ppImage)->m_szSize.cx - rTileBorders.right;
        pRect->bottom = (*ppImage)->m_szSize.cy - rTileBorders.bottom;
    }
}
//
//
//
void CPSK_ReadSkinCommand_ButtonDraw(CP_COMPOSITEFILE hComposite, CPs_Skin* pSkin, const char* pcParams)
{
    char cElement[32];
    char cStates[12];
    char cFile[128];
    CPs_Image_WithState** ppImage;
    int iNumStates;

    // Decode params
    if(sscanf(pcParams, " %32[A-Za-z_-] , \"%128[^\"]\" , %12s ",
              cElement, cFile, cStates) != 3)
    {
        return;
    }

    // Setup number of states
    if(stricmp(cStates, "2State") == 0)
        iNumStates = 2;
    else
        iNumStates = 2;

    // Decide which data members are affected by this command
    if(stricmp(cElement, "HScrollBar_Left") == 0)
    {
        ppImage = &pSkin->mpl_pHScrollBar_Left;
    }
    else if(stricmp(cElement, "HScrollBar_Right") == 0)
    {
        ppImage = &pSkin->mpl_pHScrollBar_Right;
    }
    else if(stricmp(cElement, "VScrollBar_Up") == 0)
    {
        ppImage = &pSkin->mpl_pVScrollBar_Up;
    }
    else if(stricmp(cElement, "VScrollBar_Down") == 0)
    {
        ppImage = &pSkin->mpl_pVScrollBar_Down;
    }
    else
        return;

    // Set data members
    if(*ppImage)
        CPIG_DestroyImage_WithState(*ppImage);
    *ppImage = CPIG_CreateStateImage(CPIG_CreateImage_FromSubFile(hComposite, cFile), iNumStates);
}
//
//
//
DWORD CPSK_DecodeAlign(const char* pcAlign)
{
    char cAlign[1024];
    char cAlign_Remains[128];
    char cAlignFlag[128];
    DWORD dwAlignFlag = 0;

    strcpy(cAlign, pcAlign);
    while(sscanf(cAlign, " %128[a-zA-Z_] | %[^\0]", cAlignFlag, cAlign_Remains) > 0)
    {
        strcpy(cAlign, cAlign_Remains);
        cAlign_Remains[0] = '\0';

        if(stricmp(cAlignFlag, "ALIGN_LEFT") == 0)
            dwAlignFlag |= CPC_COMMANDTARGET_ALIGN_LEFT;
        else if(stricmp(cAlignFlag, "ALIGN_TOP") == 0)
            dwAlignFlag |= CPC_COMMANDTARGET_ALIGN_TOP;
        else if(stricmp(cAlignFlag, "ALIGN_RIGHT") == 0)
            dwAlignFlag |= CPC_COMMANDTARGET_ALIGN_RIGHT;
        else if(stricmp(cAlignFlag, "ALIGN_BOTTOM") == 0)
            dwAlignFlag |= CPC_COMMANDTARGET_ALIGN_BOTTOM;
    }

    return dwAlignFlag;
}
//
//
//
void CPSK_ReadSkinCommand_AddVerb(CP_COMPOSITEFILE hComposite, CPs_CommandTarget** ppCommandTarget, const char* pcParams)
{
    char cElement[32];
    char cStates[12];
    char cAlign[128];
    char cFile[128];
    int iNumStates;
    POINT ptOffset;
    wp_Verb pfnVerb = NULL;
    DWORD dwAlignFlag;
    CPs_CommandTarget* pNext;

    // Decode params
    if(sscanf(pcParams, " %32[A-Za-z_-] , \"%128[^\"]\" , %12[0-9a-zA-Z] , %d , %d , \"%128[^\"]\" ",
              cElement, cFile, cStates, &ptOffset.x, &ptOffset.y, cAlign) != 6)
    {
        return;
    }

    // Setup number of states
    if(stricmp(cStates, "3State") == 0)
        iNumStates = 3;
    else
        iNumStates = 2;

    // Find the verb with this name
    {
        int iVerbIDX;
        CPs_VerbQueryName queryname;

        queryname.m_pcName = cElement;
        queryname.m_bNameMatched = FALSE;
        for(iVerbIDX = 0; glb_pfnAllVerbs[iVerbIDX]; iVerbIDX++)
        {
            glb_pfnAllVerbs[iVerbIDX](vaQueryName, &queryname);
            if(queryname.m_bNameMatched)
            {
                pfnVerb = glb_pfnAllVerbs[iVerbIDX];
                break;
            }
        }
    }

    // Build the align flags
    dwAlignFlag = CPSK_DecodeAlign(cAlign);

    // Load state image
    pNext = *ppCommandTarget;
    *ppCommandTarget = (CPs_CommandTarget*)malloc(sizeof(CPs_CommandTarget));
    (*ppCommandTarget)->m_pStateImage = CPIG_CreateStateImage(CPIG_CreateImage_FromSubFile(hComposite, cFile), iNumStates);
    (*ppCommandTarget)->m_ptOffset = ptOffset;
    (*ppCommandTarget)->m_dwAlign = dwAlignFlag;
    (*ppCommandTarget)->m_pfnVerb = pfnVerb;
    (*ppCommandTarget)->m_pNext = pNext;
}
//
//
//
void CPSK_ReadSkinCommand_AddIndicator(CP_COMPOSITEFILE hComposite, CPs_Skin* pSkin, const char* pcParams)
{
    char cElement[32];
    char cAlign[128];
    RECT rOffset;
    DWORD dwAlignFlag;
    CPs_Indicator* pNext;

    // Decode params
    if(sscanf(pcParams, " %32[A-Za-z_-] , %d , %d , %d , %d , \"%128[^\"]\" ",
              cElement, &rOffset.left, &rOffset.top, &rOffset.right, &rOffset.bottom, cAlign) != 6)
    {
        return;
    }

    // Build the align flags
    dwAlignFlag = CPSK_DecodeAlign(cAlign);

    // Load state image
    pNext = pSkin->mpl_pIndicators;
    pSkin->mpl_pIndicators = (CPs_Indicator*)malloc(sizeof(CPs_Indicator));
    pSkin->mpl_pIndicators->m_pNext = pNext;
    pSkin->mpl_pIndicators->m_dwAlign = dwAlignFlag;
    pSkin->mpl_pIndicators->m_rAlign = rOffset;
    STR_AllocSetString(&pSkin->mpl_pIndicators->m_pcName, cElement, FALSE);

}
void CPSK_ReadSkinCommand_AddPlaylistVerb(CP_COMPOSITEFILE hComposite, CPs_Skin* pSkin, const char* pcParams)
{
    CPSK_ReadSkinCommand_AddVerb(hComposite, &pSkin->mpl_pCommandTargets, pcParams);
}
//
//
//
void CPSK_ReadSkinLine(CP_COMPOSITEFILE hComposite, CPs_Skin* pSkin, const char* pcLine)
{
    char cCommand[32];
    char cParams[480];

    // Decode command
    if(sscanf(pcLine, " %32s %480[^\0]", cCommand, cParams) != 2)
        return;

    // Skip comments
    if(cCommand[0] == '#')
        return;

    CP_TRACE2("Command:\"%s\" Params:\"%s\"", cCommand, cParams);
    if(stricmp(cCommand, "define") == 0)
        CPSK_ReadSkinCommand_Define(hComposite, pSkin, cParams);
    else if(stricmp(cCommand, "tileddraw") == 0)
        CPSK_ReadSkinCommand_TiledDraw(hComposite, pSkin, cParams);
    else if(stricmp(cCommand, "buttondraw") == 0)
        CPSK_ReadSkinCommand_ButtonDraw(hComposite, pSkin, cParams);
    else if(stricmp(cCommand, "addplaylistverb") == 0)
        CPSK_ReadSkinCommand_AddPlaylistVerb(hComposite, pSkin, cParams);
    else if(stricmp(cCommand, "addplaylistindicator") == 0)
        CPSK_ReadSkinCommand_AddIndicator(hComposite, pSkin, cParams);
}
//
//
//
CPs_Skin* CPSK_LoadSkin(CP_COMPOSITEFILE hComposite, const char* pcSkinFile, const unsigned int iFileSize)
{
    unsigned int iLastLineStartIDX, iCharIDX;
    CPs_Skin* pNewSkin = (CPs_Skin*)malloc(sizeof(CPs_Skin));
    memset(pNewSkin, 0, sizeof(*pNewSkin));

    // Read in the file line by line
    iLastLineStartIDX = 0;
    for(iCharIDX = 0; iCharIDX < iFileSize+1; iCharIDX++)
    {
        if( (pcSkinFile[iCharIDX] == '\r'
                || pcSkinFile[iCharIDX] == '\n'
                || iCharIDX == iFileSize)
                && iLastLineStartIDX < iCharIDX)
        {
            char cBuffer[512];
            int iBytesOnLine;

            iBytesOnLine = iCharIDX-iLastLineStartIDX;
            if(iBytesOnLine >= 512)
                iBytesOnLine = 511;
            memcpy(cBuffer, pcSkinFile + iLastLineStartIDX, iBytesOnLine);
            cBuffer[iBytesOnLine] = '\0';
            CPSK_ReadSkinLine(hComposite, pNewSkin, cBuffer);

            // Set the line start for the next line
            if(pcSkinFile[iCharIDX + 1] == '\n')
                iCharIDX++;
            iLastLineStartIDX = iCharIDX + 1;
        }
    }

    return pNewSkin;
}
//
//
//

⌨️ 快捷键说明

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