精华内容
下载资源
问答
  • 4.4.3 创建 Windows 应用程序   我们早先一创建应用程序的图形用户界面,所以,已经有了创建用户界面控件的代码。不过,仍要为控件指定用户交互逻辑。 用户可以通过两个按钮控制应用程序,第一个(btnOpen)...

    4.4.3 创建 Windows 应用程序

     

    我们早先一创建了应用程序的图形用户界面,所以,已经有了创建用户界面控件的代码。不过,仍要为控件指定用户交互逻辑。

    用户可以通过两个按钮控制应用程序,第一个(btnOpen)加载 CSV 文件,第二个(btnSave)将图表保存到图像文件中;还有一个 PictureBox 控件 boxChart,用来显示图表。清单 4.12 显示了如何把绘图代码连接到用户界面。

     

    清单4.12 添加用户交互 (F#)

    let openAndDrawChart(e) =    [1]

      letdlg = new OpenFileDialog(Filter="CSV Files|*.csv")

      if(dlg.ShowDialog() = DialogResult.OK) then

        letpieChart = drawChart(dlg.FileName)    [2]

        boxChart.Image<- pieChart  <-- 显示位图

        btnSave.Enabled<- true     <-- 启用保存图表的按钮

     

    let saveDrawing(e) =    [3]

      letdlg = new SaveFileDialog(Filter="PNG Files|*.png")

      if(dlg.ShowDialog() = DialogResult.OK) then

        boxChart.Image.Save(dlg.FileName)     <-- 保存当前图表

     

    [<STAThread>]

    do         [4]

      btnOpen.Click.Add(openAndDrawChart) | 注册事件处理程序

      btnSave.Click.Add(saveDrawing)         |

      Application.Run(mainForm)

     

    首先,代码声明了两个函数,当用户单击打开和保存按钮时调用。打开文件,用函数 openAndDrawChart[1],这个函数首先创建 OpenFileDialog,这是 Windows Forms 类,显示标准的选择文件对话框。如果用户选择一个文件,函数调用我们早先实现的函数 drawChart[2]。调用的结果是保存在内存中的位图,可以指定给PictureBox 控件的 Image 属性。第二个函数更简单,因为不需要绘制图表,把当前显示在 PictureBox 中的图像保存到指定的文件中,文件由用户通过 SaveFileDialog 指定[3]。

    我们已经讨论过执行标准的 Windows 应用程序的代码,清单 4.12 再次显示[4],是因为我们添加了两行代码。在运行应用程序之前,我们指定当用户单击 btnOpen 按钮时,应调用openAndDrawChart 函数,对第二个按钮也是类似。这是通过 Add方法,把函数注册为 Click 的事件处理程序实现的。不像在 C# 中,事件是特殊的语言构造,而F# 把事件当作是有 Add 方法的普通对象看待;F# 中的事件也有 AddHandler 和 RemoveHandler 方法,目的与C# 中的事件的 += 和 -= 运算符完全相同。我们将在第十六章详细讨论有关主题,但在大多数情况下,可以使用 Add 方法。

     

    展开全文
  • 想用2010创建 windows 应用程序,选项 是否生成文件清单 改成否也不行。总是出现 1>------ 已启动全部重新生成: 项目: Ex1-03, 配置: Debug Win32 ------ 1>生成启动时间为 2015/7/4 22:47:32。 1>_PrepareForClean:...
  • 图形引擎(一):创建Windows应用程序 本章主要讲述建立一个渲染引擎所需要的基础知识。包括创建一个Visual Studio工程,实现游戏循环,并最终在显示器上显示一个窗口。 A New Beginning 本章正式开始讲解C++...

    图形引擎(一):创建Windows应用程序

    学习了Real-Time 3D Rendering with DirectX and HLSL(点击查看书籍对应的翻译博客)一书之后我们开始创建一个小巧但功能齐全的图形渲染引擎。

    本系统博客不再重复讲解引擎的相关代码,只重点关注与书籍中不同的地方。

    概述

    第一步主要包括,配置图形引擎以及相应示例的项目工程,然后创建一个基础的Windows应用程序。我们将使用Windows平台的IDE Visual Studio 2015开发工具,并使用DirectX 11 API,以及C++开发语言。

    项目配置

    引擎主要包括两个部分,一个引擎库Library,以及示例程序Game。需要创建两工程,其中Library工程主要包含图形渲染的通用代码,Game工程是使用引擎开发的示例程序。

    目录结构

    为了更多的管理工程代码,首先确定统一的工程目录结构。我们主要使用以下的目录结构:
    目录名 目录用途
    Build 存放图形引擎对应的Visual Studio的solution文件
    Assets 存放一些除了工程代码之外的资源文件,比如3D模型,纹理,材质effects等
    External 存放第三方库(比如DirectXTK和Effects 11)
    Lib 存放Library工程生成的库文件,以及第三库的库文件(.lib文件)
    Source\Game 存放Game工程的代码
    Source\Library 存放Library工程的代码

    创建工程

    关于如何创建工程,详细请看书籍对应的翻译博客

    创建好了Library和Game工程之后,还需要添加Effects 11和DirectXTK工程。由于这两个工程的源码已经存放在External目录中,所以在RenderEngine Solution中添加已存在的工程,把这两个工程导入到解决方案中。(注意:Effects 11和DirectXTK都是由源码的形式发布的,需要自己编译,源码下载地址为:Effects 11DirectXTK

    工程创建之后,Solution Explorer的视图为:


    工程依赖和编译顺序

    接下来,设置正确的工程依赖和编译顺序,其中Game工程需要依赖Library库,而Library工程又依赖Effects 11和DirectXTK库。在Solution Explorer panel中点键点击Game工程的Refrences子项,在弹出菜单中选择Add Refrences,然后在Add Refrence对话框中勾选Library,如图

    然后在Library工程中执行同样的操作,在Add Refrence中添加DirectXTK和Effects 11。

    设置包含目录

    为了使projects在编译时能够找到DirectX的头文件,需要在project配置中指定一些文件路径。为些,在Solution Explorer panel中右键点击Library project并在弹出菜单中选择Propertiees打开Property Pages。切换到Configuration Propertiees(配置属性)-->C/C++-->General,然后参照下图,编辑Additional Include Directories。确保在debut和release选项中都进行了配置。

    在Game工程中重复这些路径配置,并增加一个路径:
    $(SolutionDir)..\source\Library
    这个配置允许Game project中的source files(源文件)直接包含Library project中的header files(头文件)。

    设置链接库及目录

    下面开始配置链接选项,打开Game project的Property Pages,转到Configuration Properties-->Linker-->Input选项页。参照下表图,编辑Additional Dependencies部分的依赖库文件。注意一下debug和release配置项的区别。

    与指定头文件包含路径一样,也要在Visual Studio中指定库文件的包含路径。这些路径由Additional Library Directories编辑项指定,该选项位于Property Pages对话框的Configuration Properties-->Linker-->General选项页中。编辑该路径,使其与下图一致

    设置编译事件

    前面讨论目录结构的时候,已经说明所有的库文件都要存放到Lib目录中,所以在Library,Effects11以及DirectXTK工程编译成功之后需要把对应的库文件拷贝到Lib目录中,当然你也可以直接设置工程的输出目录为Lib目录。
    要在编译后拷贝文件,需要在Build Events中添加DOS批处理命令,如下图所示

    由于需要把所有的.lib库文件都存放到同一个Lib目录,所以需要针对debug和release版本使用一个不同的文件名,针对debug版都在文件名末尾带一个字母d,比如Libraryd.lib。需要在Properties Pages对话框的Configuration Properties-->Ganeral选项页中修改Target Name项。

    添加工程代码

    完成了工程的配置之后,就可以添加图形引擎的相关代码了。(详细的代码介绍请查看博客
    然后编译Game工程,并运行第一个窗口应用程序。到目前为止,只是添加了Windows窗口程序,还没有任何Direct3D渲染相关的代码,接下来将继续实现引擎的DirectX 11 API部分。

    图形引擎第一步的完整工程代码及配置:

    http://download.csdn.net/detail/chenjinxian_3d/9576787

    展开全文
  • 知识点:创建Windows应用程序的方法,窗体的基本属性和方法、基本控件的使用、事件处理、消息框的使用 1、创建windows应用程序的方法 Windows应用程序是目前应用软的主流,用户使用方便且功能强大。所以掌握...

    知识点:创建Windows应用程序的方法,窗体的基本属性和方法、基本控件的使用、事件处理、消息框的使用

    1、创建windows应用程序的方法

             Windows应用程序是目前应用软的主流,用户使用方便且功能强大。所以掌握windows应用程序的开发是软件开发的必备技能。Windows应用程序由一个个窗体组成。

    1.1  应用程序和windows应用程序

    • 应用程序:为满足用户不同领域、不同问题的应用需求而提供的那部分软件。比如办公程序软件word、Excel;多媒体软件如媒体播放器、图像软件ps、crd;互联网软件如浏览器、即时通讯QQ微信……

    • windows应用程序:计算机操作系统有很多,比如windows系统、UNIX系统、DOS系统……。顾名思义,应用在windows系统上的程序就是windows应用程序。

            应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序,也就是说这类程序一般独立运行。而B/S就是浏览器端/服务器端应用程序,这类应用程序一般借助IE等浏览器来运行。

    相关概念理解

    窗体:窗体是一种文档,可以用来收集信息。它包括两部分,一部分是由窗体设计者输入的,填写窗体的人无法更改的文字或图形。窗体设计者可以插入希望得到回答的问题、选项列表、信息表格等。另一部分是由窗体填写者输入的,用于从填写窗体者处收集信息并进行整理的空白区域。窗体设计者可以在文档中插入窗体域或 ActiveX 控件,为窗体填写者提供用于收集数据的位置。

    1.2 创建Windows应用程序

    使用Visual Studio创建,创建步骤和创建控制台程序类似,程序类型选择【Window 窗体应用(.NET Framework)

    第一步:打开Visual Studio软件后,单击【文件】——【新建】——【项目】

    第二步:在新建项目对话框中选择【Window 窗体应用(.NET Framework)】,设置项目名称等信息后,单击【确定】

    第三步:在软件中对窗体进行设计

    创建完项目后,在VisualStudio 2017开发环境中会有一个默认的窗体,可以通过工具箱向其中添加各种控件来设计窗体界面。

    中间的方框就是我们需要设计和编写的窗体,默认名字是Form1,左边是工具箱,里面有窗体里用到的控件,包括:按钮、标签、文字输入框等。右边是解决方案管理器和属性栏,在属性栏中可以配置窗体的外观信息。

    控件:在工具箱里挑选需要的控件,将其放到窗体上进行使用。

    控件的使用有两种方法:

    方法一:在工具箱里鼠标左键单击控件,然后在窗体空白处单击鼠标左键,此时控件会显示在窗体上。

    方法二:在工具箱里,直接鼠标左键单击控件,不松开,将控件拖拽到窗体空白处适合的位置,然后松开鼠标鼠标左键。

    第四步:生成项目,并查看项目。

    查看结果:

     

    1.3 了解窗体文件结构

    在右边的解决方案管理器中可以看到这样一些文件。

    1.3.1 窗体文件Form1.cs

    Form1.cs是窗体文件,双击Form1.cs就可以看到对应的窗体。窗体文件由两部分组成,Form1.Designer.cs和Form1.resx。

    • Form1.Designer.cs文件:是窗体设计文件,它里面的代码都是自动生成的,当我们设计窗体,往窗体上拖放各种控件,就会在该文件中生成代码。
    • Form1.resx文件:是窗体设计文件中的各种资源(新建的窗体中默认没有该文件,当向窗体拖放控件后,会自动生成该文件。)

    注意:不要去修改Form1.Designer.cs和Form1.resx这两个文件,否则可能会导致设计器出错。

    1、解读Form1.cs文件

    查看Form1.cs文件代码的方法:右键文件名——【查看代码】

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
        }
    }
    
    • using……是自动导入的各种命名空间。
    • 窗体Form1是一个窗体类,它继承于系统窗体类:Form。
    • 在class关键字前面还有一个关键字:partial,翻译过来是“部分的”,partial的作用是将一个类的代码分别定义到多个文件中。它的好处是:程序员和窗体设计器在不同的文件中创建代码,不会相互影响。
    • 代码中的InitializeComponent()方法,就是在窗体设计器文件中创建的方法,这里只是进行调用,该方法的作用是对窗体组件进行初始化。

     

    2、解读Program.cs文件

    查看Program.cs文件代码的方法:右键文件名——【查看代码】、或者直接双击文件名

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }
    }
    

    在Main()方法中,都是VS自动生成的代码,我们只需关注最后一句代码:Application.Run(new Form1());

    此代码表示程序启动时,会首先打开Form1窗体。

    适用情况:当我们程序中创建了多个窗体时,可以修改这行代码来设置谁是启动窗体。

     

    2、认识窗体

            回想想一下我们现在用过很多软件,这些软件都有不同的窗体,每个窗体的外观和行为都不一样,就比如我们现在用的VS软件,再比如我们电脑上的一些软件如QQ等,他们各有不同。接下来我们学习窗体的常用属性和事件。

    2.1 窗体的常用属性

    设置窗体属性的方法

    在VS软件的右侧,有一个【属性】栏,可以对当前窗体进行属性设置。

    注意:如果VS软件界面没有找到【属性】面板栏, 可以通过菜单栏【视图】——【属性窗口】打开属性面板。或者鼠标右键单击窗体,点击【属性】可以调出属性面板。

        

    窗体的常用属性:

    属性

    说明

    备注

    Name

    窗体名字

    程序可以见,用户不可见,修改后方便代码编写时调用

    Text

    标题文字

    显示在窗体界面的标题,用户可见

    BackColor/BackgroundImage

    背景颜色/图片

    窗体背景,用户可见(背景图片可清楚)

    FormBorderStyle

    边框样式

    默认Sizeable,可以选择None对比看效果

    MaximizeBox

    最大化图标

    窗体上是否显示最大化按钮,默认是True

    MinimizeBox

    最小化图标

    窗体上是否显示最小化按钮,默认是True

    ShowInTaskbar

    任务栏显示图标

    是否在Windows任务栏中显示默认是True

    StartPostion

    出现位置

    有两个值非常重要 1-CenterScreen 屏幕中央2-CenterParent 父级中央

    TopMost

    置顶显示

    是否始终显示在所有窗体之上,默认是False

    WindowState

    窗体规格

    开启时候窗体显示方式(最大化、最小化、常规)默认是Normal

    恶搞窗体程序测试:

    设置窗体透明:设置窗体TransParencyKey属性的颜色和BackColor的颜色相等,注意控件的颜色不能和窗体颜色一致,否则控件也透明。运行程序后,就只能看见标题栏和控件了。

    设置为蓝屏:

    1)下载一张蓝屏背景图片,将其设置为窗体背景图片,并设置BackgroundImageLayout属性值为Stretch(让背景图片适应窗体大小)

    2)把窗体设置为无边的窗体,设置 FormBoderStyle属性值为 None(让窗体没有边框)

    3)设置窗体默认最大化打开,设置WindowState属性为Maximized

    思考:还可以对窗体进行哪些属性的设置,以完成预期效果

     

    2.2 窗体的常用事件

           事件是Windows应用程序中一个非常重要的概念,什么是事件?它其实是程序对用户操作的响应。比如,我们点击Windows开始菜单,菜单就弹出来,点电脑的关机按钮,电脑就关机。Windows应用程序就是事件驱动式编程的,要完成某一功能,就需要选择正确的事件,在事件中编写控制代码。

    在属性栏上有两个按钮,,分别代表属性和事件,当我们点击事件按钮时,可以看到对应的事件。

    窗体的常用事件

    事件

    Load

    MousseClick

    MouseDoubleClick

    MouseMove

    Closed

    说明

    窗体加载事件

    鼠标点击事件

    鼠标双击事件

    鼠标移动事件

    窗体关闭事件

    Load事件演示:在Load事件上双击或者在窗体上双击,就会进入Load事件,在其中插入代码

                this.Text = "这是王迪的第一个窗体";

                启动运行即可看到以下效果:

    完整代码演示:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                this.Text = "这是王迪的第一个窗体";
            }
        }
    }
    

    分析代码:我们会发现事件其实就是一个方法,方法名称由“窗体名字+事件名”组成,参数object sender 是事件源, EventArgs e 是事件参数。在方法体中编写了一行代码,this代表当前窗体,Text是窗体的标题文字,this.Text = "这是王迪的第一个窗体";d这行代码的作用是在窗体加载时设置标题文字。

     

    3、控件的使用

           我们通过开发一款学生信息管理系统,来加深对Winform开发的认识。

            新建一个Windows应用程序项目,给它起名StudentInfoMS,修改窗体的Name属性,起名为FrmMain(窗体命名以Frm为前缀,这里起名FrmMain代表主窗体),设置窗体的Text属性为“学生信息管理系统”

    主窗体不能一直空白,不然就没什么作用,我们可以在窗体上添加控件,这样才像一个真正的软件。

    3.1 菜单条 MenuStrip

    菜单是程序窗体中常见的组成部分,比如VS软件就有大量的菜单。

    创建菜单的方法:

    第一步:在工具箱中找到MenuStrip控件,将其拖放到主窗体FrmMain上。

    第二步:在窗体上点击MenuStrip,添加菜单项MenuItem,输入菜单文字(如果需要快捷键设置,可以在添加文字时加上“&字母”)。菜单项下面还可以继续添加子菜单项。

    菜单项MenuItem需要设置的主要属性是Name和Text,Name的定义以tsmi为前缀。如“退出系统”菜单的Name属性可以设置为tsmiExit,Text属性设置为“退出系统(&E)”.

    第三步:给菜单项添加事件处理,以完成菜单功能。添加事件的方法和添加窗体事件类似,先选择一个菜单项,这里我们选择“退出系统”菜单项,然后在属性面板栏找到事件Click,双击Click事件,即可进入代码编写模式。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace StudentInfoMS
    {
        public partial class FrmMain : Form
        {
            public FrmMain()
            {
                InitializeComponent();
            }
    
            private void menuStrip2_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
            {
    
            }
    
            private void 基本信息BToolStripMenuItem_Click(object sender, EventArgs e)
            {
    
            }
    
            private void tsmiExit_Click(object sender, EventArgs e)
            {
                Application.Exit();//退出程序
            }
        }
    }
    

    在方法tsmiExit_Click中添加方法体代码   Application.Exit(); 此行代码用来实现退出程序的功能。

    预览效果,可以点击菜单项【基本信息】——【退出系统】,以完成退出系统的操作。也可以通过快捷键来操作,依次点击ALT+B——ALT+E

     

    3.2 基本控件的使用

    在项目中新创建一个编辑学生信息的窗体,来认识更多的控件。

    第一步:在项目资源管理器中,右键单击xi项目名称,依次选择【添加】——【Windows窗体】

    在弹出的窗体中选择【Windows窗体】,然后点击【添加】

    设置窗体的Name属性和Text属性

    第二步:在窗体中添加GroupBox控件(添加方法同其他控件方法一样),并设置Text属性。

    注意:GroupBox 控件是由System.Windows.Forms.GroupBox类提供的,作用是为其他控件提供可识别的分组

    用法:可以把一些控件拉到里面,组成一个整体,整体控制,比如enable,visiable等等,有时也用它来替代一下边框的功能,美观界面。

    第三步:往窗体中继续添加控件,并根据需要设置Name属性和Text属性等。

    控件

    说明

    备注

    命名前缀

    Label 

    显示文字的标签

    在Text属性里修改为显示文字

    lbl

    TextBox

    给用户提供的输入信息框

    Label和TextBox的Text属性后缀可以一样

    Text属性是默认显示信息

    Multline是否多行,默认false,设置为true则允许多行

    txt

    RadioButton

    单选按钮

    使用时,要先拖GroupBox(Text属性为空),然后再拖RadioButton到框里。

    设置按钮默认被选中,可以设置Checked属性为True。

    rdo

    GroupBox

    分组框

    取消分组框的线条的方法:重写Paint事件

    grb

    DateTimePicker

    日期选择器

    用于设置日期

    dtp

    ComboBox

    组合框/下拉菜单,用于特特定数据的选择

    Text属性是默认显示信息

    Items是选项的集合

    cbo

    Button

    按钮

     

    btn

    控件使用技巧1:单选按钮的应用,当我们需要单项选择时,先拖一个GroupBox控件到窗体上,然后再在GroupBox控件里添加RadioButton按钮,并进行对应属性设置。

    注意:在使用GroupBox控件的时候,会有虚线框,如何取消GroupBox控件的虚线框?可以修改一下Paint事件

            private void groupBox2_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.Clear(this.BackColor);//双击Paint事件后,在大括号中添加改句代码即可。
            }

    控件使用技巧2:日期选择器控件的使用,直接拖动一个DateTimePicker控件到适合位置即可,可以通过Value属性设置默认显示日期时间。

    控件使用技巧3:所在班级后面显示的,组合框/下拉菜单控件ComboBox的使用。拖动ComboBox控件到窗体上,然后设置Items属性即可(点击Items属性后面的方块,在弹出的窗口中输入集合,每一个占一行)

     

    控件使用技巧:4:设置TextBox控件为多行显示,需要修改Multiline属性为True。

    注意:如果想设置单行TextBox控件的高度大一些,我们可以通过设置Font属性来调整,如将原来的9pt设置为16pt(或其他你需要的数值)。

     

    3.3 给控件添加事件处理

    需求:给取消按钮,添加一个事件,当用户点击取消按钮时,关闭当前窗体。

    方法:双击取消按钮,进入代码编写界面,在方法中添加一行代码this.Close();

    代码演示:

            private void button1_Click(object sender, EventArgs e)
            {
                this.Close();//此代码用来实现关闭当前窗体
            }

     

    4、窗体间跳转

    当一个程序中有2个以上窗体时,可能涉及到两个。体之间的跳转。在案例中,我们希望点击FrmMain窗体中的菜单项“学生信息”时,可以跳转到FrmEditStudent窗体。

    需求:实现两个窗体间的跳转。

    方法:给菜单项添加Click事件。双击菜单项“学生信息”,进行代码编辑界面,写代码

    代码演示:

            //点击“学生信息”菜单项
            private void MsStudent_Click(object sender, EventArgs e)
            {
                //创建窗体对象
                FrmEditStudent frmStudent = new FrmEditStudent();
                //显示窗体
                frmStudent.Show();
            }

    结果查看:点击学生信息,跳转到编辑学生信息窗体。

    思考:怎么把窗体标题文字居中?

    提醒:控件命名一定要符合一定的规范,这样代码才更有可读性,空间的命名一般以控件类型名为前缀,前面是具体的作用,如姓名文本框txtName。

     

    5、消息框的使用

           用户在使用软件时,时常会收到提示,比如“是否确定删除文件”、“是否关机”、“电量不足”等,这些提示都是以消息框的形式出现的,这样可以让程序及时提醒用户,并得到用户的反馈,然后根据用户的反馈做出响应。

      

    5.1 C#中MessageBox 弹出提示框(消息框)的用法

            消息对话框是用Messagebox对象的Show方法显示的。MessageBox对象是命名空间System.Windows.Forms的一部分,Show是一个静态方法,意思是说,不需要基于MessageBox类的对象创建实例,可以直接使用该方法(可参照:静态方法和实例化方法的区别)。而且该方法是可以重载的,即方法可以有不同的参数列表形式。

    不返回任何值: MessageBox.Show(Text , Caption , Buttons , Icon);  

    • 第一个参数:Text:必选参数,设置消息对话框中的提示文本语句,必须是String类型。
    • 第二个参数:Caption:可选参数,设置消息对话框的标题,必须是字符串型。
    • 第三个参数:Buttons:可选参数,设置消息对话框中显示哪些按钮,一般都使用系统提供的几种类型。
    • 第四个参数:Icon:可选参数,设置消息对话框中显示哪个图标,比如说警告、提示、问题等等。

    返回结果:DialogResult dr1=MessageBox.Show(参数列表);

    扩展内容:MessageBox.Show();方法,还可以有第五个、第六个参数,MessageBox.Show(Text,Caption,Buttons,Icon,Defaultbutton,Option);

    • 第五个参数:Defaultbutton:可选参数,设置消息对话框哪个按钮是默认激活的。
    • 第六个参数:Option:可选参数,为消息对话框设置一些特殊的选项,如文本对齐方式,指定阅读顺序,是否向系统日志写消息。

     

    MessageBox 弹出提示框(消息框)的用法:(修改“退出系统”菜单项的点击事件,添加询问对话框)

    示例一:消息框只使用了第一个参数,

    即MessageBox.Show("是否确定退出系统?");

    示例二:消息框使用第一个和第二个参数

    即MessageBox.Show("是否确定退出系统?", "系统提示");

    示例三:消息框使用第一个、第二个和第三个参数

    即MessageBox.Show("是否确定退出系统?", "系统提示", MessageBoxButtons.OKCancel);

    示例四:消息框使用前四个参数

    即MessageBox.Show("是否确定退出系统?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);

     

    扩展内容:

    1)Buttons参数可取值及功能意义

     常量  功能及意义
      Ok  消息框中只有"确定"按钮
     OkCancel  消息框中只有"确定"和"取消"按钮
     YesNo  消息框中只有"是"和"否"按钮
     YesNoCancel  消息框中有"是","否"和"取消"按钮
     RetryCancel  消息框中有"重试"和"取消"按钮
     AbortRetryIgnore  消息框中有"中止","重试"和"忽略"按钮

    2)Icon参数可取值及功能意义

    枚举常量  功能意义
     Error  消息框中有一个符号,由一个红色背景的圆圈及其中的白色X组成
     Asterisk  该符号是由一个圆圈及其中的小写字母i组成
     Exclamation  该符号由一个黄色背景的三角形及其中的一个叹号组成
     Hand  该符号由一个红色背景的圆圈及其中的白色x组成
     Question  该符号由一个圆圈及其中的一个问号组成
     None  消息框中不包含符号
     Information  该符号是由一个圆圈及其中的小写字母i组成
     Stop  该符号是由一个红色背景的圆圈及其中的白色X组成
      Warning   该符号是由一个黄色背景的三角形及其中的一个叹号组成

     

    5.2 消息框的返回值

            当系统显示消息框后,有时需要获得用户的反馈,然后再进行后续操作,比如是否删除文件等。MessageBox.Show();方法的返回值就是用户的反馈,返回值的类型是DialogResult。

    使用方法,将MessageBox.Show();的返回结果赋值给DialogResult类型变量

    如:DialogResult result = MessageBox.Show("是否确定退出系统?");

    当系统接收到用户的返回值时,需要进行判断,DialogResult具有以下常量值及代表功能意义。

     常量  功能及意义
      Abort  消息框的返回值是"中止"(Abort),即单击了"中止"按钮
     Cancel  消息框的返回值是"取消"(Cancel),即单击了"取消"按钮
     Ignore  消息框的返回值是"忽略"(Ignore),即单击了"忽略"按钮
     No  消息框的返回值是"否"(No),即单击了"否"按钮
     Ok  消息框的返回值是"确定"(Ok),即单击了"确定"按钮
     Retry  消息框的返回值是"重试"(Retry),即单击了"重试"按钮
     None  消息框没有任何返回值,即没有单击任何按钮
     Yes  消息框的返回值是"是"(Yes),即单击了"是"按钮

     

    5.3 消息框的使用

    需求:用户点击“退出系统”后,弹出消息框询问用户是否确定退出,然后根据用户选择结果,进行响应。

    实现方法:进入菜单项“退出系统”的Click事件代码,修改代码。

    代码演示:

            //点击菜单项“退出系统”
            private void tsmiExit_Click(object sender, EventArgs e)
            {
                //显示询问对话框,并将用户选择的结果赋值给变量result
                DialogResult result = MessageBox.Show("是否确定退出系统?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    
                //判断用户选择的结果,并作出选择
                if (result == DialogResult.Yes)//如果返回值和DialogResult.Yes相等
                {
                    MessageBox.Show("系统已关闭");//提示用户系统关闭
                    Application.Exit();//执行退出程序
                }
                
            }

    结果演示:

    点击菜单项【退出系统】,会弹出消息框

    点击按钮【是(Y)】后,弹出消息框,提示“系统已关闭”

    再次点击【确定】后,整个系统退出。

     

     

    课后练习:制作一个游戏主界面窗体,添加菜单项,并练习消息框的使用。

     

     

     

    =======================这里是结束分割线=========================

    展开全文
  • 需要注意的是, Win32窗体应用程序的主函数入口点是 WinMain 函数(控制台程序的入口点是 main 函数)。 对于现在来说,我们只需要在源文件的顶部包含 windows.h 头文件即可。 源文件 main.cpp 的头文件和空的
    主要是对前面几个部分知识内容的一些总结并进行详细的分析

    主函数入口点

    在 main.cpp 中需要做得第一件事是包含 Win32 程序所需的头文件和定义函数入口点。 需要注意的是, Win32窗体应用程序的主函数入口点是 WinMain 函数(控制台程序的入口点是 main 函数)。 对于现在来说,我们只需要在源文件的顶部包含 windows.h 头文件即可。 源文件 main.cpp 的头文件和空的 WinMain 函数见于以下程序:

    #include<Windows.h>
    int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPWSTR cmdLine, int cmdShow)
    {
    return 0;
    }

    使用 wWinMain 代替 WinMain。这两个主函数的不同在于 wWinMain 的第三个参数cmdLine 使用 Unicode 编码,而另一个使用 ANSI 编码将会转换 Unicode 为 ANSI。 因此将导致 Unicode 字符串中的字符丢失,而使用 wWinMain 则允许我们正确处理传入应用程序的 Unicode 参数。

    (w)WinMain 函数有四个参数,其定义如下:
    HINSTANCE hInstance: 应用程序当前实例的句柄(译者注:了解 Win32 的基本知识最好是看 Windows 程序
    设计第五版)。
    HINSTANCE prevInstance:应用程序的前一个实例的句柄。 根据 MSDN 的文档现在此参数将一直是 NULL。虽然此参数一直是 NULL,如果你想要确定该应用程序是否已经有实例在运行,文档推荐使用 CreateMutex函数来创建唯一名字的 mutex(互斥体)。 当已经有实例运行时,再次创建 mutex, CreateMutex 函数将会返回 ERROR_ALREADY_EXISTS。
    LPSTR cmdLine :(或使用 Unicode 编码的 LPWSTR):应用程序的命令行由程序外部输入。允许你传递命令给程序,例如通过 cmd 命令终端,或者是通过快捷方式提供命令参数,等等。
    int cmdShow:窗口被显示为哪个模式的 ID 号(译者注:例如最小化,正常,最大化等)。

    窗口初始化

    尽管上述程序能够编译运行,可是由于没有创建窗口,运行时什么也没显示。 So,下一个步骤就是创建 Win32窗口。 首先要注册一个窗口类并且创建窗口本身。 应用程序必须在系统中注册它的窗口
    程序循环就是一个无限的循环,直到用户跳出该循环为止。 由接受 WM_QUIT 事件(Win32 的退出消息)来发生结束指令, 假如在主菜单中设定了用户按下 Esc 键产生该事件(当游戏中时,按下 Esc 键并没有退出,而是暂停,除非是制作者设计了该退出方式),或者你设定它退出的任何其他方式。
    MSG 是一个用于持有来自于操作系统中 window 消息的 Win32 结构,它用于程序响应这些消息。如果发送一定数量的消息后程序一直没有响应,则操作系统将会报告该程序未响应。 通常我们假定它的意思就是程序被冻结或者发生了某些错误,这也意味着应用程序没有从操作系统中恢复过来。 如果程序被设计为响应式的,假设程序已经被冻结即窗口显示“未响应”消息或任务管理器显示该应用未响应,过一会儿它仍然是安全的。我就曾经多次运行十分复杂并且长时间查询在网络上的微软 Access。操作系统就报告程序未响应,尽管程序只是忙于做一些任务没有处理事件而已。
    对于 window 消息,我们需要做两件事。首先需要取得新的消息并且处理它们,其次需要调度(响应)这些消息。PeekMessage 函数取得相关窗口的消息(我们使用 CreateWindow 函数创建的窗口)。此函数的第一个参数是持有消息的结构的地址,其次是窗口句柄(可选),最小最大消息过滤标志,移除标志。PM_REMOVE 移除标志,将会将消息从它的队列中移除。因为我们处理该消息,一旦处理后它将不需要留在队列中。如果有消息被 PeekMessage 函数获得,我们调用 TranslateMessage 函数和 DispatchMessage 函数来响应该消息。Win32 函数 TranslateMessage 将虚拟键消息翻译为字符消息,调度函数 DispatchMessage 将消息传给窗口过程处理,窗口过程将对于它所接受到的消息执行实际的行动。如果没有收到消息,在程序中就只做更新 Update 和渲染 rendering 这两件事。例如根据所侦测到的用户输入,物理计算,动画,更新音频缓存等的更新操作和渲染场景几何体。
    拿大家熟悉的视频游戏举个例子,查看游戏循环就一目了然了。游戏程序对于每一帧的渲染做一系列的具体事情。游戏中的帧是游戏循环的单一的反复过程。大多数游戏力求达到每秒 30 或 60 帧,换句话说就是相对于真实世界中的每一秒钟,游戏做 30 到 60 次的循环。当游戏变得越来越复杂时,这一目标更难达到。 每秒的帧数通常用来衡量游戏渲染的速度,但是游戏不仅仅有渲染代码,还需要每数帧就处理游戏中的物理,碰撞, AI(人工智能) 数据流和游戏的特效。

    窗口过程(回调函数)

    在我们能够编译和运行我们的程序之前的最后一部分就是所提供的窗口过程,也就是窗口过程函数。窗口过程函数是回调函数,意味着在我们的程序中当获得消息后就调用该函数来处理。回调函数一般写成下面的形式:

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
    switch(message)
    {
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0; }
    

    窗口过程函数返回 LRESULT 类型并且有回调 CALLBACK 修饰。 此函数的命名遵循普通函数命名标准该回调函数接受参数窗口的句柄来调度该窗口的消息,无符号整型消息代号,两个可携带额外信息的参数(wParam 和 lParam) 。最后两个参数用于补充的数据,在回调函数中处理消息需要更多的数据时。
    退出消息由调用 Win32 函数 PostQuitMessage 来处理,这将导致在应用程序循环中的 MSG 对象取得 WM_QUIT消息,然后就按照我们的设定结束应用程序循环并且退出程序。 假如想退出而又不立即退出的话,只需要发送一个退出消息即可。 例如,在微软的 Word 软件中如果没有保存就尝试退出的话,将会弹出一个对话框询问你是否保存之后再退出。
    回调函数的最后一部分就是调用 DefWindowProc 函数,它有着与窗口过程函数同样的参数。 这个函数只被那些我们没有写自定义响应代码的消息所调用。 在此 Demo 中我们只响应了绘制消息和退出消息,但是还有其他大量的可以查到的消息,如按键,鼠标点击,鼠标移动,计时器等等。 DefWindowProc 函数是一个 Win32 函数,它调用默认行为处理所有的消息,来确保我们响应每一个消息,即使我们对那些消息不感兴趣。

    展开全文
  • 用C#创建一个Windows应用程序步骤如下: 一、设计用户界面 1.创建项目(与C++创建项目方式一样) 2.设计用户界面 (1)调整窗体大小并添加文本框(在工具箱中展开“公共控件”选项,双击TextBox创建文本框,如下...
  • 下面将介绍用Visual C#工程文件向导创建Windows应用程序的过程。 创建应用程序框架 在VS .NET IDE中选择“新建->工程文件->Visual C# 工程文件->Windows 应用程序”: 然后点击 OK,出现一个表单设计视图(这...
  • 创建windows应用程序的后台系统服务

    千次阅读 2012-07-05 13:38:05
    本文将介绍如何把windows下的应用程序变成后台系统服务进行启动,细节就不详说,只说简要的步骤,所用的工具有: 1、srvany.exe(可以理解为母体跳转工具) 2、SRVINSTW.EXE(图形界面创建服务工具) 3、instsrv....
  • 在此示例中,您将创建Windows presentation foundation应用程序。 创建 WPF 项目 在菜单栏上,依次选择 *** 文件 ***,新建,项目。 选择Visual Basic或visual C# WPF应用程序模板,然后将项目命名为Wpf...
  • 3. 选择Windows应用程序,空项目,完成 #include <windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { MessageBox(NULL, TEXT(...
  • 使用 Microsoft.NET Frameworks 创建基于 Windows应用程序Shawn Burke Microsoft Corporation 2000年9月 摘要: :本文介绍了 Win 表单这一新的窗体程序包,借助这一程序包,开发人员能够充分利用 Microsoft ...
  •  System.Windows.Forms;   namespace  tt {   public   partial   class   Form1  : Form  {   public  Form1()  {  InitializeComponent();  }     private   ...
  • 创建 Windows 窗体应用程序的步骤与创建控制台应用程序的步骤类似,在 Visual Studio 2015 软件中,依次选择“文件”→“新建”→“项目”命令,弹出如下图所示的对话框。 在该对话框中选择“Windows 窗体应用程序...
  • 1、在前一篇文章中:一个窗口的诞生中详细介绍了面向对象的方式创建Windows应用程序窗口的过程。 2、一个Windows应用程序应该有交互的功能,也就是说,我们得为其添加消息响应,添加对话框,添加控件等详细的功能,...
  • C# 创建Windows窗体应用程序(WinForm程序)

    万次阅读 多人点赞 2019-06-10 09:57:09
    1)WinForm?Windows窗体应用程序 WinForm 是 Windows Form 的简称,是基于 .NETFramework 平台的... C# WinForm 编程需要创建Windows窗体应用程序」项目。 .NET 提供了大量 Windows 风格的控件和事件,我们...
  • 创建 Windows 应用程序.2.在"属性"窗口中,将 IsMDIContainer 属性设置为true. 这将该窗体指定为子窗口的MDI 容器.3.设置菜单栏工具栏等控件.假设点击按钮button1的触发事件为打开子窗体child.cs.二:创建...
  • VS2015创建Windows窗体应用程序(C++)

    万次阅读 2019-07-30 10:11:50
    VS2015没有自带CLR窗体应用程序的模板,在创建窗体应用程序时极为不便。网上通常的做法是创建一个CLR空项目,然后一步一步添加文件,一点...使用联机模板 快速创建Windows窗体应用程序项目 1. 新建项目,点击“单...
  • 4.4 创建 Windows Forms 应用程序   WindowsForms 是开发 Windows 图形界面程序的标准库,可以很好地与 System.Drawing 命名空间中的功能集成,这两个库最重要的功能,就是在屏幕上绘制、显示图形。.NET 的体系...
  • Visual Studio2019创建C#项目没有windows窗体应用程序、控制台应用程序、Web应用程序
  • 使用VS2010创建windows窗体应用程序

    千次阅读 2017-08-22 05:17:18
    使用VS2010创建windows窗体应用程序。在右侧的已安装模板中,选择Visual C#,右边会显示出各种项目类型。这里第一项就是Windows窗体应用程序。 默认状态下,会自动生成一个窗体文件。这个窗体是主启动窗体...
  • 本文改编自MSDN在组件设计器中创建 Windows 服务应用程序1、创建并配置服务 在“文件”菜单上指向“新建”,然后单击“项目”。 “新建项目”对话框打开。 在Visual C# 项目模板的列表中选择“Windows 服务”项目,...
  • TypeScript 创建Windows应用商店程序

    千次阅读 2014-09-25 10:25:49
    为什么TypeScript选项没有创建应用商店程序选项,这下坑了,难道说要创建应用商店程序的梦想要泡汤了?别担心,总有办法的,要是直接有这个选项的话,那我再写这篇文章岂不是很蛋疼。好吧,既然TypeScript的根是...
  • 众所周知,PhoneGap是一个开源的移动开发框架,它使开发人员能够使用JavaScript,HTML5和CSS3来创建移动设备应用程序,而不是设备特定的语言,如C#或Objective-C。今天慧都就为大家介绍一下,如何使用PhoneGap来...
  •  Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合。它没有用户界面,并且也不会产生任何可视输出。任何用户消息都会被 写进Windows事件日志。计算机启动时,服务会自动开始运行。它们...
  • 我这边用的是VS2010的编译环境,所以下面的笔记都是以它为标准。 首先,打开文件,新建一个项目 确定,然后跳出这个东西 ...这个时候,注意不能勾选空项目,因为勾选了就意味着我们要自己写最基本的窗体,所以...
  • 使用 C++ Builder 创建应用程序

    千次阅读 2016-08-19 20:18:36
    3.1 创建应用程序 C++Builder的主要用途于设计创建Windows应用程序。有三种基本的Windows应用程序: · WindowsGUI应用程序。 · 控制面板应用程序。 · 服务应用程序。  3.1 创建应用程序  C++Builder的...
  • 1、创建windows应用程序的方法   Windows应用程序有一个个窗体组成。 应用在Windows系统上的程序就是windows应用程序。应用程序分为两种模式:C/S(客户端、服务器端)、B/S(浏览器端、服务器端) 这就是窗体,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,644
精华内容 6,657
关键字:

创建windows应用程序