Windows Controls and WPF UserControls inside an XNA Game Project

33 篇文章 0 订阅
订阅专栏
DownloadFiles:  

In this article we will be working on using Windows Controls and WPF UserControls inside an XNA Game Project.

They tell Windows Controls cant be used inside an XNA game let alone WPF. Well, that has been proved in this article.

Components:

Windows Controls we'll be using

  • Button
  • TextBox
  • CheckBox
  • ElementHost

Tools

XNA GS 3.1 veya Visual Studio 2008(SP1)
.NET Framework 3.5(SP1)

We are creating a new project:

image1.gif

Now we will add reference.Project->Add Reference and then choose "System.Windows.Forms" namespace.

image2.gif

And declare it on Game1.cs:

image3.gif

Note: You may need to declare and add reference to "System.Drawing" namespace as well.

TextBox Control:

An Input control we can use on Windows Forms.We add Textbox to our XNA project:

In anywhere we can declare variables:

TextBox text1 = newTextBox();

With that we have created a new Textbox variable.We are adding the code below to our Initialize() function.

   protectedoverridevoid Initialize()
        {           
           
base.Initialize();
            text1.Location =
new System.Drawing.Point(40, 40);
            text1.BorderStyle = BorderStyle.None;
            text1.Multiline = true;
            text1.Size = newSize(400, 400);
            Control.FromHandle(Window.Handle).Controls.Add(text1);
        }

Let us explain : "Control.FromHandle(Window.Handle).Controls.Add(ornek);"

"Control.FromHandle" - helps us to call the handle we will add textbox.

"Control.FromHandle(Window.Handle)" We take the Handle of GameWindow class named Window.Game class is not a control.But because of GameWindow is a control that can be used on XNA project,we can call and add Windows Controls through it.We were able to add or remove any control while coding in Windows Forms because Windows Forms was itself a control too.Now let me tell you this: "Form class & GameWindow class looks alike".By thinking so we can make RAD(Rapid Application Development) in XNA just like we do while developing Windows Form Based Applications.

But if you run the project,you will not be able to enter a key inside TextBox class.

Because while Textbox class uses "System.Windows.Forms.Keys",XNA accepts only "XNA.Framework.Input.Keys".Although we cant make it with the Windows-Way,we will make it as we do on XNA Inputs.

string var_text1;

we add a string valuable that will store all the texts from your input and then assign to our text1 named TextBox class

protectedoverridevoid Update(GameTime gameTime)
 {
  
base.Update(gameTime);
  
if (text1.Focused)
    {
     
KeyboardState ns = Keyboard.GetState();
     
foreach (Microsoft.Xna.Framework.Input.Keys a in ns.GetPressedKeys())
        {
          var_text1 = a.ToString();
          text1.Text += var_text1;
        }
     }
 }


"KeyboardState ns = Keyboard.GetState();" -> we get all the input from Keyboard("ns.GetPressedKeys()").This helps us to to write any key value to our Textbox.

If you wish you may not take all the keys,just use "if-else" structure and take any key you want to.

Let us run the project.Whats going to happen?

image4.gif

When we press a key,it wrote as we pressed 5 times.Let me explain this:

In Xna, every event happens on Update function depends on Gametime value.1 sec process is repeated 5 times so that the game window refreshes as we want.Why is it 1 sec/5? Because in continuous things like "chasing a car,shooting an opponent" we must see whats happening instantly.The user must feel like he is playing a "Real-time" game.Because of that Gametime repeats 5 times in 1 sec.Even 1 sec can differ sometime.

Lets go back to our project.How we will solve this?

create an int variable and query it on Update function.

int
ct = 0; //the start value must be 0 so it cant be repeated.

Then update our Update function seen below:

protectedoverridevoid Update(GameTime gameTime)
 {
  
base.Update(gameTime);
  
if (text1.Focused)
    {
      ct = ct -1;
     
if(ct < 0)
       {
         ct = 5;
       }

     if(ct == 0)
       {
        
KeyboardState ns = Keyboard.GetState();
        
foreach (Microsoft.Xna.Framework.Input.Keys a in ns.GetPressedKeys())
          {
           var_text1 = a.ToString();
           Text1.Text += var_text1;
          }
       }
     }
  }


And you can enter any value without repeating:

image5.gif

Thats it! You have created a Textbox control inside an XNA Window...

BUTTON Control:

Button control helps us to accept a process.In this section i will be talking about how to add a button control and its eventhandler.

We declare our Button Class first.

Button btn = newButton();

To add this inside project-update Initialize function just like below:

protectedoverridevoid Initialize()
 {            
   base.Initialize();
   btn.Text = "Press Me!";
   btn.Location = new System.Drawing.Point(50, 50);
   btn.FlatStyle = FlatStyle.Popup;
   Control.FromHandle(Window.Handle).Controls.Add(btn);
 }

Now lets write down a simple EventHandler that will show us a MessageBox.

protectedoverridevoid Initialize()
  {           
   
base.Initialize();
    btn.Text =
"Press Me!";
    btn.Location =
new System.Drawing.Point(50, 50);
    btn.FlatStyle =
FlatStyle.Popup;
    btn.Click +=
new System.EventHandler(ButtonClick);
   
Control.FromHandle(Window.Handle).Controls.Add(btn);
  }

privatevoid ButtonClick(object sender, EventArgs e)
  {
   
MessageBox.Show("Button is Clicked!");
  }


By doing so we have added "Windows Control-Based" events inside XNA Game.

image6.gif

CHECKBOX Control:

Checkbox control helps us to select multi-options.

We declare it as seen below:

CheckBox cb = newCheckBox();

Using it:

protected
overridevoid Initialize()
 {           
  
base.Initialize();
   cb.CheckState =
CheckState.Unchecked;
   cb.Location =
new System.Drawing.Point(50, 50);
   cb.Text =
"Yes";
   cb.BackColor = System.Drawing.
Color.CornflowerBlue;
  
Control.FromHandle(Window.Handle).Controls.Add(cb);
 }

image7.gif

Lets create an eventhandler and change the text value of checkbox object.

protected
overridevoid Initialize()
 {           
  
base.Initialize();
   cb.CheckState =
CheckState.Indeterminate;
   cb.Location =
new System.Drawing.Point(50, 50);
   cb.Text =
"Indeterminate";
   cb.BackColor = System.Drawing.
Color.CornflowerBlue;
   cb.CheckStateChanged +=
newEventHandler(CBChanged);
  
Control.FromHandle(Window.Handle).Controls.Add(cb);
 }

privatevoid CBChanged(Object sender, EventArgs e)
 {
 
if (cb.CheckState == CheckState.Unchecked)
     {
       cb.Text =
"No";
     }
 
elseif (cb.CheckState == CheckState.Checked)
     {
       cb.Text =
"Yes";
     }
 }


We have changed the code a little bit.

Check=Checked
No Check=Unchecked
Both of Them=Indeterminate

Lets run it!

Indeterminate Mode:

image8.gif

Unchecked Mode:

image9.gif

Checked Mode:

image10.gif

I have explained Windows controls as detailed as i can.Now lets talk about the most exciting feature: WPF!

WPF User Controls:

WPF User Controls are the most exciting controls we can add inside XNA Game.

But first we need to add some references that a WPF Application alone needs:

  • Presentation Core
  • Presentation Framework
  • UIAutomationProvider
  • WindowsBase
  • WindowsFormsIntegration

After that we will be adding our pre-made WPFUserControl from Project->"Add Existing Item..."

image11.gif

Find the files with Windows Markup Files & C# Source file and add them:

image12.gif

Now what we will do is to add them to our project as we have done before.

You can add the namespace we used for WPF UserControl.

using WindowsFormsApplication1;  //That's the Namespace we have used inside WPF UserControl

Inside this WPF User Control we have added a combobox and an event "SelectionChanged" which shows us message for the selected item.

Code of WPF UserControl:

privatevoid comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
  {
   
ComboBoxItem cbi = ((ComboBox)sender).SelectedItem asComboBoxItem;
   
MessageBox.Show(cbi.Content.ToString());
  }

XAML of WPF UserControl:

<UserControl x:Class="WindowsFormsApplication1.Kontrol1"
    xmlns=" http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x=" http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
    <Grid>
        <ComboBox Height="23" Margin="48,70,132,0" Name="comboBox1" VerticalAlignment="Top" SelectionChanged="comboBox1_SelectionChanged">
            <ComboBoxItem>1</ComboBoxItem>
            <ComboBoxItem>2</ComboBoxItem>
            <ComboBoxItem>3</ComboBoxItem>
            <ComboBoxItem>4</ComboBoxItem>
        </ComboBox>
    </Grid>
