Unity支持自行创建窗口,也支持自定义窗口布局。在Project视图中创建一个Editor文件夹,在文件夹中再创建一条脚本。

自定义窗口需要让脚本继承EditorWindow再设置MenuItem,此时在Unity导航菜单栏中GameObjec->window就可创建一个自定义窗口。

0.窗口:

using UnityEngine;
using UnityEditor;//引入编辑器命名空间
publicclassMyEditor:EditorWindow
{
[MenuItem("GameObject/caymanwindow")]
staticvoidAddWindow()
{
//创建窗口
Rect wr =newRect(0,0,500,500);
//另一种方式:myEditor window = (myEditor)EditorWindow.GetWindow(typeof(myEditor), true, "cayman");
MyEditor window =(MyEditor)EditorWindow.GetWindowWithRect(typeof(MyEditor),wr,true,"widow name");
window.Show();
}
//[MenuItem("GameObject/caymanwindow", true)] //如果没有选择物体,禁用菜单
// static bool ValidateSelection() {
// return Selection.activeGameObject != null;
// }
}
 
1.LabelField制作一个标签字段(通常用于显示只读信息)
LabelField(string label1,string label2,GUILayoutOption[] options)
//参数:label1标签字段前面的标签  label2显示在右侧的标签  options额外布局属性可选列表  --无返回值
publicclass myEditor3 :EditorWindow{
//在编辑器显示一个标签,带有自编辑器开始的秒数
[MenuItem("cayman/tempShow")]
staticvoid newWelcome()
{
myEditor3 window3 =(myEditor3)EditorWindow.GetWindow(typeof(myEditor3),true,"Eam");
window3.Show();
}
voidOnGUI()
{
EditorGUILayout.LabelField("Time since start: ",EditorApplication.timeSinceStartup.ToString());
this.Repaint();//实时刷新
}
}

  

效果:
 
2.Toggle开关按钮
Toggle(bool value,GUILayoutOption[] options)
Toggle(string label,bool value,GUILayoutOption[] options)
//参数:label开关按钮前面的可选标签  value开关按钮的显示状态 options额外布局属性的可选列表  
//返回:bool,开关按钮的选择状态
//如果开关控件被选择,显示一个按钮。
bool showBtn =true;
voidOnGUI()
{
showBtn =EditorGUILayout.Toggle("Show Button", showBtn);
if(showBtn)
{
if(GUILayout.Button("Close"))
this.Close();
}
}
效果:

 
3.TextField文本字段
TextField(string text,GUILayoutOption[] options)                                 TextField(string label,string text,GUIStyle style,GUILayoutOption[] options)
TextField(string text,GUIStyle style,GUILayoutOption[] options)           TextField(GUIContent label,string text,GUILayoutOption[] options)
TextField(string label,string text,GUILayoutOption[] options)                TextField(GUIContent label,string text,GUIStyle style,GUILayoutOption[] options)
//参数:label可选标签  text编辑的文本  style可选样式  options额外布局属性的可选列表
//返回:string,用户输入的文本
  //通过字段,自动改变选择物体的名字
string objectName ="";
voidOnGUI()
{
GUILayout.Label("Select an object in the hierarchy view");
if(Selection.activeGameObject)
Selection.activeGameObject.name =EditorGUILayout.TextField("Object Name: ",Selection.activeGameObject.name);
this.Repaint();//实时刷新
}
}
效果:
 
4.TextArea文本区域
TextArea(string text,GUILayoutOption[] options)
TextArea(string text,GUIStyle style,GUILayoutOption[] options)
//参数:text可编辑的文本  style可选样式 options额外布局属性的可选列表
//返回:string,用户输入的文本
//在编辑器窗口可视化脚本,这可扩展保存脚本
string text ="Nothing Opened...";
TextAsset txtAsset;
Vector2 scroll;
voidOnGUI()
{
TextAsset newTxtAsset =EditorGUILayout.ObjectField("添加", txtAsset,typeof(TextAsset),true)asTextAsset;
if(newTxtAsset != txtAsset)
ReadTextAsset(newTxtAsset);
scroll =EditorGUILayout.BeginScrollView(scroll);
text =EditorGUILayout.TextArea(text,GUILayout.Height(position.height -));
EditorGUILayout.EndScrollView();
}
voidReadTextAsset(TextAsset txt){
text = txt.text;
txtAsset = txt;
}
}
效果:
 
