看流星社区

 找回密码
 注册账号
查看: 2883|回复: 2

GridCtrl使用详解

[复制链接]

该用户从未签到

发表于 2017-6-3 14:26:49 | 显示全部楼层 |阅读模式
GridCtrl使用详解
CGridCtrl类主要是通过grid样式显示数据,CGridCtrl的代码与demo请参考:http://www.codeproject.com/KB/miscctrl/gridctrl.aspx
在单文档中的使用方法 步骤一 初始化 在CView类的.h头文件中包含文件:  #include "Gridctrl.h" 并且手写加入如下的成员函数: CGridCtrl * m_pGridCtrl;
步骤二 构造与析构 构造函数中: m_pGridCtrl = NULL; 析构函数中: if(m_pGridCtrl) delete m_pGridCtrl; 步骤三 如果需要打印功能的话添加同名打印函数代码 在CView类的OnBeginPrinting()函数中添加如下代码: if(m_pGridCtrl) m_pGridCtrl->OnBeginPrinting(pDC,pInfo); //简单吧,这就是类的好处 其它两个打印函数也一样的做法. 步骤四 在OnInitaUpdate()函数中或者你自己添加的要显示Grid的消息函数中如下初始化:
   //创建非模式对话框
   CDlg *dlg;
   dlg=new CDlg();
   dlg->Create(IDD_Dlg,this);

   //初始化GridCtrl控件
   if(m_pGridCtrl!=NULL)
   {
   delete m_pGridCtrl;
   m_pGridCtrl=NULL;
   }
   if (m_pGridCtrl == NULL)
   {
  // Create the Gridctrl object
  m_pGridCtrl = new CGridCtrl;
  if (!m_pGridCtrl) return 0;
  // Create the Gridctrl window
  CRect rect;
  GetClientRect(rect);
  m_pGridCtrl->Create(rect, this, 100);
  // fill it up with stuff
  m_pGridCtrl->SetEditable(false);
  m_pGridCtrl->SetTextBkColor(RGB(0xFF, 0xFF, 0xE0)); //黄色背景
  m_pGridCtrl->EnableDragAndDrop(false);
  try {
   m_pGridCtrl->SetRowCount(k); //设置行数为k行
   m_pGridCtrl->SetColumnCount(4);   //k列
   m_pGridCtrl->SetFixedRowCount(1);   //标题行为一行
   m_pGridCtrl->SetFixedColumnCount(1);  //同上
  }
  catch (CMemoryException* e)
  {
   e->ReportError();
   e->Delete();
   return 0;
  }
  //填充列标题
  int row=0;
  for(int col=0;col<4;col++)
  {
         GV_ITEM Item;
   Item.mask = GVIF_TEXT|GVIF_FORMAT;
   Item.row = row;
   Item.col = col;
   if(col==0){
                Item.nFormat = DT_CENTER|DT_WORDBREAK;
    Item.strText.Format(_T("【类别】"),col);
   }
   else if(col==1){
                Item.nFormat = DT_LEFT|DT_WORDBREAK;
       Item.strText.Format(_T("第一列"),col);
   }
   else if(col==2){
    Item.nFormat = DT_LEFT|DT_WORDBREAK;
       Item.strText.Format(_T("第二列"),col);
   }
   m_pGridCtrl->SetItem(&amp;Item);
  }
   // fill rows/cols with text
  for (row = 1; row < k; row++)
   for (col = 0; col < h; col++)
   {
    GV_ITEM Item;
    Item.mask = GVIF_TEXT|GVIF_FORMAT;
    Item.row = row;
    Item.col = col;
    if (col < 1) {  //行标题头
     Item.nFormat = DT_CENTER|DT_VCENTER
     |DT_SINGLELINE|DT_END_ELLIPSIS
     |DT_NOPREFIX;
     Item.strText.Format(_T("%d"),row);
    }
    else if(col==1){  //第一列的值
     Item.nFormat = DT_CENTER|DT_VCENTER
     |DT_SINGLELINE|DT_END_ELLIPSIS
     |DT_NOPREFIX;
        str="aa";
         Item.strText.Format(_T("%s"),str);
    }else if(col==2){ //第二列第值
     Item.nFormat = DT_CENTER|DT_VCENTER
     |DT_SINGLELINE|DT_END_ELLIPSIS
     |DT_NOPREFIX;
        CString str;
        str="bb";
         Item.strText.Format(_T("%s"),str);
    }
    m_pGridCtrl->SetItem(&amp;Item);
   }
  m_pGridCtrl->AutoSize();

  //--------------设置行列距------------------
  for(int a=1;a<m;a++)
   m_pGridCtrl->SetRowHeight(a,21);  //设置各行高
        m_pGridCtrl->SetRowHeight(0,24);  //设置0行高
  m_pGridCtrl->SetColumnWidth(1,110); //设置2列宽
  m_pGridCtrl->SetColumnWidth(2,160); //设置3列宽
  m_pGridCtrl->SetColumnWidth(3,100); //设置4列宽
   }
