国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【NX】NX二次開(kāi)發(fā)BlockUI集列表的詳細(xì)使用步驟

這篇具有很好參考價(jià)值的文章主要介紹了【NX】NX二次開(kāi)發(fā)BlockUI集列表的詳細(xì)使用步驟。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

最近使用NX二次開(kāi)發(fā),需要用到集列表,也就是SetList這個(gè)控件,然而網(wǎng)上相關(guān)的資料和范例實(shí)在是太少,有幸找到《NX二次開(kāi)發(fā)-BlockUI集列表的使用技巧》和《UG(NX)二次開(kāi)發(fā) BlockUI 集列表使用方法》,這兩篇文章,對(duì)我的幫助很大,但是因?yàn)槭褂玫木幊陶Z(yǔ)言不同(我使用的是c++),仍然遇到了很多困難,不過(guò)最終在我不斷的摸索和嘗試下,終于有個(gè)完整的使用流程,特此分享給需要的同學(xué),避免跟我一樣一下子不知道從何下手。

想快速獲取結(jié)果的可以直接看代碼,想看一下問(wèn)題的解決過(guò)程的,且聽(tīng)我娓娓道來(lái)。

對(duì)于集列表,它不同于一般的控件,一般的控件直接添加即可,而集列表則需要添加種子塊,那么種子塊如何添加呢,下面我將詳細(xì)說(shuō)明這個(gè)步驟。

項(xiàng)目原因,我就使用nx8.0的32位版本來(lái)做說(shuō)明,其他版本類似。

首先,打開(kāi)任意項(xiàng)目,然后打開(kāi)塊UI樣式編輯器,如下圖所示:

nx加工模塊的二次開(kāi)發(fā),nx二次開(kāi)發(fā),c++,開(kāi)發(fā)語(yǔ)言

?新建或者打開(kāi)任意界面,并且添加集列表:

nx加工模塊的二次開(kāi)發(fā),nx二次開(kāi)發(fā),c++,開(kāi)發(fā)語(yǔ)言

此時(shí)提示“錯(cuò)誤:缺少種子塊”。

我們需要新建或者使用已有的任意對(duì)話框dlx文件,并且在下方紅色方框位置填入文件名(dlx在同一目錄的情況下),如果種子塊在不同目錄,則使用種子塊dlx文件的全路徑。

此時(shí),錯(cuò)誤提示消失,并且自動(dòng)加入到主界面。

nx加工模塊的二次開(kāi)發(fā),nx二次開(kāi)發(fā),c++,開(kāi)發(fā)語(yǔ)言

?

?在集列表中可以設(shè)置是否自動(dòng)展開(kāi)以及列數(shù)等。

nx加工模塊的二次開(kāi)發(fā),nx二次開(kāi)發(fā),c++,開(kāi)發(fā)語(yǔ)言

以上是界面相關(guān),下面進(jìn)入代碼部分,這部分主要是我在前面兩篇文章的的幫助下摸索和嘗試出來(lái)的,特此分享關(guān)鍵代碼,項(xiàng)目原因部分不重要的代碼實(shí)現(xiàn)無(wú)法公開(kāi),可以自己考慮實(shí)現(xiàn),或者查閱資料,調(diào)用UG自帶的函數(shù)。

針對(duì)集列表,主要有兩個(gè)回調(diào)函數(shù),添加和刪除按鈕時(shí)的回調(diào)函數(shù),我無(wú)法直接找到相關(guān)的c++范例,不過(guò)后來(lái)我發(fā)現(xiàn),可以查看函數(shù)的聲明和參數(shù)來(lái)確定回調(diào)函數(shù)的樣式。

比如:對(duì)于集列表m_pListCurves,輸入set可以智能提示有如下回調(diào)函數(shù):

nx加工模塊的二次開(kāi)發(fā),nx二次開(kāi)發(fā),c++,開(kāi)發(fā)語(yǔ)言

而我們需要的就是AddHandler和DelHandler,那么如何添加這兩個(gè)回調(diào)函數(shù)呢,我們可以按F12,進(jìn)去聲明看一下:

nx加工模塊的二次開(kāi)發(fā),nx二次開(kāi)發(fā),c++,開(kāi)發(fā)語(yǔ)言

然后在AddCallback的地方再按下F12,此時(shí)就可以看到如下的聲明:

nx加工模塊的二次開(kāi)發(fā),nx二次開(kāi)發(fā),c++,開(kāi)發(fā)語(yǔ)言

這代表著,這個(gè)回調(diào)函數(shù)是以int為返回值,以 NXOpen::BlockStyler::SetList *為參數(shù)類型的函數(shù),同理,在下方可以看到Del的回調(diào)函數(shù)樣式:

typedef NXOpen::Callback2<int, NXOpen::BlockStyler::SetList *, NXOpen::BlockStyler::UIBlock *> DeleteCallback;

形如:

    // 集列表回調(diào)函數(shù)
    int addCurve_cb(NXOpen::BlockStyler::SetList *);
    int deleteCurve_cb(NXOpen::BlockStyler::SetList *, NXOpen::BlockStyler::UIBlock *);

于是,得到下面的代碼:

        // 這是添加按鈕的
        m_pListCurves->SetAddHandler(make_callback(this, &CAMFeatureAddCurveUI::addCurve_cb));

        // 這是刪除按鈕的
        m_pListCurves->SetDeleteHandler(make_callback(this, &CAMFeatureAddCurveUI::deleteCurve_cb));

供參考。

為了在點(diǎn)擊添加按鈕的時(shí)候,可以自動(dòng)有一些動(dòng)作,比如初始化界面等(這里說(shuō)一下,nx初始化界面一般是放在dialogShown_cb()中的,但是因?yàn)檫@個(gè)是作為list控件的種子塊,dialogShown_cb()并不會(huì)執(zhí)行,所以這種情況下的初始化應(yīng)該放在添加按鈕的回調(diào)函數(shù)中)。

代碼供參考:

int CAMFeatureAddCurveUI::addCurve_cb(NXOpen::BlockStyler::SetList *pList)
{
    // 點(diǎn)擊添加按鈕的時(shí)候,會(huì)添加一個(gè)你設(shè)置的seedDlx的那個(gè)ui
    UIBlock *pBlockUI = m_pListCurves->AddNewSet(true);

    // 這個(gè)是設(shè)置顯示的文本,第一列是序號(hào),后面是的列自己設(shè)置即可
    int nNewIndex = m_pListCurves->GetItems().size();
    NXString stIndex = AUTUMOONString::to_string(nNewIndex).c_str();
    stIndex = "曲線組" + stIndex;
    std::vector<NXString> vContenInList;
    vContenInList.push_back(stIndex);

    m_pListCurves->SetItemText(pBlockUI, vContenInList);

    // 針對(duì)控件的初始化

    // 強(qiáng)轉(zhuǎn)成NXOpen.BlockStyler.CompositeBlock,類似一個(gè)UI的集合,里面可以添加很多ui
    NXOpen::BlockStyler::CompositeBlock *compositeBlock = (NXOpen::BlockStyler::CompositeBlock *)pBlockUI;

    // 分別查找對(duì)應(yīng)的控件
    NXOpen::BlockStyler::UIBlock *edge_select0 = compositeBlock->FindBlock("edge_select0");
    NXOpen::BlockStyler::UIBlock *enumCamMethod = compositeBlock->FindBlock("enumCamMethod");
    NXOpen::BlockStyler::UIBlock *enumMaterialSide = compositeBlock->FindBlock("enumMaterialSide");
    NXOpen::BlockStyler::UIBlock *doubleProcessDis = compositeBlock->FindBlock("doubleProcessDis");
    NXOpen::BlockStyler::UIBlock *doubleSelToolDia = compositeBlock->FindBlock("doubleSelToolDia");
    NXOpen::BlockStyler::UIBlock *toggleRough = compositeBlock->FindBlock("toggleRough");
    NXOpen::BlockStyler::UIBlock *toggleFinish = compositeBlock->FindBlock("toggleFinish");

    doubleSelToolDia->AUTUMOONBLock_SetDouble(63.0);
    enumCamMethod->AUTUMOONBLock_SetEnum(0);
    enumMaterialSide->AUTUMOONBLock_SetEnum(0);
    edge_select0->Focus();

    // 計(jì)算加工距離
    Vector3d vec3d = m_pVectorZ->GetProperties()->GetVector("Vector");

    AUTUMOONMathVector3d ivecUserZ(vec3d.X, vec3d.Y, vec3d.Z);

    // 計(jì)算加工距離
    double dProcessDistance =
        CAMFeaRecognition::GetProcessDistanceEx(m_cfFeature.m_pvFaces, m_cfFeature.m_eCAMMachiningType, ivecUserZ);
    doubleProcessDis->AUTUMOONBLock_SetDouble(dProcessDistance);

    return 0;
}