5.SelectableLabel 可选择标签(通常用于显示只读信息,可以被复制粘贴)
SelectableLabel(string text,GUILayoutOption[] options)
SelectableLabel(string text,GUIStyle style,GUILayoutOption[] options)
//参数:text显示的文本 style可选样式 options额外布局属性的可选列表   无返回值
string text="";
voidOnGUI()
{
EditorGUILayout.SelectableLabel(text); //文本:可以选择然后复制粘贴
}
 
6.PasswordField 密码字段
PasswordField (string password, GUILayoutOption[] options)    PasswordField (string password,GUIStyle style, GUILayoutOption[] options)
PasswordField (string label,string password,GUILayoutOption[] options)    PasswordField (string password,GUIStyle style,GUILayoutOption[] options)
PasswordField (GUIContent label,string password, GUILayoutOption[] options)    PasswordField (GUIContent label,string password,GUIStyle style,GUILayoutOption[] options)
//参数:label开关按钮前面的可选标签  password编辑的密码  style可选样式   options指定额外布局属性的可选列表
//返回:string,用户输入的密码

//创建密码字段并可视化在密码字段有什么键入。
string text ="Some text here";
function OnGUI(){
text =EditorGUILayout.PasswordField("Type Something:",text);
EditorGUILayout.LabelField("Written Text:", text);
}
}
效果:
 
7.制作一个文本字段用于输入小数/整数。
FloatField 浮点数字段:返回小数,由用户输入的值

 IntField   整数字段:返回整数,由用户输入的值
int clones=1;
voidOnGUI(){
clones=EditorGUILayout.IntField("Number of clones:", clones);
if(GUILayout.Button("Clone!"))
for(var i =0; i < clones; i++)//复制选择物体的次数。
Instantiate(Selection.activeGameObject,Vector3.zero,Quaternion.identity);
}
}

  

 
8.Slider 滑动条
--IntSlider 整数滑动条
MinMaxSlider 最小最大滑动条
Slider(float leftValue,float rightValue,GUILayoutOption[] options)
Slider(string label,float leftValue,float rightValue,GUILayoutOption[] options)
Slider(GUIContent label,float value,float leftValue,float rightValue,GUILayoutOption[] options)
//参数:label开关按钮前的可选标签  value编辑的值  leftValue滑动条最左边的值  rightValue滑动条最右边的值  options。。。
//返回:float,由用户设置的值
//缩放选择的游戏物体,在1-100之间
float scale =0.0f;
voidOnGUI()
{
scale =EditorGUILayout.Slider(scale,1,100);
}
voidOnInspectorUpdate()
{
if(Selection.activeTransform)
Selection.activeTransform.localScale =newVector3(scale, scale, scale);
}

  

//随机放置选择的物体在最小最大滑动条之间
float minVal =-10.0f;
float minLimit =-20.0f;
float maxVal =10.0f;
float maxLimit =20.0f;
voidOnGUI()
{
EditorGUILayout.LabelField("Min Val:", minVal.ToString());
EditorGUILayout.LabelField("Max Val:", maxVal.ToString());
EditorGUILayout.MinMaxSlider(ref minVal,ref maxVal, minLimit, maxLimit);
if(GUILayout.Button("Move!"))
PlaceRandomly();
}
voidPlaceRandomly()
{
if(Selection.activeTransform)
Selection.activeTransform.position =
newVector3(Random.Range(minVal, maxVal),
Random.Range(minVal, maxVal),
Random.Range(minVal, maxVal));
else
Debug.LogError("Select a GameObject to randomize its position.");
}
效果:  
 
