搜索
bottom↓
回复: 56

希望坛里的RockmanZero,liuweiele 打造一个强的GUI编辑器,不求开源但求好用

[复制链接]

出0入0汤圆

发表于 2010-3-15 13:18:29 | 显示全部楼层 |阅读模式
RockmanZero的代表作是 http://www.yueyuesoft.com/
GameBoy模拟器
Nes模拟器
GBA模拟器

做GUI的人很早我就看过这个仿Win95的界面,很小的一个嵌入式GUI.

(原文件名:MoonGUI.PNG)



liuweiele 就不用我说了大家都看到他的很多强的GUI DEMO了.
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3868506&bbs_page_no=1&search_mode=4&search_text=lgl_debug&bbs_id=9999



http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3912389&bbs_page_no=1&search_mode=4&search_text=lgl_debug&bbs_id=9999
这个帖子中,RockmanZero的这个UI编辑器,是可以自动,生成代码的.
而现在用的LCD偏向2个极端.一个是只有ON/OFF的黑白LCD,一个是12~24位TFT.
UCGUI好用,但是是控件是用代码写出来的,调整控件位置不是很方便.RockmanZero的这个UI编辑器可以实现这个功能.

当然liuweiele 的透明的且高效的GUI代码更是让人动心了.
如果两者能合二为一,做一个嵌入式GUI的编辑和UI源码生成向导,不就更强更方便了吗?

以上只是个人的看法,希望这两位网友可以对国内做嵌入式开发的工程做一个方便的:UI编辑器+UI源码生成器.

嵌入式UI我是认为这两个是国内的高人了. 我是这么认为的,不对的,希望大家指正.

也希望大家提提建议.

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-3-15 13:51:21 | 显示全部楼层
我先留个脚印

出0入0汤圆

发表于 2010-3-15 14:01:07 | 显示全部楼层
回复【楼主位】lgl_debug  
-----------------------------------------------------------------------

很高兴还有人关注我的gui,我早就抛到九霄云外了。不过代码生成器我倒是常用,感觉非常能提高编写代码的效率,也有助于固定代码的风格。大家如果感觉有必要的话,我就详细介绍一个这个代码生成器的使用方法和定制方式。

liuweiele 要是能够完善一下自己的GUI,相信会非常有前途的。

关于GUI,我觉着编写高效的常用控件才是难点所在,比如 编辑框 列表框 和 菜单,以及如何处理光标和鼠标的显示等等。毕竟多数GUI程序都是控件堆出来的。

出0入0汤圆

 楼主| 发表于 2010-3-15 18:23:09 | 显示全部楼层
RockmanZero ,
谢谢回复.liuweiele 的GUI代码也是大部分都开源的. 国外的UCGUI,EasyGUI,还有国内飞漫的MiniGUI.
UCGUI,EasyGUI都是用代码来做位置排放的.很不方便,而你的UI编辑器虽慢了一点(用的是编译器)但还是很好用的.
我有几个提议.
1.编译的输出的那个窗口,能否放在主界面上固定,不时的弹出,有时还盖了要看的编辑区.
2.编译的过程能不能放在最后,那个的话添加控件的速度会快很多.


我还在研究你的 string3000,用法呢!很方便.
顺便贴上来,再加一个小的XML编辑器.
程序员助手ourdev_538501.rar(文件大小:1.27M) (原文件名:string3000.rar)

XML编辑器ourdev_538500.rar(文件大小:345K) (原文件名:XML_EDIT.rar)  

(原文件名:XML.PNG)

出0入0汤圆

 楼主| 发表于 2010-3-15 18:48:24 | 显示全部楼层
我整理了一下坛子里几个比较好的GUI帖子.给有需要的人.

一种GUI系统中的多窗口管理及Z序剪切实现核心代码(原创)
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3842348&bbs_page_no=1&search_mode=1&search_text=UI&bbs_id=9999