上例取自实际工程,稍有修改! 部分注释: void SetVirtualMode(TRUE) //设为虚模式 BOOL SetRowCount(int nRows) //设置总的行数。 BOOL SetFixedRowCount(int nFixedRows = 1)//设置固定的行数据 BOOL SetColumnCount(int nCols) //设置列数 BOOL SetFixedColumnCount(int nFixedCols = 1)//设置固定的列数
步骤五: 添加WM_SIZE消息,调整控件的界面占屏幕大小 if(m_pGridCtrl->GetSafeHWnd()) { CRect rect; GetClientRect(rect); m_pGridCtrl->MoveWindow(rect); }

在对话框中的使用方法 步骤一 创建数据显示表格对话框
在资源管理器中新创建一个对话框,假设为CDlgTestReportBox。 从工具箱中加入Custom Control,就是人头像的那个,将其区域拉伸至要显示数据表格的大小,充满整个对话框。
在CDlgTestReportBox类的头文件中:
#include "GridCtrl.h"
再定义成员变量:
CGridCtrl* m_pGrid;
添加OnShowWindow()消息处理函数如下:
void CDlgTestReportBox::OnShowWindow(BOOL bShow, UINT nStatus)
{
    CDialog::OnShowWindow(bShow, nStatus);
    // TODO: Add your message handler code here
    if(m_pGrid!=NULL)
    {
        delete m_pGrid;
        m_pGrid=NULL;
     }
  if(m_pGrid==NULL)
     {
        m_pGrid=new CGridCtrl;
        CRect rect;
        GetDlgItem(IDC_ReportAera)->GetWindowRect(rect); //得到显示区域
        ScreenToClient(&amp;rect);
        m_pGrid->Create(rect,this,100);
        m_pGrid->SetEditable(false);
        m_pGrid->SetTextBkColor(RGB(0xFF, 0xFF, 0xE0)); //黄色背景
        try
        {
            m_pGrid->SetRowCount(10); //初始为10行
            m_pGrid->SetColumnCount(11); //初始化为11列
            m_pGrid->SetFixedRowCount(1); //表头为一行
            m_pGrid->SetFixedColumnCount(1); //表头为一列
        }
        catch (CMemoryException* e)
        {
            e->ReportError();
            e->Delete();
            // return FALSE;
        }
        for (int row = 0; row < m_pGrid->GetRowCount(); row++)
        for (int col = 0; col < m_pGrid->GetColumnCount(); col++)
        {
            //设置表格显示属性
            GV_ITEM Item;
            Item.mask = GVIF_TEXT|GVIF_FORMAT;
            Item.row = row;
            Item.col = col;
            if(row==0&amp;&amp;col==0) //第(0,0)格
            {
                Item.nFormat = DT_CENTER|DT_WORDBREAK;
                Item.szText.Format(_T("报表显示"),col);
            }
            else if (row < 1) //设置0行表头显示
            {        
                Item.nFormat = DT_CENTER|DT_WORDBREAK;
                Item.szText.Format(_T(" 项目%d"),col);
            }
            else if (col < 1) //设置0列表头显示
            {
                if(row< m_pGrid->GetRowCount()-4)
                {
                    Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
                    Item.szText.Format(_T("第%d次"),row);
                }
            }
            else
            {
                Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
                Item.szText.Format(_T(""),2);
            }
            m_pGrid->SetItem(&amp;Item);
        }
        m_pGrid->Invalidate();
    }
    //--------------设置行列距------------------
    for(int a=0;aGetRowCount();a++)
         m_pGrid->SetRowHeight(a,16); //设置各行高
         m_pGrid->SetColumnWidth(0,58); //设置0列宽
    for(int b=1;bGetColumnCount();b++)
        m_pGrid->SetColumnWidth(b,59); //设置各列宽
}