9.Popup弹出选择菜单
Popup(int selectedIndex,string[] displayOptions,GUILayoutOption[] paroptions)                          Popup(int selectedIndex,string[] displayOptions,GUIStyle style,GUILayoutOption[] paroptions)
Popup(string label,int selectedIndex,string[] displayOptions,GUILayoutOption[] paroptions)         Popup(GUIContent label,int selectedIndex,string[] displayOptions,GUILayoutOption[] paroptions)。。。。
//参数:label字段前面可选标签  selectedIndex字段选项的索引  displayedOptions弹出菜单选项的数组  style可选样式 options。。
//返回:int,用户选择的选项索引
string[] options ={"Cube","Sphere","Plane"};
int index =;
voidOnGUI()
{
index =EditorGUILayout.Popup(index, options);
if(GUILayout.Button("Create"))
InstantiatePrimitive();
}
voidInstantiatePrimitive(){
switch(index){
case0:
GameObject cube=GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.position =Vector3.zero;
break;
case1:
GameObject sphere=GameObject.CreatePrimitive(PrimitiveType.Sphere);
sphere.transform.position =Vector3.zero;
break;
case2:
GameObject plane=GameObject.CreatePrimitive(PrimitiveType.Plane);
plane.transform.position =Vector3.zero;
break;
default:
Debug.LogError("Unrecognized Option");
break;
}
}
}
效果:
 
10.EnumPopup 枚举弹出选择菜单(效果同上)
//返回System.Enum,用户选择的枚举选项。
enum OPTIONS
{
CUBE =,
SPHERE =,
PLANE =
}
publicclass myEditor3 :EditorWindow{
OPTIONS op=OPTIONS.CUBE;
[MenuItem("cayman/tempShow")]
staticvoid newWelcome()
{
myEditor3 window3 =(myEditor3)EditorWindow.GetWindow(typeof(myEditor3),true,"Eam");
window3.Show();
}
voidOnGUI()
{
op =(OPTIONS)EditorGUILayout.EnumPopup("Primitive to create:", op);
}
}
 
11.IntPopup 整数弹出选择菜单
IntPopup(string label,int selectedValue,string[] displayOptions,int[] optionValues,GUIStyle style,GUILayoutOption[] paramsOptions).....
//参数:label字段前面的可选标签  selectedValue字段选项的索引 displayOptions弹出菜单項数组 optionValues每个选项带有值的数组。。
//返回:int,用户选择的选项的值
int selectedSize =;
string[] names ={"Normal","Double","Quadruple"};
int[] sizes ={,,};
voidOnGUI()
{
selectedSize =EditorGUILayout.IntPopup("Resize Scale: ", selectedSize, names, sizes);
if(GUILayout.Button("Scale"))
ReScale();
}
voidReScale()
{
if(Selection.activeTransform)
Selection.activeTransform.localScale =newVector3(selectedSize, selectedSize, selectedSize);
elseDebug.LogError("No Object selected, please select an object to scale.");
}
效果:
 
12.TagField 标签字段   LayerField层字段
1/ TagField(string label,string tag,GUIStyle style,GUILayoutOption[] paramsOptions)...
//参数:label字段前面的可选标签  tag显示字段的标签 。。
//返回:string,用户选择的标签
2/ LayerField(string label,int layer,GUIStyle style,GUILayoutOption[] paramsOptions)...
参数:label字段前面的可选标签 layer显示在该字段的层。。
//返回:int,用户选择的层
string tagStr ="";
int selectedLayer=;
voidOnGUI()
{ //为游戏物体设置
tagStr =EditorGUILayout.TagField("Tag for Objects:", tagStr);
if(GUILayout.Button("Set Tag!"))
SetTags();
if(GUILayout.Button("Set Layer!"))
SetLayer();
}
voidSetTags(){
foreach(GameObject go inSelection.gameObjects)
go.tag = tagStr;
}
voidSetLayer(){
foreach(GameObject go inSelection.gameObjects)
go.laye= tagStr;
}
效果:
 
13.ObjectField 物体字段(拖拽物体或拾取器选择物体)
ObjectField(string label,Object obj,Type objType,bool allowSceneObjects,GUILayoutOption[] paramsOptions)
//label字段前面的可选标签   obj字段显示的物体   objType物体的类型    allowSceneObjects允许指定场景物体..
//返回:Object,用户设置的物体
Object source;
Texture myme;
voidOnGUI()
{
EditorGUILayout.BeginHorizontal();
source =EditorGUILayout.ObjectField("hiahia",source,typeof(Object));
myme= (Texture)EditorGUILayout.ObjectField("hehe",myme,typeof(Texture));//注意类型转换
EditorGUILayout.EndHorizontal();
}
效果:
 