其中的關(guān)鍵是獲取塊指針,用FindBlock來(lái)實(shí)現(xiàn)。

刪除功能的回調(diào)函數(shù),基本可以通用,如果你不需要進(jìn)行特別處理的話。

int CAMFeatureAddCurveUI::deleteCurve_cb(NXOpen::BlockStyler::SetList *pList, NXOpen::BlockStyler::UIBlock *pBlockUI)
{
    // GetSelected()返回選擇item的UIblock的數(shù)組
    for (int i = 0; i < m_pListCurves->GetSelected().size(); i++)
    {
        // 刪掉即可
        m_pListCurves->Delete(m_pListCurves->GetSelected()[i]);
    }

    return 0;
}

實(shí)際上,你會(huì)發(fā)現(xiàn),如果你的子塊不需要特殊的處理的話,你甚至都不需要子塊對(duì)應(yīng)的hpp文件和cpp文件,因?yàn)闊o(wú)論是設(shè)置還是讀取,都是在集列表所在的主界面中實(shí)現(xiàn)的。

下面講一下,如何獲取集列表中的值,實(shí)際上在上面的回調(diào)函數(shù)代碼中已經(jīng)有了,不過(guò)這里還是專門寫一下,代碼供參考:

 //author:autumoon
//郵箱:9506@163.com
//日期:2023-08-17 
           //---------Enter your code here-----------
            // 用戶選擇的方向
            Vector3d vec3d = m_pVectorZ->GetProperties()->GetVector("Vector");

            AUTUMOONMathVector3d ivecUserZ(vec3d.X, vec3d.Y, vec3d.Z);

            if (m_cfFeature.m_pvFaces.size() == 0)
            {
                uc1601("請(qǐng)選擇面!", 1);
                return -1;
            }

            Face *pFirstFace = m_cfFeature.m_pvFaces[0];

            AUTUMOONMathVector3d vecLaw = CAMFeaRecognition::GetFaceLawEx(pFirstFace);

            if (vecLaw.IsSameDirection(ivecUserZ))
            {
                m_cfFeature.m_eCAMMachiningType = eMachiningTypeFront;
            }
            else if (vecLaw.IsParallel(ivecUserZ))
            {
                m_cfFeature.m_eCAMMachiningType = eMachiningTypeReverse;
            }
            else
            {
                m_cfFeature.m_eCAMMachiningType = eMachiningTypeFiveAxis;
            }

            // 添加平面銑顏色
            m_cfFeature.m_nFeatureColor = pFirstFace->Color();

            // 根據(jù)平面銑的當(dāng)前z方向,得到編程時(shí)的坐標(biāo)系
            CAMFeaRecognition::GenerateWCSCoorByFeature(&m_cfFeature, ivecUserZ);

            // 類型
            int nSelIndex = m_pEnumMillType->AUTUMOONBLock_GetEnumValue;
            m_cfFeature.m_eCAMMachiningMode = static_cast<ProcessingType>(eProcessingTypeFlatMillingOpen + nSelIndex);

            // 從list列表獲取曲線信息
            std::vector<UIBlock *> vAllBlocks = m_pListCurves->GetItems();
            for (int i = 0; i < vAllBlocks.size(); i++)
            {
                // 強(qiáng)轉(zhuǎn)成NXOpen.BlockStyler.CompositeBlock,類似一個(gè)UI的集合,里面可以添加很多ui
                NXOpen::BlockStyler::CompositeBlock *compositeBlock =
                    (NXOpen::BlockStyler::CompositeBlock *)vAllBlocks[i];

                // 分別查找對(duì)應(yīng)的控件
                NXOpen::BlockStyler::UIBlock *edge_select0 = compositeBlock->FindBlock("edge_select0");
                NXOpen::BlockStyler::UIBlock *enumCamMethod = compositeBlock->FindBlock("enumCamMethod");
                NXOpen::BlockStyler::UIBlock *enumMaterialSide = compositeBlock->FindBlock("enumMaterialSide");
                NXOpen::BlockStyler::UIBlock *doubleProcessDis = compositeBlock->FindBlock("doubleProcessDis");
                NXOpen::BlockStyler::UIBlock *doubleSelToolDia = compositeBlock->FindBlock("doubleSelToolDia");
                NXOpen::BlockStyler::UIBlock *toggleRough = compositeBlock->FindBlock("toggleRough");
                NXOpen::BlockStyler::UIBlock *toggleFinish = compositeBlock->FindBlock("toggleFinish");

                vector<TaggedObject *> selectedCurves = edge_select0->AUTUMOONBLock_GetSelectedObjects;
                if (m_cfFeature.m_vpCurveExs.size())
                {
                    m_cfFeature.m_vpCurveExs.clear();
                }
                for (auto it = selectedCurves.begin(); it != selectedCurves.end(); ++it)
                {
                    Curve *pCurveSel = static_cast<Curve *>(*it);

                    CurveEx *pCurveEx = new CurveEx(pCurveSel);
                    // 加工曲線位置
                    pCurveEx->m_nCurveCamMethod = enumCamMethod->AUTUMOONBLock_GetEnumValue;

                    // 材料側(cè)
                    pCurveEx->m_nMaterialSide = enumMaterialSide->AUTUMOONBLock_GetEnumValue + 1;

                    // 加工距離
                    pCurveEx->m_dProcessDistance = doubleProcessDis->AUTUMOONBLock_GetDoubleValue;

                    // 刀具直徑
                    pCurveEx->m_dSelToolDia = doubleSelToolDia->AUTUMOONBLock_GetDoubleValue;

                    // 粗加工
                    if (toggleRough->AUTUMOONBLock_GetLogicalValue)
                    {
                        pCurveEx->m_nMachiningMethod |= MACHINING_METHOD_ROUGH;
                    }
                    else
                    {
                        pCurveEx->m_nMachiningMethod &= ~MACHINING_METHOD_ROUGH;
                    }

                    // 半精加工和精加工
                    if (toggleFinish->AUTUMOONBLock_GetLogicalValue)
                    {
                        pCurveEx->m_nMachiningMethod |= MACHINING_METHOD_HALF_FINISH | MACHINING_METHOD_FINISH;
                    }
                    else
                    {
                        pCurveEx->m_nMachiningMethod &= ~(MACHINING_METHOD_HALF_FINISH | MACHINING_METHOD_FINISH);
                    }

                    // 加工面高度(從當(dāng)前主界面獲?。?                    pCurveEx->m_dDeepOffset = m_DoubleFaceHeight->AUTUMOONBLock_GetDoubleValue;

                    m_cfFeature.m_vpCurveExs.push_back(pCurveEx);
                }
            }

            int nFindIndex = -1;
            for (int i = 0; i < m_vFeatures.size(); ++i)
            {
                CAMFeature &cf = m_vFeatures[i];
                if (cf.m_pvFaces.size())
                {
                    Face *pFaceCur = cf.m_pvFaces[0];
                    if (pFaceCur == pFirstFace)
                    {
                        nFindIndex = i;

                        // 釋放原來(lái)的
                        if (cf.m_vpCurveExs.size())
                        {
                            CurveEx::ReleaseCurveEx(cf.m_vpCurveExs);
                        }

                        cf = m_cfFeature;
                        break;
                    }
                }
            }

            // 添加
            if (nFindIndex == -1)
            {
                m_vFeatures.push_back(m_cfFeature);
            }

            // 復(fù)位控件
            resetAllCtrlBlock();

            // 面選擇重新選擇為焦點(diǎn)
            m_pSelFace->Focus();