步骤二 嵌入上面的对话框 显示数据
在你需要显示数据的对话框上的头文件中,假设为CDlgTest,加入
#include "GridCtrl.h"
CDlgTestReportBox* m_pTestReportBox;
将数据显示对话框放入你的对话框相应位置上,在CDlgTest::OnInitDialog() 中:
if(!m_pTestReportBox) { m_pTestReportBox=new CDlgTestReportBox(this); }
m_pTestReportBox->Create(IDD_DlgTestReportBox,this);
//定义区域变量 CRect rectDraw; GetDlgItem(IDC_AeraReport)->GetWindowRect(rectDraw); ScreenToClient(&amp;rectDraw); //动态测试数据显示区域rectDraw
//将对应的对话框放到指定区域 m_pTestReportBox->MoveWindow(rectDraw); m_pTestReportBox->ShowWindow(SW_SHOW);
自定义填充数据的函数:CDlgTest::FillGrid() 如下:
CGridCtrl* pGrid=m_pTestReportBox->m_pGrid;
for (int row = pGrid->GetRowCount()-1; row >= pGrid->GetRowCount()-3; row--)
{
   for (int col = 1; col <= pGrid->GetColumnCount(); col++)
   {
      GV_ITEM Item;
      Item.mask = GVIF_TEXT|GVIF_FORMAT;
      Item.row = row;
      Item.col = col;
      if(row==pGrid->GetRowCount()-3&amp;&amp;col>0) //平均值
      {
         if(col==10){
         Item.nFormat = DT_CENTER|DT_WORDBREAK;
         Item.szText.Format(_T(" %6.2f "),avjch);
      }
      else{
         Item.nFormat = DT_CENTER|DT_WORDBREAK;
         Item.szText.Format(_T(" %6.2f "),av[col-1]);
      }
   }
   pGrid->SetItem(&amp;Item); //提交数据
   if(row==0||col==0)
   {
      COLORREF clr = RGB(0, 0, 0);
      pGrid->SetItemBkColour(row, col, clr);
      pGrid->SetItemFgColour(row, col, RGB(255,0,0));
   }
  }//循环结束
  pGrid->Invalidate();
}
CGRIFCTRL原理:
DBGRID和一般的GRID的不同之处在于,一般的GRID并不适合显示大的数据量,如果一个表中有上万条记录都要插入到GRID中,这将是一个很慢的过程,并且在GRID中移动滚动条时,它的记录的滚动也是很慢。而DBGRID并不会真正把这些记录的数据全部插入到控件中,当DBGRID的滚动条滚动时,它会根据DBGRID的显示面积的大小和查询得到的总记录数计算出当前应该显示哪些行,然后插入到表格中,这样一来,速度肯定快,而且没有数据量多少的限制。幸运的是,CGridCtrl类已经为我们提供了这种机制,它是采用虚模式实现的。使用这种方式,即使你向这个该控件插入一百万条数据,它并不会真的生成一百万行,而是随着你的滚动条的滚动,计算出在屏幕上要显示的行和列,然后会向你提供一个接口,通过这个接口,你可以在这儿设置你要显示的数据。下面给出使用CGridCtrl控件的虚模式的步骤:步骤一 初始化 在视图的初始化函数里添加如下代码:void SetVirtualMode(TRUE)  设为虚模式BOOL SetRowCount(int nRows) 设置总的行数。BOOL SetFixedRowCount(int nFixedRows = 1) 设置固定的行数据BOOL SetColumnCount(int nCols)   设置列数BOOL SetFixedColumnCount(int nFixedCols = 1) 设置固定的列数步骤二 响应消息 显示数据我们假设CGridCtrl是放在单文档视图中,而且它关联的变量是m_GridCtrl,利用ClassWizard添加视图的OnNotify响应函数。这个响应函数的写法是固定的,类似下面的代码:BOOL CGridCtrlTestView::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) {if (wParam == (WPARAM)m_Grid.GetDlgCtrlID()){*pResult = 1;GV_DISPINFO *pDispInfo = (GV_DISPINFO*)lParam;if (GVN_GETDISPINFO == pDispInfo->hdr.code){//这是添加的函数,在这个函数里设置当前要显示的数据SetGridItem(pDispInfo);return TRUE;}}return CGridCtrlTestView::OnNotify(wParam, lParam, pResult);}在上面的代码中,SetGridItem(pDispInfo)是添加的函数,在这个函数里我们设置当前要显示的数据。pDispInfo是一个GV_DISPINFO的结构体对象,它包含了每个单元格的信息,如行号,列号,有没有位图,背景色,前景色等。CGRIDCTRL会把当前要显示那个单元格行号,列号传递给我们,我们只要设置里面显示的数据就可以了。如下面是一个显示数据的例子。 void CGridCtrlTestView::SetGridItem(GV_DISPINFO *pDispInfo){ pDispInfo->item.strText.Format("row%d,col%d",pDispInfo->item.row, pDispInfo->item.col);}通过上面的介绍,我们应该已经会使用CGridCtrl虚模式,下面说明一下用CGridCtrl虚模式做DBGRID的原理,大家知道,MFC的CRecordset类支持多种游标机制,如双向游标的,如果我们是用ClassWizard来生成一个CRecordset的派生类的,那么就可以调用函数CRecordset::SetAbsolutePosition(),用这种方式来实现显示真是太简单了,因为在上面的void CGridCtrlTestView::SetGridItem(GV_DISPINFO *pDispInfo)函数中,已经知道要显示哪一行,哪一列的数据。所以只要通过CRecordset::SetAbsolutePosition(pDispInfo->item.row)函数,把游标定位到那一行,然后获取每个字段的数据就可以了。但是使用上面的方法有一个不好的地方在于,我们必须用ClassWizard为每个表从CRecordset派生出新类,这样做很不方便,在VC知识库第六期上面有一篇介绍《单独使用Crecordset》文章,可是上面的CRecordset打开方式只能使用CRecordset::forwardOnly,游标只能向前滚动,我们不能使用CRecordset::SetAbsolutePosition()函数。而对于ACCESS数据库的访问,VC中MFC类库提供专门的DAO类(CDaoDatabase和CDaoRecordset等),在这里,附带指出VC6.0还不能访问Access2000数据库(可以使用Access2000转换为能识别的低版本)。对于其他类型的数据库的访问,可以使用开放式数据源(ODBC),然后通过DAO访问ODBC也可以。恰恰CDaoRecordset支持双向游标,可以调用函数CDaoRecordset::SetAbsolutePosition(),我们问题就不是就解决了吗。步骤三 打印表格数据打印显示在表格控件数据非常简单,重载视图函数OnPrint( )、OnBeginPrinting()和OnEndPringting(),分别调用控件的OnPrint(),OnBeginPrinting()和OnEndPrinting。其具体使用请看举例。

该用户从未签到

发表于 2021-11-10 11:19:58 | 显示全部楼层














































该用户从未签到

发表于 2021-11-10 11:24:29 | 显示全部楼层


{2021年10月08日}2021冬季,全球 崩 盘,三 峡 溃 坝

{2021卝年10月О8曰}2021冬季,全球 崩 盘,三 峡 溃 坝



作者 : 囯熵
时间:  2021卝年10月О8曰 1⒎23:09    星期五     农历九月初三寒露
           上正宗指 3592.17点    恒指 24837.85点   道指34754.94点
            全囯高xuè压曰



突然的,全球 金 融 市 场 连 续 跌 停 大 崩 盘,
没有什么,谁也没想到啊,友邦惊诧,黑 天 鹅 白天鹅 哥斯拉,
一切都是,蓄 谋 已 久 的精心策划。zéi 喊捉zéi。


{一} 今时今曰{辛丑2021卝年10月О8曰} :
今时今曰,我预.测,人类有始.以来最大的金.融.崩 盘 ,
未来三个月之内,即,2021卝年11月、12月、2022卝年01月,将 震 撼
呈 现。
---- 中卝囯股市、全球股市、全球金融市场 连序跌婷大崩 盘 , 大盘连
       续或稍稍间断30/40多个跌亭板,人类有.史以来最大的金融.嗨啸。
股市、汇市、债市、期货商品、可能还有楼卝市,全部连卝锁式彻底崩溃。
黄 金 价 格 应 该 避 险 bào 涨。
忽 然 之 间 ,天 塌 了。{ 全 球 闪 崩 }
十 八 级 金融大 地.震,史无前例地球崩卝盘,要 多 惨 有 多惨,世界沫曰。
金融天坑,股市雪崩、铡 dāo 斩 首 、bào 雷 溃 坝 ,希 特 勒 巴巴罗萨
金融闪击战 。画 皮 ,终 于 撕 去 了 。
道琼斯,憋了12年的一泡shǐ,2021冬季,总算找到了,公共厕所。
缠中说禅15年之前预卝言的,2019毁miè性下跌。{有两年误差}
已故“周期天王”周金涛的,“2018年到2019年是康波周期的万卝劫卝不卝复之年”。
以金.融战.争为表现形式的,第 叁 次.世.戒.大.战,全面 bào.发。
---- 一切友好互访探讨分歧,新型大囯关系,都是伪装梦幻 烟物弹,哄 洒 子。
       战 争 现在才刚刚开始,三至五年有个结果,就不错了。
       天王山之战 ;安史之乱。 大 气 候 小 气 候 。
---- 庄家航母集群,发动了总冲锋,终于 动 手 了,老大{ 暗 黑 帝卝囯 }岂容
      老 贰 一步步做大 :咬 牙 切 齿寝食难安笑脸。当年是苏联,今天,轮到
      中卝囯。
亚 投 行 、一 带 一 路 、货币互换 ……
美 元 位置往哪里摆 ?? 扼 shā 于 摇 篮 。
新型大囯关系,永远友好和平 。凭什么 ??不但天真幼稚,而且,鱼惷。
---- 滔天巨浪,世 界 末 曰 感叹 niào失jìn。
       殊不知,这仅仅是,哥斯拉的一只巨爪,而已。
       更大 恐 怖颤 栗,还在 2022、2023年。

憋 了十年了,无论中外股市,从未有过,像样的bào跌,这回,就一次跌个够。
最 危 险的时刻 骤 然降 临,尖 dāo 暗 xí,一 剑 封 喉 。
从不,预 先 通 知 。


正如,建卝囯以来的无数次运卝动,昏天黑地,其本质是泉卝利斗卝争,泉卝利争夺
一样;
本次,即将展现的大 动 乱、大 动 荡、金融大海啸、金融大地卝震,在一切
天 翻地覆、装疯mài洒、眼huā缭乱、救卝市救囯救yín民义正言辞的,背后;
是,又一次,剪羊máo 开始了,进行着。
是,这个地球的真正主人,无尽tān婪的最顶级财富精英,对广大庶卝民的
剔 骨 掠 夺 。
最热的年份,最冷的人心。五面怪,要大小通吃。
不要又一次,被mài了,还替人家数钞票。
大 动 荡 、大 萧 条、飓风冰雨冲天烈焰,对于百卝姓庶卝民,是油zhà地狱;
对于某些人,却是发财良机,天堂乐园 。
无利不起早。

祸不单行,今时今曰,我断言,
2021卝年11月、12月、2022卝年01月发生的全球 崩 盘 将因果触发,很快触发,
人类有始.以来最.大.人.祸 ---- 三.侠.溃.坝 ;
或许还有,其它 水 库 大 坝 、例如白鹤滩等的,彻 底 溃 。
一 片 汪 yáng ,一夜,一夜之间,中 囯 淹 sǐ 2000万 人。
一 片 汪 yáng ,一夜,一夜之间,中 囯 淹 sǐ 2000万 人。
我表述的,够不够,清楚 ??
我知道,“全 球 最 大 崩 盘”将触发“三 峡 溃 坝”,这一论断,几乎令
所有人嗤之以鼻。
请 ---- 时刻密切关注 三 峡 大 坝,关注种种“异象先兆”是否出现。
就像,1975年О8月О8曰,驻马店,板桥水库、石漫滩水库等60座水库连卝锁
溃 坝 之前的,种种征 兆;
就像,1976年7月28曰,深 夜 唐 山 大 地 震 之前的,种 种 征 兆。
到时候,事 实 会说明一切 。
记住,"异象显现"那时,迅速逃离、逃命,应该还来得急。或许。
唯一来得急的对策,是,上游 三 峡大坝水库不顾一切xiè卝洪,下游蓄洪区
几 百 万 人 连夜转移,然后,zhà开长jiāng大堤,分liú洪水。
命悬一线,全 靠 硝 酸 甘 油。
肉腐出虫,鱼枯生蠹。怠慢忘身,祸灾乃作。
sǐ 神 ,终 于 来 了 。
转瞬之间,已 经 来 到 生 sǐ 关 头 。
2021冬中 囯 ,生sǐ玄关、红 羊 劫 ,最危险的时刻终于到了 。
{三 峡 溃 坝 大 洪 水;股市羊群效应}
浩卝劫,降临之前,从不,预先通知。



{二} 全 球 崩 盘的 见 底 点 位 。

见底点位,是上 证 宗 指160点,左右。{上证综指壹佰六十点}
---- 325.⑧9点{1994.07.29}的二分之一;
---- 6124 ---- 9⑨8 ---- 160
---- 神奇数字333的一半 :333卝点 ÷ 2 = 166.5点
以9⑨8为轴心,以6.136倍为常数的等比数列。
以今天的上正宗指收盘点位3592.17点为基准。
股市瞬间跌去22倍 。
也可能,震撼性的,上证综指95.79点,见底。

五福临门 五 重 斩 :
5178 ÷ 2 ÷ 2 ÷ 2 ÷ 2 ÷ 2 = 162点
5178、2600、1300、700、350、160 。
一鼓作气五把镰dāo五重斩,瞬间,瞬间跌破200,跌破100,不信你散户,
信心不崩溃,谁还唱多 ??
{2018.07.11:上证综指收于2777.77点}
{2019.07.31:恒生指数收于27777.750点}。
那时,你八成吓得不停颤卝抖,就像默克尔,这正是庄家们需要的。
一颗,比9⑨8、166④,震撼五倍的,超级zhà卝弹。麻辣鲜香滚卝烫。
哭爹喊酿屁滚niàoliú举囯震撼中,只要,保留20%仓位,便可保本不赔。
哭爹喊酿屁滚niàoliú举囯震撼中,只要,保留20%仓位,便可保本不赔。
上 证 综 指 800点左右,即166④的一半,很重要。反弹诱多。


为何,大盘160点左右见底 ??
本人在 :
{2021卝年5月30曰}论证2021下半年全球大崩卝盘的见底点位

…… ……
几篇文章之中有详细论证,网上可以搜到。

忽 然 之 间 ,天 崩 地 裂 。
朕给出,令庸 俗 大 众 惊诧疑惑、无fǎ接受的“庄稼底牌”,是无价之宝。
真卝理是电,不以任何人,任何泉卝利、任何所谓“大多数”的,意志为转移。
上正宗指跌去22倍见底 ;是166④点的十分之一 。
---- 3592.17点 --→ 160点。
       也有可能,跌破上证综指95.79点,见底。
道琼斯跌去54倍,大约6④0点见底;是6④40.О8点{2009.03.09}的十分之一 。
---- 34754.94点 --→ 6④0点。{跌去⑨8%}
恒生指数跌至1000点见底。
---- 24837.85点 --→ 1000点。

本次 惊 天 bào 跌 ,性质是 总 出 货 之前的 总 洗 盘 。
所以,与既往的所有下跌截然不同。
庄稼们“终极拉升”之前要 彻 底 击 碎 散户的心理防线 彻 底 洗干净 。
老股卝民不可被“xí惯思维”束缚。
滔天巨浪,映射的是人类的tān婪和恐惧。


máo票仙股满天飞。谜底,让你吃惊的合不拢嘴。这就对了。
我强调,我重申,股价跌去97% ,跌去97%,不是庄稼们 发 疯 了,
而是,他们,早已筹谋的,既定共同战略布jú。

点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-19 15:36

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表