14.Vector2Field 二维向量字段  Vector3Field 三维向量字段(略,同2维)
Vector2Field (string label,Vector2 value,GUILayoutOption[] options)
//参数:label字段前面的可选标签  value编辑的值  options...
//返回:Vector2,由用户输入的值
float distance =;
Vector2 p1, p2;
voidOnGUI()
{
p1 =EditorGUILayout.Vector2Field("Point 1:", p1);
p2 =EditorGUILayout.Vector2Field("Point 2:", p2);
EditorGUILayout.LabelField("Distance:", distance.ToString());
}
voidOnInspectorUpdate()//面板刷新
{
distance =Vector2.Distance(p1, p2);
this.Repaint();
}
效果:
 
15.ColorField 颜色字段
ColorField (string label,Color value,...)
//参数:label字段前面的可选标签  value编辑的值
//返回:Color,由用户输入的值
Color matColor =Color.white;
voidOnGUI()
{
matColor =EditorGUILayout.ColorField("New Color", matColor);
if(GUILayout.Button("Change!"))
ChangeColors();
}
voidChangeColors(){
if(Selection.activeGameObject)
foreach(var t inSelection.gameObjects)
if(t.GetComponent<Renderer>())
t.GetComponent<Renderer>().sharedMaterial.color = matColor;
}
效果:
 
16.
 
 
 
 
 
 

 
 
 
 
 
 
 

 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