獲取的關(guān)鍵是這一段:

nx加工模塊的二次開(kāi)發(fā),nx二次開(kāi)發(fā),c++,開(kāi)發(fā)語(yǔ)言

此代碼也是我嘗試出來(lái)的結(jié)果,當(dāng)發(fā)現(xiàn)可以正常工作的時(shí)候,我還是很開(kāi)心的,畢竟這個(gè)代碼帶著一點(diǎn)點(diǎn)猜想的成分。

至此,集列表的創(chuàng)建以及回調(diào)函數(shù),以及獲取集列表上任意控件的值就已經(jīng)全部結(jié)束了。
歡迎交流與討論,歡迎留言或者私信我尋求幫助,謝謝。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-777868.html

到了這里,關(guān)于【NX】NX二次開(kāi)發(fā)BlockUI集列表的詳細(xì)使用步驟的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • UG\NX二次開(kāi)發(fā) 使用錄制功能錄制操作記錄時(shí),如何設(shè)置默認(rèn)的開(kāi)發(fā)語(yǔ)言?

    UG\NX二次開(kāi)發(fā) 使用錄制功能錄制操作記錄時(shí),如何設(shè)置默認(rèn)的開(kāi)發(fā)語(yǔ)言?

    文章作者:里海 來(lái)源網(wǎng)站:王牌飛行員_里海_里海NX二次開(kāi)發(fā)3000例,CC++,Qt-CSDN博客 NX二次開(kāi)發(fā)使用BlockUI設(shè)計(jì)對(duì)話框時(shí),如何設(shè)置默認(rèn)的代碼語(yǔ)言? ? 依次打開(kāi)“文件”-“實(shí)用工具”-“用戶默認(rèn)設(shè)置”-“用戶界面”-“操作記錄”-“C++”。 ?? ? ?

    2024年02月11日
    瀏覽(28)
  • UG/NX二次開(kāi)發(fā)環(huán)境配置方法(nx1980+vs2019)

    UG/NX二次開(kāi)發(fā)環(huán)境配置方法(nx1980+vs2019)

    最近需要嘗試nx二次開(kāi)發(fā),結(jié)合網(wǎng)上的文字教程以及一些視頻教程,總算是完成了環(huán)境的配置以及簡(jiǎn)單實(shí)例的運(yùn)行——根據(jù)用戶輸入的數(shù)據(jù),在原點(diǎn)處創(chuàng)建一個(gè)指定長(zhǎng)寬高的立方體,配合了簡(jiǎn)單的UI界面,完成了基本功能。 看到網(wǎng)上關(guān)于此類入門的教程并不算多,而且vs和nx版

    2024年02月09日
    瀏覽(205)
  • NX二次開(kāi)發(fā) Block UI 選擇對(duì)象

    文章作者:里海 來(lái)源網(wǎng)站: https://blog.csdn.net/WangPaiFeiXingYuan 目錄 設(shè)置選擇模式,單選、多選 設(shè)置選擇范圍

    2024年02月15日
    瀏覽(24)
  • UG NX二次開(kāi)發(fā)(C#)-建模-刪除面

    UG NX二次開(kāi)發(fā)(C#)-建模-刪除面

    ? ? ? ? 在三維建模后,為了仿真的需要,需要對(duì)建好的模型進(jìn)行簡(jiǎn)化處理,這時(shí)候同步建模的功能就非常有必要了。本文主要介紹一個(gè)刪除面的操作,這樣可以去掉孔面、倒圓角面、倒斜角面,以用于模型仿真的完整性。 ???????? 采用UG NX的UIStyler創(chuàng)建一個(gè)測(cè)試界面,如

    2023年04月14日
    瀏覽(33)
  • UG NX二次開(kāi)發(fā)(C#)-裝配-刪除陣列矩陣

    UG NX二次開(kāi)發(fā)(C#)-裝配-刪除陣列矩陣

    在外部模式對(duì)裝配體進(jìn)行替換或者刪除時(shí),有時(shí)遇到部分組件不能替換或者刪除,其中一個(gè)原因是陣列主組件,是不允許更改的。下面介紹下采用UG NX二次開(kāi)發(fā)的方法刪除陣列主組件。 在一個(gè)裝配體模型中,刪除某個(gè)組件時(shí)會(huì)出現(xiàn)下面的錯(cuò)誤: “不能刪除組件圖樣的主組件”

    2024年02月07日
    瀏覽(50)
  • NX二次開(kāi)發(fā)獲取圓弧的四個(gè)象限點(diǎn)

    NX二次開(kāi)發(fā)獲取圓弧的四個(gè)象限點(diǎn)

    ?我是用來(lái)用來(lái)畫(huà)水路線框的UF_MODL_ask_curve_points()可以按弧長(zhǎng)或者弧度獲取曲線的等分點(diǎn),取PI/2的圓弧,即將圓弧四等分,你也可以取任意等分點(diǎn)。

    2024年01月21日
    瀏覽(20)
  • UG\NX二次開(kāi)發(fā) 實(shí)現(xiàn)預(yù)覽和取消預(yù)覽

    文章作者:里海 來(lái)源網(wǎng)站: https://blog.csdn.net/WangPaiFeiXingYuan ? ? ? ? 介紹兩種方法。一是先創(chuàng)建特征,記錄創(chuàng)建的特征,取消預(yù)覽時(shí)刪除這些特征。另一種方法是在創(chuàng)建特征前Set_mark,取消預(yù)覽就undo_to_mark。 ? ? ??

    2024年02月14日
    瀏覽(27)
  • UG/NX二次開(kāi)發(fā) 將當(dāng)前視圖截圖到剪切板

    文章作者:里海 來(lái)源網(wǎng)站: https://blog.csdn.net/WangPaiFeiXingYuan ? ? ? ? 將當(dāng)前視圖截圖到剪切板,運(yùn)行完程序后,找一個(gè)位置(比如PPT) 粘貼。

    2024年02月11日
    瀏覽(68)
  • UG NX二次開(kāi)發(fā)(C#)-創(chuàng)建點(diǎn)到曲線(邊)的切線

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 在UG NX二次開(kāi)發(fā)時(shí),對(duì)于求點(diǎn)到曲線的切線,采用ufun函數(shù)可以實(shí)現(xiàn),即是UF_CURVE_create_line_point_tangent,但是對(duì)于C#,這個(gè)函數(shù)尚未封裝進(jìn)來(lái),所以沒(méi)有直接對(duì)應(yīng)的函數(shù)。本文講一下采用C#創(chuàng)建點(diǎn)到曲線的切

    2024年02月09日
    瀏覽(37)
  • UG\NX 二次開(kāi)發(fā) 相切面、相鄰面的選擇控件

    UG\NX 二次開(kāi)發(fā) 相切面、相鄰面的選擇控件

    文章作者:里海 來(lái)源網(wǎng)站: https://blog.csdn.net/WangPaiFeiXingYuan ? ? ? ? 有群友問(wèn)“UFUN多選功能過(guò)濾面不能選擇相切面或相鄰面之類的嗎?” 這個(gè)用Block UI的\\\"面收集器\\\"可以,ufun函數(shù)也可以,請(qǐng)參照這篇:【NX二次開(kāi)發(fā)】相切面封裝函數(shù)-CSDN博客 ? ? ?? ?? ? ? ? ??

    2024年02月12日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包