TI LM3图形库(GUI)
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3803570&bbs_page_no=1&search_mode=1&search_text=UI&bbs_id=9999


Microchip提供的GUI Lib
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1428650&bbs_page_no=1&search_mode=1&search_text=UI&bbs_id=9999

出0入0汤圆

发表于 2010-3-15 18:56:17 | 显示全部楼层
回复【3楼】lgl_debug  
RockmanZero ,
谢谢回复.liuweiele 的GUI代码也是大部分都开源的. 国外的UCGUI,EasyGUI,还有国内飞漫的MiniGUI.
UCGUI,EasyGUI都是用代码来做位置排放的.很不方便,而你的UI编辑器虽慢了一点(用的是编译器)但还是很好用的.
我有几个提议.
1.编译的输出的那个窗口,能否放在主界面上固定,不时的弹出,有时还盖了要看的编辑区.
2.编译的过程能不能放在最后,那个的话添加控件的速度会快很多.


我还在研究你的 string3000,用法呢!很方便.
顺便贴上来,再加一个小的XML编辑器.
程序员助手 (原文件名:string3000.rar)

XML编辑器 (......
-----------------------------------------------------------------------

这个workshop已经是我两年前的作品了,代码很老了。
最开始也想把输出窗口和主窗口弄在一起,但是代码输出窗口也是那个窗口,觉着不好看,于是就做成现在这样了。
编译的过程不可能放在最后,因为如果不编译,那程序就不知道如何画这些控件,因为控件的外观也是由脚本写成的。
首先要把脚本编译成虚拟机的代码,然后
动态加载到虚拟机中运行的。

string3000新的脚本ourdev_538509.rar(文件大小:70K) <font color=green>(原文件名:strcode.rar)


放一个string3000 新的脚本,应该增加了不少功能。
界面不太直观。

出0入0汤圆

 楼主| 发表于 2010-3-15 20:39:35 | 显示全部楼层
我也想起了你这个是一个虚拟机.哈哈.
慢慢改,我们支持你.
因为你的这个软件比较深入,一下也很难看明白的,这里搞硬件的60%以上,软硬通吃的可能在30%左右.
我很早就是在 www.ucgui.com 上看到你的MoonGUI的.
其实,国内这方面真的需要你们这些深入研究有实力的人来推动的.

出0入0汤圆

 楼主| 发表于 2010-3-16 11:50:22 | 显示全部楼层
关注的人不多吗?

有需要的帮顶一下.

出0入0汤圆

发表于 2010-3-16 12:31:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-16 13:41:23 | 显示全部楼层
GGOOOODD

出0入0汤圆

发表于 2010-3-21 16:48:19 | 显示全部楼层
无意间发现这个帖子~
如果大家有兴趣,我将提供GUI的静态库,各位可以移植到其它硬件平台。这个GUI移植和使用都非常方便,并且可支持硬件加速。

出0入0汤圆

发表于 2010-3-21 16:51:34 | 显示全部楼层
在多任务OS环境下,才能更加体现这个GUI的价值。

出0入0汤圆

发表于 2010-3-21 17:00:36 | 显示全部楼层
由于时间关系,目前我只做了Button和ScrollBar控件作为模板式样; 用户无需关心GUI源码就可以很方便的添加自己的控件

出0入0汤圆

发表于 2010-3-21 17:25:12 | 显示全部楼层
perfect

出0入0汤圆

发表于 2010-3-21 23:34:00 | 显示全部楼层
等高手放码....

出0入0汤圆

发表于 2010-3-22 09:02:31 | 显示全部楼层
回复【12楼】liuweiele  
由于时间关系,目前我只做了Button和ScrollBar控件作为模板式样;&#160;用户无需关心GUI源码就可以很方便的添加自己的控件
-----------------------------------------------------------------------

给我一个 比如添加按钮的例子的源代码,我就在代码生成器中添加。

出0入0汤圆

发表于 2010-3-22 09:17:42 | 显示全部楼层
有兴趣

出0入0汤圆

发表于 2010-3-22 09:29:11 | 显示全部楼层
自定义按钮ID
#define        IDC_RESTART       0x1000
#define        IDC_PAUSE                 0x1001
#define        IDC_EXIT                 0x1002
#define        IDC_LEFT                 0x1003
#define        IDC_RIGHT          0x1004
#define        IDC_UP                0x1005
#define        IDC_DOWN                 0x1006

RECT        *rect;                                               
////                                               

rect   =MemAlloc(sizeof(RECT)*6);        //申请6个矩形内存

在窗口客户区坐标20,20,160x96的范围内自动生成3x2排列,水平间距为4,垂直间距为8的 6个新矩形区                               
GetMatrixRectangle( rect, 20,20,160,96, 3,2,4,8);
                               
在指定位置添加按钮
CreateWindow("button",hwnd,rect[1].x,rect[1].y,rect[1].dx,rect[1].dy,0,WS_NULL,IDC_UP,"上");
CreateWindow("button",hwnd,rect[3].x,rect[3].y,rect[3].dx,rect[3].dy,0,WS_NULL,IDC_LEFT,"左");
CreateWindow("button",hwnd,rect[4].x,rect[4].y,rect[4].dx,rect[4].dy,0,WS_NULL,IDC_DOWN,"下");
CreateWindow("button",hwnd,rect[5].x,rect[5].y,rect[5].dx,rect[5].dy,0,WS_NULL,IDC_RIGHT,"右");

设置按钮颜色(可选,三个颜色分别为:前景色,背景色,边界色):
SetWindowColor(GetWindowItem(hwnd,IDC_UP),RGB(255,255,255),RGB(80,000,160),RGB(0,0,0));
SetWindowColor(GetWindowItem(hwnd,IDC_LEFT),RGB(255,255,255),RGB(80,000,160),RGB(0,0,0));
SetWindowColor(GetWindowItem(hwnd,IDC_DOWN),RGB(255,255,255),RGB(80,000,160),RGB(0,0,0));
SetWindowColor(GetWindowItem(hwnd,IDC_RIGHT),RGB(255,255,255),RGB(80,000,160),RGB(0,0,0));

出0入0汤圆

发表于 2010-3-22 09:38:10 | 显示全部楼层
添加水平scrollbar:
CreateWindow("scroll",
              hwnd,(WindowClientWidth(hwnd)-128)>>1,WindowClientHeight(hwnd)-24,128,20,
              NULL,SCL_HOR,IDC_ALPHA_SET,"alpha");
设置数据范围:
ScrollSetRange(GetWindowItem(hwnd,IDC_ALPHA_SET),0,255);

出0入264汤圆

发表于 2010-3-22 09:44:34 | 显示全部楼层
顶各位高手。

出0入0汤圆

发表于 2010-3-22 09:49:22 | 显示全部楼层
按钮控件主体(控件类实现过程):

/*============================================================================*/

#define        BS_PRESSED        (1<<0)

/*============================================================================*/
//按钮风格

#define        BS_NULL                (0<<0)
#define        BS_IMG                (1<<1)

/*============================================================================*/

static        int        PaintButton(HDC hdc,HWND hwnd)
{
        WINDOW *pBN;
        GUI_COLOR        fr_color,bk_color,bd_color;
        COORD x,y;
        ////
       
        if(hdc==0)        return 0;
        if(hwnd==0)        return 0;
       
        pBN                        =HWND2WND(hwnd);
        fr_color        =pBN->FrColor;
        bk_color        =pBN->BkColor;
        bd_color        =pBN->BdColor;
       
        x=0;
        y=0;

        if(WindowStyle(hwnd,BS_NULL))
        {
                FillRaisedRectangle(hdc,x,y,pBN->Rect.dx,pBN->Rect.dy,bk_color);
                DrawImage(hdc,x,y,pBN->hImage);
                Label(hdc,x,y,pBN->Rect.dx,pBN->Rect.dy,fr_color,RGB_TRANS,RGB_TRANS,CENTER,pBN->Caption);

        }
        ////
       
        if(WindowStyle(hwnd,BS_IMG))
        {
                IMG_BUTTON_DATA *btn_data;
                ////
                btn_data        =(void*)GetWindowPrivateData(hwnd);
                DrawImage(hdc,x,y,btn_data->hImg);
       
        }
       
       
        ////
        if(WindowStatus(hwnd,WS_FOCUS))
        {
                //如果是焦点窗口
                DotRectangle(hdc,x+3,y+3,pBN->Rect.dx-6,pBN->Rect.dy-6,fr_color);
        }

}

/*============================================================================*/

static        int        PaintPressedButton(HDC hdc,HWND hwnd)
{
        WINDOW *pBN;
        GUI_COLOR        fr_color,bk_color,bd_color;
        COORD x,y;
        ////
       
        if(hdc==0)        return 0;
        if(hwnd==0)        return 0;
       
        pBN                        =HWND2WND(hwnd);
        fr_color        =pBN->FrColor;
        bk_color        =pBN->BkColor;
        bd_color        =pBN->BdColor;
       
        //x        =pBN->Rect.x;
        //y        =pBN->Rect.y;
        x=0;
        y=0;
        if(WindowStyle(hwnd,BS_NULL))
        {
                FillSunkRectangle(hdc,x,y,pBN->Rect.dx,pBN->Rect.dy,AlphaBlendColor((RGB(0,0,0)),bk_color,96));
                Label(hdc,x+3,y+3,pBN->Rect.dx-3,pBN->Rect.dy-3,fr_color,RGB_TRANS,RGB_TRANS,CENTER,pBN->Caption);

        }
        ////
       
        if(WindowStyle(hwnd,BS_IMG))
        {
                IMG_BUTTON_DATA *btn_data;
                ////
                btn_data        =(void*)GetWindowPrivateData(hwnd);
                DrawImage(hdc,x,y,btn_data->hPressedImg);
       
        }

}

/*============================================================================*/

static        int        ButtonDraw(HDC hdc,HWND hwnd)
{

        if(WindowStatus(hwnd,BS_PRESSED))
        {
               
                PaintPressedButton(hdc,hwnd);
        }       
        else
        {
                PaintButton(hdc,hwnd);
        }
       
        InvalidateRect(hwnd,0,0);

//        DebugPrintf("%s -> OnDraw!\n",pBN->Caption);
}

/*============================================================================*/

static        int ButtonRelease(HWND hwnd)
{
       
        WINDOW *pWin;
        ////
       
        if(hwnd==0)        return 0;
        pWin=HWND2WND(hwnd);
       
#if        GUI_DBG_EN
        DebugPrintf("ButtonRelease => '%s' - %08XH\n",pWin->Caption,pWin);
#endif       

        //发送MSG_CLOSE所有子窗口.
        pWin=HWND2WND(pWin->hChild);
        while(pWin)
        {
                SendMessage(WND2HWND(pWin),MSG_CLOSE,0,0);
                pWin=pWin->Next;
        }
       
       
        MemFree((void*)hwnd);
        return        1;
       
}

/*============================================================================*/

static        U32 ButtonProc(HWND hwnd,U32 msg,WPARAM wParam,LPARAM lParam)
{
        HDC        hdc;
        ////

        switch(msg)
        {
               
                case        MSG_CREATE:
                               
                                break;
                                ////
               
                case        MSG_LBUTTONDOWN:

                                       
                        //        DebugPrintf("'%s' -> MSG_LBUTTONDOWN - %d,%d\n",pBN->Caption,wParam>>16,wParam&0xffff);

                                if(!WindowStatus(hwnd,BS_PRESSED))       
                                {
                                        SetWindowStatus(hwnd,BS_PRESSED);
                                        InvalidateRect(hwnd,0,0);
                                        UpdateWindow(hwnd);
                                               
                                        KillFocus(GetFocus(hwnd));
                                }
                                       
                                if(WindowStyle(hwnd,WS_NCCHILD))
                                {
                                        SendMessageToParent(hwnd,MSG_SYSCOMMAND,(BN_CLICKED<<16)|GetWindowID(hwnd),hwnd);
                                }
                                else
                                {
                                        SendMessageToParent(hwnd,MSG_COMMAND,(BN_CLICKED<<16)|GetWindowID(hwnd),hwnd);
                                }
                               
                                break;
                                ////////
               
                case        MSG_KILLFOCUS:
                               
                //                DebugPrintf("'%s' -> MSG_KILLFOCUS\n",pBN->Caption);
                                break;
                                ////////
                               
                case        MSG_SETFOCUS:
               
                //                DebugPrintf("'%s' -> MSG_SETFOCUS\n",pBN->Caption);
                                break;
                                ////////
                                       
                case        MSG_LBUTTONUP:
               
                               
                                ClrWindowStatus(hwnd,BS_PRESSED);       
                                       
                        //        DebugPrintf("'%s' -> MSG_LBUTTONUP - %d,%d\n",pBN->Caption,wParam>>16,wParam&0xffff);
                                InvalidateRect(hwnd,0,0);
                                UpdateWindow(hwnd);
                                if(WindowStyle(hwnd,WS_NCCHILD))
                                {
                                        SendMessageToParent(hwnd,MSG_SYSCOMMAND,(BN_UP<<16)|GetWindowID(hwnd),hwnd);
                                }
                                else
                                {
                                        SendMessageToParent(hwnd,MSG_COMMAND,(BN_UP<<16)|GetWindowID(hwnd),hwnd);
                                }
                                break;
                               
                                ///////
               
                case        BM_SETIMAGE:
                                if(WindowStyle(hwnd,BS_IMG))
                                {
                                        IMG_BUTTON_DATA *btn;
                                        /////
                                       
                                        btn=(void*)GetWindowPrivateData(hwnd);
                                        if(btn)
                                        {
                                                btn->hImg                        =(HANDLE)wParam;
                                                btn->hPressedImg        =(HANDLE)lParam;
                                        }
                                }
                                break;
                                ////
                               
                case        BM_GETIMAGE:
               
                                break;
                                ////
                                               
                case        MSG_PAINT:
                                                       
                        //        DebugPrintf("'%s' -> MSG_PAINT\n",pBN->Caption);

                                hdc        =BeginPaint(hwnd);
                                if(hdc==0)        break;       
                                               
                               
                                ButtonDraw(hdc,hwnd);
                               
                                EndPaint(hwnd,hdc);
                                break;
                                ////////
                               
                case        MSG_DESTROY:
                               
                                ButtonRelease(hwnd);
                                break;
                                ///////////
                               
                default:
                                return        DefaultWindowProc(hwnd,msg,wParam,lParam);
                                break;

        }

        return        MSG_NULL;
}

/*============================================================================*/

/*============================================================================*/

static        WNDCLASS wnd_class;

void        RegisButtonClass(void)
{
        ////
       
        wnd_class.ClassName        ="button";
        wnd_class.Type                =WIN_TYPE_WIDGET;
        wnd_class.Style                =0;
        wnd_class.Proc                =ButtonProc;
        RegisterWindowClass(&wnd_class);
       
}

/*============================================================================*/

出0入0汤圆

发表于 2010-3-22 12:33:38 | 显示全部楼层
好贴!

出0入0汤圆

 楼主| 发表于 2010-3-22 12:35:55 | 显示全部楼层
liuweiele ,终于出现了呀.

出0入0汤圆

发表于 2010-3-22 12:48:15 | 显示全部楼层
好东西

出0入0汤圆

发表于 2010-3-22 13:01:27 | 显示全部楼层
Microchip提供的GUI Lib  提供Graphics Display Designer来做界面调整等
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en544475

出0入0汤圆

发表于 2010-3-22 13:32:39 | 显示全部楼层
Microchip的GUI好像不支持多任务多窗口

出0入0汤圆

发表于 2010-3-22 16:41:30 | 显示全部楼层
标记一下

出0入0汤圆

 楼主| 发表于 2010-3-23 20:05:32 | 显示全部楼层
Microchip的GUI做简单的不可以.
现在山寨机的UI都比他好.
TI LM3图形库(GUI) 是很好,但没有用过,不知性能怎么样.
liuweiele,你的透明的GUI处理还是很好的.

出0入0汤圆

发表于 2010-3-23 22:37:58 | 显示全部楼层
回复【27楼】lgl_debug
Microchip的GUI做简单的不可以.
现在山寨机的UI都比他好.
TI LM3图形库(GUI) 是很好,但没有用过,不知性能怎么样.
liuweiele,你的透明的GUI处理还是很好的.
-----------------------------------------------------------------------

一直在研究更先进的方案

出0入0汤圆

发表于 2010-3-24 00:35:32 | 显示全部楼层
感谢几位高手的无私奉献。。。

出0入0汤圆

发表于 2010-6-25 11:45:16 | 显示全部楼层
mark!~

出0入0汤圆

发表于 2010-6-25 23:46:32 | 显示全部楼层
好贴 mark~!

出0入0汤圆

发表于 2010-7-12 19:08:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-12 20:59:09 | 显示全部楼层
liuweiele是这方面的专家呀

出0入0汤圆

发表于 2011-1-26 16:27:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-27 15:34:32 | 显示全部楼层
谢谢lz,都是好东西。mark

出0入0汤圆

发表于 2011-1-27 16:10:53 | 显示全部楼层
记号一下

出0入0汤圆

发表于 2011-1-27 17:04:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-29 18:37:11 | 显示全部楼层
gui

出0入0汤圆

发表于 2011-1-29 18:51:42 | 显示全部楼层
liuweiele Liuwei, 能把你剪裁的算法整理一下吗?
特别是怎么实现矩形相剪的算法,好像你就没放出这个函数

出0入0汤圆

发表于 2011-1-29 18:55:56 | 显示全部楼层
用qt Creater

出0入0汤圆

发表于 2011-1-29 18:57:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-24 12:28:19 | 显示全部楼层
关注。

出0入0汤圆

发表于 2011-7-24 19:55:37 | 显示全部楼层
关注中。。。。。。。。。。。。。。。。。

出0入0汤圆

发表于 2011-7-24 22:34:46 | 显示全部楼层
强烈关注中!

出0入0汤圆

发表于 2011-8-11 21:31:06 | 显示全部楼层
关注好帖。

出0入0汤圆

发表于 2011-12-13 14:18:22 | 显示全部楼层
这个要好好珍藏啊

出0入0汤圆

发表于 2011-12-23 21:13:24 | 显示全部楼层
关注中!

出0入0汤圆

发表于 2011-12-24 01:56:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-24 14:03:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-24 14:42:54 | 显示全部楼层
ding

出0入0汤圆

发表于 2012-5-3 19:05:51 | 显示全部楼层
可惜这么晚才发现,这个必须得顶

出0入17汤圆

发表于 2012-9-9 20:38:59 | 显示全部楼层
此贴是好贴,顶起~~~~~~~~~~~~~

出0入0汤圆

发表于 2012-12-5 08:33:24 | 显示全部楼层
mark,标记

出0入17汤圆

发表于 2013-4-22 09:34:38 | 显示全部楼层
GUI方面的好帖,顶起~~~~~~~~~~~

出0入0汤圆

发表于 2013-9-28 22:36:04 | 显示全部楼层
研究研究GUI。向各位前辈学习。

出0入0汤圆

发表于 2014-1-10 10:25:07 | 显示全部楼层
呵呵,差距啊.还有太远的路要走.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 22:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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