EditorWindow.GetWindowWithRect() 和 EditorWindow.GetWindow()都可以创建一个窗口。前者可以规定窗口的区域,后者可通过鼠标动态的延伸窗口。参数1表示窗口的对象,参数2表示窗口的区域,参数3表示窗口类型true表示窗口不会被别的窗口覆盖,参数4表示窗口的名称。
  1. using UnityEngine;
  2. using UnityEditor;
  3. publicclassMyEditor:EditorWindow
  4. {
  5. [MenuItem("GameObject/caymanwindow")]
  6. staticvoidAddWindow()
  7. {
  8. //创建窗口
  9. Rect wr =newRect(0,0,500,500);
  10. MyEditor window =(MyEditor)EditorWindow.GetWindowWithRect(typeof(MyEditor),wr,true,"widown name");
  11. window.Show();
  12. }
  13. //输入文字的内容
  14. privatestring text;
  15. //选择贴图的对象
  16. privateTexture texture;
  17. float myFloat =1.23f;
  18. private bool kaiguan;//开关
  19. private bool groupEnabled;//区域开关
  20. publicvoidAwake()
  21. {
  22. //在资源中读取一张贴图
  23. texture =Resources.Load("1")asTexture;
  24. }
  25. //绘制窗口时调用
  26. voidOnGUI()
  27. {
  28. //输入框控件
  29. text =EditorGUILayout.TextField("输入文字:",text);//3.制作一个文本字段
  30. if(GUILayout.Button("打开通知",GUILayout.Width(200)))
  31. {
  32. //打开一个通知栏
  33. this.ShowNotification(newGUIContent("This is a Notification"));
  34. }
  35. if(GUILayout.Button("关闭通知",GUILayout.Width(200)))
  36. {
  37. //关闭通知栏
  38. this.RemoveNotification();
  39. }
  40. //文本框显示鼠标在窗口的位置
  41. EditorGUILayout.LabelField("鼠标在窗口的位置",Event.current.mousePosition.ToString());//1.制作一个标签字段(通常用于显示只读信息)
  42. showBtn = EditorGUILayout.Toggle("开关", showBtn);
     
            groupEnabled = EditorGUILayout.BeginToggleGroup("Optional Settings", groupEnabled);
            text21 = EditorGUILayout.TextField("请输入帐号:", text21);
            text3 = EditorGUILayout.PasswordField("请输入密码",text3); //密码输入
            if (GUILayout.Button("登录", GUILayout.Width(400)))
            {
                //
            }
            int01 = EditorGUILayout.IntField("输入实例化份数:",int01);
            if (GUILayout.Button("实例化"))   //根据份数,实例化选择的物体
            {
                for (int i = 0; i < int01; i++)
                {
                    Instantiate(Selection.activeGameObject,Vector3.zero,Quaternion.identity);
                }
            }
     
            EditorGUILayout.EndToggleGroup();
            scale1 = EditorGUILayout.Slider(scale1,1,100); //滑动条
            index = EditorGUILayout.Popup(index,options); //弹出选择菜单
            if(GUILayout.Button("创建一个")){
                switch (index)
                {
                    case 0:
                        GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
                        cube.transform.position = Vector3.zero;
                        break;
                    case 1:
                        GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                        sphere.transform.position = Vector3.zero;
                        break;
                    case 2:
                        GameObject plane = GameObject.CreatePrimitive(PrimitiveType.Plane);
                        plane.transform.position = Vector3.zero;
                        break;
                    default:
                        break;
                }
            }
     
            showPosition = EditorGUILayout.Foldout(showPosition, status);     //制作一个左侧带有箭头的折叠标签
            if (showPosition)
            {
                if (Selection.activeTransform)
                {
                    Selection.activeTransform.position =
                        EditorGUILayout.Vector3Field("Position", Selection.activeTransform.position);
                    status = Selection.activeTransform.name;
                }
     
                if (!Selection.activeTransform)
                {
                    status = "Select a GameObject";
                    showPosition = false;
                }
            }
  43. //选择贴图
  44. texture =EditorGUILayout.ObjectField("添加贴图",texture,typeof(Texture),true)asTexture;
  45. groupEnabled =EditorGUILayout.BeginToggleGroup("Optional Settings", groupEnabled);//起始----------------------------
  46. //这里放开关区域内内容
  47. myFloat =EditorGUILayout.Slider("Slider", myFloat,-3,3);//滑动条
  48. kaiguan=EditorGUILayout.Toggle("开关", kaiguan);//2.开关
  49. EditorGUILayout.EndToggleGroup();//结束-------------------------------------
  50. if(GUILayout.Button("关闭窗口",GUILayout.Width(200)))
  51. {
  52. //关闭窗口
  53. this.Close();
  54. }
  55. }
  56. voidOnFocus()
  57. {
  58. Debug.Log("当窗口获得焦点时调用一次");
  59. }
  60. voidOnLostFocus()
  61. {
  62. Debug.Log("当窗口丢失焦点时调用一次");
  63. }
  64. voidOnHierarchyChange()
  65. {
  66. Debug.Log("当Hierarchy视图中的任何对象发生改变时调用一次");
  67. }
  68. voidOnProjectChange()
  69. {
  70. Debug.Log("当Project视图中的资源发生改变时调用一次");
  71. }
  72. voidOnInspectorUpdate()//实时刷新面板
  73. {
  74. //Debug.Log("窗口面板的更新");
  75. //这里开启窗口的重绘,不然窗口信息不会刷新
  76. this.Repaint();
  77. }
  78. voidOnSelectionChange()
  79. {
  80. //当窗口出去开启状态,并且在Hierarchy视图中选择某游戏对象时调用
  81. foreach(Transform t inSelection.transforms)
  82. {
  83. //有可能是多选,这里开启一个循环打印选中游戏对象的名称
  84. Debug.Log("OnSelectionChange"+ t.name);
  85. }
  86. }
  87. voidOnDestroy()
  88. {
  89. Debug.Log("当窗口关闭时调用");
  90. }
  91. }
  92. //http://www.ceeger.com/Script/EditorGUILayout/EditorGUILayout.html
 
然后我们在扩充一下自定义窗口,仔细看看窗口的生命周期。
  1.  
 
 
 

 
 
 
 
 
 
 
 
 
 
 