</
UserControl>

Lets add the control!

Kontrol1 kontrol11 = newKontrol1();

We declared the control.

Then inside "Initialize()" function call our control named Kontrol11...

protectedoverridevoid Initialize()
 {           
  
base.Initialize();
  
//ElementHost object helps us to connect a WPF User Control.
   ElementHost elementHost1 = newElementHost();
   elementHost1.Location =
new System.Drawing.Point(308, 69);
   elementHost1.Name =
"elementHost1";
   elementHost1.Size =
new System.Drawing.Size(350, 181);
   elementHost1.TabIndex = 1;
   elementHost1.Text =
"elementHost1";
   elementHost1.Child =
this.kontrol11;
  
Control.FromHandle(Window.Handle).Controls.Add(elementHost1);
 }

As you can see above we have added a WPF UserControl to our project

Lets run this project.Whats going to happen?

image13.gif

Yes Different UIS such as XAML cannot be used in directly inside an XNA Game.For that we must convert it to Single-Threaded.

Open your Program.cs file:

Change as it is:

using System;

namespace DemoTest
{
   
staticclassProgram
    {
        [
STAThread]
       
staticvoid Main(string[] args)
        {
           
using (Game1 game = newGame1())
            {
                game.Run();
            }
        }
    }
}


[STAThread] Helps us to achieve this.Now our project is Single Threaded.And call any different UIs inside XNA!

image14.gif

As you can see we have added it inside XNA Game!

image15.gif

We are selecting an item and then:

It shows us the selected value.

image16.gif

In this article I have written as detailed as much to explain how we can do all of this inside XNA Game.

By doing so you have integrated Windows Controls and WPF User Controls inside XNA!

I will tell much more about REXA(Rich-Effects XNA Applications) in the following days.

Update:   FULL SCREEN

As you well know these samples run Windowed Mode.But what if they were running Full Screen?

If we use XNA's graphics.ToggleFullScreen() or graphics.IsFullScreen=true  then all the things we have used -like Windows Controls and Dialogs- will disappear.Thats because Direct3D that XNA uses will take over the control and remove all the Window-based controls and dialogs from full screen view.

If we cant use XNA Framework for full screen what are we going to do?

It is easy to call a one-line code for full screen,isnt it? Well what are you going to do when you face something like that not able to see Windows Controls or anything related to Windows Object Model?

Theres a solution! : We will develop it the "Windows-Way"..

We will be using Windows API for Full Screen.So what i suggest you is to follow the steps then you will find it most easy:

1) Add these references by coding:

using System.Runtime.InteropServices;

2) Add Windows API declarations:

[DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndIntertAfter, int X, int Y, int cx, int cy, int uFlags);
[DllImport("user32.dll")]

private static extern int GetSystemMetrics(int Which);

 

private const int SM_CXSCREEN = 0;

private const int SM_CYSCREEN = 1;

private IntPtr HWND_TOP = IntPtr.Zero;

private const int SWP_SHOWWINDOW = 64;

These are going to show full screen or restore Windowed Mode.

3) Get Screen Values:

public
int ScreenX
{
  get
  {
    return GetSystemMetrics(SM_CXSCREEN);
  }
}
public int ScreenY
{
  get
  {
    return GetSystemMetrics(SM_CYSCREEN);
  }
}

4) Write Full Screen & Restore Codes:

private
void FullScreen()
{
    Form.FromHandle(Window.Handle).FindForm().WindowState=FormWindowState.Maximized;
    Form.FromHandle(Window.Handle).FindForm().FormBorderStyle = FormBorderStyle.None;
    Form.FromHandle(Window.Handle).FindForm().TopMost = true;
    SetWindowPos(Window.Handle, HWND_TOP, 0, 0, ScreenX, ScreenY, SWP_SHOWWINDOW);
}
private void Restore()
{
    Form.FromHandle(Window.Handle).FindForm().WindowState = FormWindowState.Normal;
    Form.FromHandle(Window.Handle).FindForm().FormBorderStyle = FormBorderStyle.FixedDialog;
    Form.FromHandle(Window.Handle).FindForm().TopMost = false;
}

5) For calling these 2 functions we will write a code @ Update function:

KeyboardState
newstat = Keyboard.GetState();
if (newstat.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Escape))
{
   FullScreen();
}
else if (newstat.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Space))
{
   Restore();


If we click on Escape the game will run on Full Screen.If we press Space it will restore the Windowed Mode.

Lets run the updated part and see what happens:

Windowed Mode:

1.gif
FULL SCREEN:

2.gif 
Thats it! We have successfully Run our project in Full Screen.As you can see its very simple isnt it?

Visual Studio 2008 and .NET Framework 3.5 Service Pack 1 Beta - ScottGu
06-12 1142
导读:   ScottGus Blog   Scott Guthrie lives in Seattle and builds a few products for Microsoft   Visual Studio 2008 and .NET Framework 3.5 Service Pack 1 Beta   Earlier today we shipped a public be
WPF中System.Windows.Controls空间所有类的类图
12-24
最近学习WPF时,对各控件的关系,类的层次有点头晕,所以反编译PresentationFramework.dll库后,将System.Windows.Controls空间下的所有类生成类图,经过整理后导出为PDF文件,供学习WPF时与我有同样烦恼的朋友借鉴...
[WinForm] UserControl 释放资源的 OnHandleDestroyed 事件
xuyongbeijing2008的专栏
03-11 2431
使用 Form 时,我们可以从 FormClosing 事件知道 Form 准备要关闭了, 使用 UserControl 却没有这样对应的公开事件, 但 Control 已经有设计这样的 protected event,叫做 OnHandleDestroyed, 当调用 Dispose() 时,或者使用 using () {} 自动调用 Dispose() 时,就会触发 OnHandleDestroyed, 意思是控件的控制代码准备被终结,表示这个控件不能再继续使用,接着就等待被GC回收, 所
Windows Controls and WPF UserControls Inside an Xna Game Project
weixin_30718391的博客
09-19 56
In this article we will be working on using Windows Controls and WPF UserControls inside an XNA Game Project. They tell Windows Controls cant be used inside an XNA game let alone WPF. Well, that has ...
Windows Phone Developer Tools RTM Release Notes(09/16/2010)
weixin_30716725的博客
09-17 197
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&displaylang=en Windows Phone Developer Tools RTM Release Notes 09/16/2010 These are the release ...
.NET Open Source Developer Projects
张彤的专栏
03-26 3503
This community maintained list showcases .NET open source developer projects. It is intended to include projects that are useful for any aspect of the development process. For consumer projects, see t
Modern Cross Platform Development
上步七星
10-22 1898
Modern Cross Platform Development Why isn't there a modern technology available for using the same codebase to produce native apps on all of the currently popular platforms - I'm talking iOS
[it-ebooks]电子书列表v0.1.1
热门推荐
mapoor的专栏
02-06 1万+
#### 感谢it-ebooks团队 #### it-ebooks电子书质量很好,但搜索功能不太完善 #### 格式说明: [年份] 书名 || 副标题 || 页码 || 链接 #### [2015]: Data Mining Algorithms || Explained Using R || 720 || http://it-ebooks.info/book/4
PDC2008 PPT
weixin_34040079的博客
01-31 377
BB01 - A Lap Around the Azure Services Platform (John Shewchuk) PPTX BB02 - Architecture of the .NET Services (Dennis Pilarinos, John S...
(转) [it-ebooks]电子书列表
weixin_33738982的博客
01-15 3161
[it-ebooks]电子书列表 [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Objective-C to develop iPhone games http://it-ebooks.info/book/3544/Learni...
Actipro WPF Controls v13.1.0581注册版
06-01
Actipro WPF Controls是一套专业的WPF用户界面控件,该控件包含了Actipro公司所有WPF控件,如SyntaxEditor等, 备注: 1.之前提供国该软件12.2.0573版本的注册信息,有人说不能注册,有人说能注册,这次提供13.1....
AI-wpf-controls一个Wpf控件库
03-25
一个Wpf控件库。本控件库,结合了MahApps.Metro,Material-Design,HandyControl,PanuonUI,Xceed等控件库,做了一个集成,并有部分自定义的控件
Telerik WPF Controls Tutorial 无水印pdf 2014
11-16
Telerik controls and Windows Presentation Foundation (WPF) are a winning combination, and this tutorial will give you the skills you need to create powerful applications. You'll need to know C#, SQL, ...
WPF从您的UserControls重新调整主窗口的大小
04-08
内容大小只是不能为您提供每个用户控件所需的窗口大小。
基于springboot+vue+MySQL实现的在线考试系统+源代码+文档
06-01
web期末作业设计网页 基于springboot+vue+MySQL实现的在线考试系统+源代码+文档
318_面向物联网机器视觉的目标跟踪方法设计与实现的详细信息-源码.zip
06-02
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
FPGA Verilog 计算信号频率,基础时钟100Mhz,通过锁相环ip核生成200Mhz检测时钟,误差在10ns
06-02
结合等精度测量原理和原理示意图可得:被测时钟信号的时钟频率fx的相对误差与被测时钟信号无关;增大“软件闸门”的有效范围或者提高“标准时钟信号”的时钟频率fs,可以减小误差,提高测量精度。 实际闸门下被测时钟信号周期数为X,设被测信号时钟周期为Tfx,它的时钟频率fx = 1/Tfx,由此可得等式:X * Tfx = X / fx = Tx(实际闸门)。 其次,将两等式结合得到只包含各自时钟周期计数和时钟频率的等式:X / fx = Y / fs = Tx(实际闸门),等式变换,得到被测时钟信号时钟频率计算公式:fx = X * fs / Y。 最后,将已知量标准时钟信号时钟频率fs和测量量X、Y带入计算公式,得到被测时钟信号时钟频率fx。
校园二手商品交易系统三.wmv
最新发布
06-02
校园二手商品交易系统三.wmv
wpf controls
11-12
WPF控件是Windows Presentation Foundation的一部分,它是微软的一个用户界面技术。WPF控件用于创建复杂的、交互式的和美观的用户界面。 WPF控件包括各种常用的用户界面元素,如按钮、文本框、复选框、滑动条等等。...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 汇编指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL、JNL、JNG、JG、JCXZ、JECXZ、JMP、JMPE 82542
  • Mac OS 安装Wget 67931
  • Python系统调用——运行其他程序 33117
  • UIPinchGestureRecognizer 缩放,移动,旋转,UIImagePickerController 横屏,全屏 的实现 27743
  • 在C#中如何比较两个byte[]数组相等 18505

分类专栏

  • 随笔 33篇
  • c# 57篇
  • linux c 27篇
  • objective c 50篇
  • qt 3篇
  • linux kernel 3篇
  • windows mobile and phone7 7篇
  • java 4篇
  • windows driver 1篇
  • python and cocos2d 20篇
  • cocos2d 28篇
  • vb.net and vb 21篇
  • win32汇编 6篇
  • c++ 39篇
  • system 16篇
  • 图形图像处理 3篇
  • 汇编学习笔记 8篇
  • 调试技术 1篇
  • lua 2篇
  • wxpython 1篇
  • cocos2d-x 1篇
  • php 3篇
  • nginx 1篇

最新评论

  • itunes gift card apple id 充值接口API秒冲接口收藏

    qq_24606435: 礼品卡查询可以实现吗?

  • itunes gift card apple id 充值接口API秒冲接口收藏

    Monster_qwq: 大佬,接口还有吗

  • winsock 下载

    wjjhyf: 谢谢!找好久!

  • itunes gift card apple id 充值接口API秒冲接口收藏

    wht331246798: 已联系

  • itunes gift card apple id 充值接口API秒冲接口收藏

    BigOneBoom: 咨询接口,发邮件了没收到回复.私信看一下

最新文章

  • ESXi 6.5 503 Service Unavailable
  • itunes gift card apple id 充值接口API秒冲接口收藏
  • Nginx server之Nginx添加ssl支持
2022年1篇
2018年1篇
2016年8篇
2015年10篇
2014年4篇
2013年3篇
2012年60篇
2011年115篇
2010年75篇
2009年62篇
2008年45篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源爱的厘米演员表全部演员姓李叫则的起名福星高照演员表苏起名字男雯雅婷视频三救姻缘路嘉怡女孩如何起名字大全叠词女孩起名大全男孩国学起名称wc3用信字起名大全丸子加盟银行家箱房起名朱茵三级公司起名的大师吗建材公司起什么名字好萱字起名意义小时代顾源office兼容包官方下载五行属金公司起名大全老严有女不愁嫁演员表张姓女起名高分起虎字的乳名汽车用品公司起什么名字好听文具店 取名起名大全7画字有多少起名字用小酒坊起名姓黄的男孩子起名淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化