拓展自定义编辑器窗口(EditorGUILayout类)的更多相关文章

  1. Unity3D研究院之拓展自定义编辑器窗口

    Unity支持自行创建窗口,也支持自定义窗口布局.在Project视图中创建一个Editor文件夹,在文件夹中在创建一条脚本. 自定义窗口需要让脚本继承EditorWindow在设置MenuItem, ...

  2. 【Unity】自定义编辑器窗口——拓展编辑器功能

    最近学习了Unity自定义编辑器窗口,下面简单总结,方便用到时回顾. 新建一个脚本: using UnityEngine; using System.Collections; using UnityE ...

  3. Unity场景道具模型拓展自定义编辑器

    (一)适用情况 当游戏主角进入特定的场景或者关卡,每个关卡需要加载不同位置的模型,道具等.这些信息需要先在unity编辑器里面配置好,一般由策划干这事,然后把这些位置道具信息保存在文件,当游戏主角进入 ...

  4. Unity 自定义编辑器窗口 画线

    最近在学习状态机, 想自己实现一个可视化编辑器, 需要将多个状态之间用线条连接起来, 效果如下: 代码如下: Material m;Vector2 start;Vector2 end;Color co ...

  5. 【Unity编辑器】UnityEditor多重弹出窗体与编辑器窗口层级管理

    一.简介 最近马三为公司开发了一款触发器编辑器,对于这个编辑器策划所要求的质量很高,是模仿暴雪的那个触发器编辑器来做的,而且之后这款编辑器要作为公司内部的一个通用工具链使用.其实,在这款触发器编辑器之 ...

  6. WPF自定义窗口基类

    WPF自定义窗口基类时,窗口基类只定义.cs文件,xaml文件不定义.继承自定义窗口的类xaml文件的根节点就不再是<Window>,而是自定义窗口类名(若自定义窗口与继承者不在同一个命名 ...

  7. WPF自学入门(九)WPF自定义窗口基类

    今天简单记录一个知识点:WPF自定义窗口基类,常用winform的人知道,winform的窗体继承是很好用的,写一个基础窗体,直接在后台代码改写继承窗体名.但如果是WPF要继承窗体,我个人感觉没有理解 ...

  8. WPF 之 创建继承自Window 基类的自定义窗口基类

    开发项目时,按照美工的设计其外边框(包括最大化,最小化,关闭等按钮)自然不同于 Window 自身的,但窗口的外边框及窗口移动.最小化等标题栏操作基本都是一样的.所以通过查看资料,可按如下方法创建继承 ...

  9. (转)初步认识拓展UnityEditor编辑器定制

    初步认识拓展UnityEditor编辑器定制 热度 9529 2015-9-4 18:50 |个人分类:Unity3d| 编辑器, 拓展 我相信无数初学者看别人游戏都经常看到他们的Inspector中 ...

随机推荐

  1. EasyUI 1.3.6 DateBox添加清空按钮

    EasyUI 1.3.6 DateBox添加清空按钮 效果如图: EasyUI datebox是没有清空按钮的,可通过如下方法加入: 打开jquery.easyui.min.js看到这样如此乱的代码, ...

  2. Emacs折腾经验谈

    Emacs折腾经验谈 这几天都没有动力写mongodb的东西,我果然还是太懒了么~ 主要是没有一个系统的东西整理出来,加上我令人拙计的语言表达能力,这个坑只能慢慢再补了. 最近在折腾emacs这个东西 ...

  3. Arduino 3G shield using SoftwareSerial to control

    On the 3G shield, by default the power pin is on D8 and reset pin is on D9. Make it HIGH then it wor ...

  4. 深入浅出 ThreadLocal(一)

    本文参考http://lavasoft.blog.51cto.com/62575/51926/,对其中的程序进行了改写 一.概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线 ...

  5. 自己做个 Tag标签

    这是效果图,下面是源码,时间有限,有时间再完善 http://files.cnblogs.com/wxwall/tag.zip

  6. HNCU1323:算法2-1:集合union (线性表)

    http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1323 题目描述 假设利用两个线性表LA和 ...

  7. 调试设置移动端Web开发环境搭建实践

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 本文重要总结一下挪动端进行前端开发时需要用到的一些工具,以及他们之间互相的组合,同时也包含本人应用的组合. 1. Chrome To ...

  8. Mutex 实现进程独占资源

    背景:开发一套依赖硬件运行的软件,为避免硬件资源调用冲突,一个时间内只允许运行一个软件进程. 方法:使用Mutex判断该软件是否已启动,如果是,关闭即将启动的软件. 代码: static class ...

  9. 蓝桥杯 C语言 入门训练 Fibonacci数列

    问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...

  10. hdu1046

    #include<iostream> #include<cmath> using namespace std; int main() { int T,t=0,m,n; cin& ...