精华内容
下载资源
问答
  • windows的程序设计方法
    千次阅读
    2019-03-07 14:39:27

    window程序设计是计算机专业学生的基本技能,也是计算机专业必须掌握的基本技术。其主要内容包括:SDK程序设计、MFC程序设计及ODBC数据库应用程序设计、windows核心编程。

    SDK程序设计包括: windows图形界面基础,主要是windows图形界面应用程序的结构以及windows消息响应机制。 GDI绘图,主要是windows设备上下文及绘图。 windows的消息处理,包括键盘消息处理、鼠标消息处理、菜单消息处理、定时计数器消息处理、控件消息处理。这些消息处理的方式对于理解MFC的消息映射至关重要。SDK下的对话框应用程序设计,包括模态和非模态对话框的启动、对话框中的控件。理解并学会了SDK下的对话框应用程序设计,再去学习MFC下的对话框应用程序设计就会觉得事半功倍、水到渠成了。

    MFC应用程序设计及ODBC数据库应用程序设计:了解到MFC应用程序的创建方法及文档视图类应用程序的框架。重点是MFC编程的基础,以及windows对象和MFC对象的关系。这是MFC应用程序设计中最需要理解的部分,只有充分理解了windows对象和MFC对象的关系才能轻松掌握MFC应用程序设计的方法。另外、还必须了解MFC应用程序设计的向导的使用方法。 MFC消息映射与消息处理。重点是关于MFC的消息映射机制、windows标准系统消息的处理、控件消息处理、命令消息处理(菜单)、自定义消息处理、反射消息处理。这也是MFC的精华,希望同学们在学习的过程中一定要加倍关注。线程消息的处理,这一部分放在后面的线程部分讲解。 MFC文档类应用程序设计。在这一部分重点讲解了文档的串行化。 MFC的对话框应用程序设计。重点是关于控件变量关联的问题,包括是给控件关联一个值变量还是关联一个控件类变量。这两种变量之间的区别和应用环境。然后讲解几个常用的控件的使用方法。ODBC数据库应用程序设计。主要是关于CDataBase类和CRecordset类的使用方法,并涉及到多年来在项目中封装的ODBC数据类。在此基础之上讲解了一个数据库应用程序的例子。

    windows核心编程:这是Windows程序设计中的难点部分,需要较强的编程能力,可以实现下列基本功能:

    1》为32位和64位Windows系统构建和实现应用程序;

    2》新建和处理进程与作业;

    3》调度.管理、同步和销毁线程;

    4》通过I/O完成端口执行同步和异步设备I/O操作;

    5》使用虚拟内存、内存映射文件和堆之类的各种技术来分配内存;

    6》处理默认调拨的线程栈物理存储;

    7》为延迟加载、API拦截和进程注入构建DLL;

    8》使用结构化异常处理、Windows错误恢复和应用程序重启等机制。

    更多相关内容
  • windows程序设计第五版 chm 版本

    热门讨论 2014-06-16 00:56:47
    Windows程序设计(第5版 珍藏版)》是一本经典的Windows编程圣经,曾经伴随着近50万Windows程序员步入编程殿堂,成长为IT时代的技术精英。 作为Windows开发人员的必备参考,涵盖基础知识和中高级主题,全面地介绍了...
  • Windows 程序设计 源码光盘

    热门讨论 2009-08-10 22:42:31
    Windows 程序设计 源码光盘 介绍了在Microsoft Windows 98、Microsoft Windows NT 4.0和Windows NT 5.0下程式写作的方法。这些程式用C语言编写并使用原始的Windows Application Programming Interface(API)。如在...
  •  《mfc windows程序设计(第2版)》是对其极为经典的第1版的全面更新,本书不仅扩展了已被认为是权威的关于microsoft用于windows api的功能强大的c++类库的阐述,还新增了有关com、ole和activex的内容。本书的作者...
  • Windows窗体应用程序设计小一

    万次阅读 多人点赞 2019-01-07 23:50:06
    一,windows 窗体应用程序是由控件组成的,控件是可以重复使用的类或组件 MessageBoxButtons枚举值及其说明 成员名称 说明 MessageBoxButtons.AbortRetryIgore 消息框包含“终止”,“重试”,...

    首先创建一个简单的windous窗体应用程序,名为Form1
    一,windows 窗体应用程序是由控件组成的,控件是可以重复使用的类或组件

    MessageBoxButtons枚举值及其说明
    成员名称 说明
    MessageBoxButtons.AbortRetryIgore 消息框包含“终止”,“重试”,“忽略”按钮
    MessageBoxButtons.OK 消息框包含“确定”按钮
    MessageBoxButtons.OKCancel 消息框包含“确定”和“取消”按钮
    MessageBoxButtons.RetryCancel 消息框包含“重试”和“取消”按钮
    MessageBoxButtons.YesNo 消息框包含“是”或“否”按钮
    MessageBoxButtons.YesNoCancel 消息框包含“是”,“否”,和“取消”按钮

    DialogResult*枚举值及其说明
    成员名称 说明
    Abort : (对话框的返回值是Abort(通常从标题为“中止”按钮))
    Cancel : ( 对话框的返回值是Cancel(通常从标题为“取消”的按钮发送))
    Ignore:(对话框的返回值是Ignore(通常从标题为“忽略”的按钮发送))
    No:(对话框的返回值是No(通常从标题为“否”的按钮发送))
    None:(从对话框返回了Nothing,这表明有模式对话框继续执行)
    OK:(对话框的返回值是OK(通常从标题为“确定”的按钮发送))
    Retry:(对话框的返回值的Retry(通常从标题为“重试”的按钮发送))
    Yes:(对话框的返回值是Yes(通常从标题为“是”的按钮发送))

    有一个小例子:

    private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show("你单击了button1");
            }
    
    

    运行结果:

    在这里插入图片描述

    例如,以下三个语句的结果如下:

    
                MessageBox.Show("三个按钮","信息提示",MessageBoxButtons.AbortRetryIgnore);
                MessageBox.Show("三个按钮","信息提示",MessageBoxButtons.YesNoCancel);
                MessageBox.Show("两个按钮","信息提示",MessageBoxButtons.OKCancel);
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    二,Windows窗体应用程序的结构
    从一个简单的窗体应用程序中可以找到一个Program.cs文件,它是主程序文件,双击该文件名可以看到其代码

    namespace porj1
    {
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }
    }
    
    

    其中有一个Program静态类,包含一个Main静态方法,这与控制台应用程序相似,所不用的是,通过Application.Run(new Form1())语句执行Form1窗体。这里Form1是启动窗体,如果要执行其他窗体如Form2,只需要将其中的“Form1”改为“Form2”即可。Application类是应用程序类
    另外,每个窗体如Form1对应一个Form1.cs节点,展开它时还会看到Form1.Designer,cs和Form1.resx.前者为窗体设计文件,其代码是由Visual Studio自动生成的,一般不需要修改,后者为其资源文件
    双击Form1.Designer.cs看到其代码,其中用于初始化Form1的代码如下

    private void InitializeComponent()
            {
                this.button1 = new System.Windows.Forms.Button();
                this.SuspendLayout();
                // 
                // button1
                // 
                this.button1.Location = new System.Drawing.Point(211, 104);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(187, 98);
                this.button1.TabIndex = 0;
                this.button1.Text = "button1";
                this.button1.UseVisualStyleBackColor = true;
                this.button1.Click += new System.EventHandler(this.button1_Click);
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(800, 450);
                this.Controls.Add(this.button1);
                this.Name = "Form1";
                this.Text = "Form1";
                this.ResumeLayout(false);
    
            }
    

    上述代码是由程序员的设计操作转换而来的,是由系统自动生成的,主要包含button1和Form1两部分。其中,this.button1.Click += new System.EvenHandler(this.button1_Click)语句将button1事件Click与对应的事件处理方法button_Click相关联,称为事件订阅,其一般格式为:

    object.Event +=new EventHandle(Method);
    

    其中,EventHandler是.NET Framework预置好的一个特殊的委托。它的形式是固定的。上述语句的意识是,如果对象object发生了Event事件,就交由方法Method来处理。一个对象可以委托多个不同的处理,“+=”用来增加新的委托关系。Method是真正进行事件处理的地方。正因为如此,在执行Form1中用户单击button1时才会执行button1_Click

    三,常用的控件设计
    控件:是包含在窗体上的对象,是构成用户界面的基本元素,也是c#可视化编程的重要工具。使用控件可以减少程序设计中大量重复性的工作。有效的提高设计效率。要快捷的编写出好的应用程序,必须掌握各种控件的功能,用于以及其常用的属性。
    工具箱中包含建立应用程序的各种控件,根据控件的不同用途分为若干个选项卡,可根据用途单击相应的选项卡标签,将其展开,选择需要的控件。
    控件的外观和行为,如控件的大小、颜色、位置以及控件使用方式等特征,是由它的属性决定的。不同的控件拥有不用的属性,并且系统为它提供的默认值也不同。大多数默认值设置比较合理,能满足一般情况下的需求。此外,每个控件还有它专门的属性,大多数控件还包含一些更高级的属性,在进入高级应用程序开发阶段会很有用。

    • 控件共有的属性
      (1)Name属性,可通过此名称来引用这个控件,c#会给每个新产生的控价指定一个默认名,一般由控件类型和序号组成
      (2)Text属性,获取或设置文本的属性,
      (3)尺寸大小(Size)和位置(Location),各种控件一般都有一个设置其尺寸大小和位置的属性,即Size和Location属性。Size属性可用于设置控件的宽度和高度。Location属性可用于设置一个控件相对于它所在窗体左上角的(x,y)坐标值。这两个属性既可以通过输入新的设置值来改变,也可以随着控件的缩放或拖动而改变。
      (4)字体属性(Forn)如果一个控件要显示文字,可通过Forn属性来改变她的显示字体

    设置控件字体的方法是,在“属性”窗口中单击Font属性,它的右边就会显示一个按钮,再单击这个按钮,就弹出一个“字体”对话框,通过“字体”对话框就可以选择所用的字体、字样和字号等。Font也是一个C#类,它的基本属性如下:

    • Name:获取此Font的字体名称
    • Size:获取此Font的大小,单位采用Unit属性指定的单位
    • Unit:获取此Font的度量单位
    • Bold:获取一个值,该值指示此Font是否为粗体
    • Italic:获取一个值,该值指示此Font是否为斜体
    • Strikeout:获取一个值,该值指示此Font是否指定贯穿字体的横线
    • Underline:获取一个值,该值指示此Font是否有下划线
      事实上,采用“字体”对话框就是设置上述属性

    (5)颜色属性(BlackColor和ForeColor)
    控件的背景颜色是由BlackColor属性设置的;控件要显示的文字或图形的颜色,则是由ForeColor属性设置的
    (6)Cursor属性
    Cursor属性主要功能是获取或设置当鼠标指针位于控件上时显示的光标,将Custor分配给控件的Curstor属性,以便更改在鼠标指针位于该控件上的显示的光标
    (7)可见(Visible)和有效(Enabled)属性
    一个控件的可见属性Visible确定了该控件在用户界面上是否可见。一个控件的有效属性Enabled决定了该控件能否被使用。当一个控件的Enabled属性设置为False,它变成灰色显示,单击这个控件时不会起作用。如果一个控件的Visual属性设置为False,则在用户界面上就看不到这个控件,它的Enable属性也就无关紧要。所以,设置的一般原则是控件总是可见的,但不必总是有效的。

    窗体控件:
    窗体(Form)控件是一个容器,其中可以放置其他控件,除了上述共有的属性外,窗体控件还有一些特定的属性
    (1)StartPosition属性:获取或设置执行时窗体的起始位置。取值为Manual时表示窗体的位置由Location属性确定;取值为CenterScreen时表示窗体在当前显示窗口中居中,其尺寸在窗体大小中指定;取值为CenterPatent时表示窗体在其父窗体中居中,等等。
    (2)MaximizeBox属性:获取或设置一个值,该值指示是否在窗体的标题栏中显示“最大化”按钮
    (3)MinimizeBox属性:获取或设置一个值,该值指示是否在该窗体的标题栏中显示“最小化”按钮
    (4)ControlBox属性:获取或设置一个值,该值指示在该窗体的标题栏中是否显示控件框

    窗体控件的一些常用方法:

    1. Activate方法:激活窗体并给予它焦点
    2. Close方法:关闭窗体
    3. Focus方法:为控件设置输入焦点
    4. Hide方法:对用户隐藏控件
    5. Show方法:将窗体显示为五模式对话框。所谓无模式对话框就是在显示该窗体后用户可以不必响应,然后随意切换到其他窗体或程序进行操作。通常情况下,当建立新的窗体时,都默认设置为无模式窗体
    6. ShowDialog方法:将窗体显示为模式对话框。所谓模式对话框及时在屏幕上显示该窗体后用户必须响应,只有在它关闭之后才能操作其他窗体或程序

    事件编程是Windows应用程序设计的基础,在窗体控件上预设了很多事件,当用户设置了某些事件处理方法时,系统会自动捕获事件并执行相应的事件处理方法。当一个窗体启动时,常见窗体事件的处理次序如下:
    (1)本窗体上的Load事件
    (2)本窗体上的Activated事件
    (3)本窗体上的其他Form级事件
    (4)本窗体上包含控件的相关事件

    一个窗体被卸载时,常见的窗体事件的处理次序如下:
    (1)本窗体上的Closing事件
    (2)本窗体上的FormClosing事件
    (3)本窗体上的Closed事件
    (4)本窗体上的FormClosed事件

    展开全文
  • 《MFC Windows程序设计》(第2版)(修订版)的作者,Jeff Prosise,用其无与伦比的技巧向读者讲述了MFC程序设计中的基本概念和主要技术再次阐释了在32位Windows平台上进行了快速的面向对象开发的完美方法。《MFC ...
  • Microsoft C# Windows程序设计(上下册)

    热门讨论 2011-08-05 10:28:13
    1.9 使用c#的关键特性进行程序设计 1.10 静态方法 1.11 异常处理 1.12 抛出异常 1.13 获取和设置属性 1.14 构造函数 1.15 实例和继承 1.16 更宏伟的蓝图 1.17 命名约定 1.18 几句题外话 .第二...
  • C# windows窗体应用程序设计 本系列最后一篇,以后不会再以博文的方式呈现。 文章目录C# windows窗体应用程序设计前言一、俄罗斯方块的实现二、步骤1.部分函数代码2.说明(分析代码时会用到)3.好的,展示完毕4....

    C# windows窗体应用程序设计

    本系列最后一篇,以后不会再以博文的方式呈现。


    前言

    因为疫情的原因,再加上进入到大三,考证、学业繁忙。加上还要考研的目标,断更了很久。各位看我文章入坑的小伙伴,先说一声抱歉。我想做很多系列,列了很多规划,但这一切都被改变得太快。(本来打算大二上期复习考证等一些列计划全推到本学期,再加上本学期各种专业认知实习)所以后面有些系列更新很慢甚至几乎不会再更新了。在我规划好了时间后,我决定每周末来给大家更新,周末我是专门留着搞其他事情的,其他时间就专心学业和考试。我争取做到每周一更。觉得需要取关的可以取关,我理解。更新强度达不到之前的样子,不能实现之前的规划蓝图。总之,感谢大家的支持。


    以下是本篇文章正文内容

    一、俄罗斯方块的实现

    俄罗斯方块是一款比较经典的游戏,即使没玩过是有听说过的,现在一些节目魔改了俄罗斯方块的玩法,给大家带来了更多的乐趣。现在,动动你的小脑袋,一起来写一个简易的俄罗斯方块游戏吧。
    1

    二、步骤

    1.部分函数代码

    主函数代码如下:

    namespace Tetris
    {
        partial class frmMain
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Windows Form Designer generated code
    
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                this.components = new System.ComponentModel.Container();
                System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMain));
                this.label4 = new System.Windows.Forms.Label();
                this.btnStop = new System.Windows.Forms.Button();
                this.btnStart = new System.Windows.Forms.Button();
                this.lblScore = new System.Windows.Forms.Label();
                this.label2 = new System.Windows.Forms.Label();
                this.label1 = new System.Windows.Forms.Label();
                this.pbNextBlock = new System.Windows.Forms.PictureBox();
                this.pbMain = new System.Windows.Forms.PictureBox();
                this.timer1 = new System.Windows.Forms.Timer(this.components);
                this.comboBox1 = new System.Windows.Forms.ComboBox();
                this.musicPlayer = new AxWMPLib.AxWindowsMediaPlayer();
                ((System.ComponentModel.ISupportInitialize)(this.pbNextBlock)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.pbMain)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.musicPlayer)).BeginInit();
                this.SuspendLayout();
                // 
                // label4
                // 
                this.label4.AutoSize = true;
                this.label4.Location = new System.Drawing.Point(228, 263);
                this.label4.Name = "label4";
                this.label4.Size = new System.Drawing.Size(107, 12);
                this.label4.TabIndex = 17;
                this.label4.Text = "请选择速度(1-9):";
                // 
                // btnStop
                // 
                this.btnStop.Location = new System.Drawing.Point(230, 391);
                this.btnStop.Name = "btnStop";
                this.btnStop.Size = new System.Drawing.Size(119, 23);
                this.btnStop.TabIndex = 16;
                this.btnStop.Text = "暂停游戏";
                this.btnStop.UseVisualStyleBackColor = true;
                this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
                // 
                // btnStart
                // 
                this.btnStart.Location = new System.Drawing.Point(228, 340);
                this.btnStart.Name = "btnStart";
                this.btnStart.Size = new System.Drawing.Size(121, 23);
                this.btnStart.TabIndex = 15;
                this.btnStart.Text = "开始游戏";
                this.btnStart.UseVisualStyleBackColor = true;
                this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
                // 
                // lblScore
                // 
                this.lblScore.AutoSize = true;
                this.lblScore.Location = new System.Drawing.Point(299, 224);
                this.lblScore.Name = "lblScore";
                this.lblScore.Size = new System.Drawing.Size(11, 12);
                this.lblScore.TabIndex = 13;
                this.lblScore.Text = "0";
                // 
                // label2
                // 
                this.label2.AutoSize = true;
                this.label2.Location = new System.Drawing.Point(228, 224);
                this.label2.Name = "label2";
                this.label2.Size = new System.Drawing.Size(65, 12);
                this.label2.TabIndex = 12;
                this.label2.Text = "你的得分:";
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.ForeColor = System.Drawing.Color.Black;
                this.label1.Location = new System.Drawing.Point(228, 39);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(89, 12);
                this.label1.TabIndex = 11;
                this.label1.Text = "即将出场的是:";
                // 
                // pbNextBlock
                // 
                this.pbNextBlock.BackColor = System.Drawing.SystemColors.ActiveBorder;
                this.pbNextBlock.Location = new System.Drawing.Point(257, 65);
                this.pbNextBlock.Name = "pbNextBlock";
                this.pbNextBlock.Size = new System.Drawing.Size(120, 120);
                this.pbNextBlock.TabIndex = 10;
                this.pbNextBlock.TabStop = false;
                this.pbNextBlock.Paint += new System.Windows.Forms.PaintEventHandler(this.pbNextBlock_Paint);
                // 
                // pbMain
                // 
                this.pbMain.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
                this.pbMain.Location = new System.Drawing.Point(12, 12);
                this.pbMain.Name = "pbMain";
                this.pbMain.Size = new System.Drawing.Size(210, 420);
                this.pbMain.TabIndex = 9;
                this.pbMain.TabStop = false;
                this.pbMain.Paint += new System.Windows.Forms.PaintEventHandler(this.pbMain_Paint);
                // 
                // timer1
                // 
                this.timer1.Interval = 200;
                this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
                // 
                // comboBox1
                // 
                this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
                this.comboBox1.FormattingEnabled = true;
                this.comboBox1.Items.AddRange(new object[] {
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9"});
                this.comboBox1.Location = new System.Drawing.Point(230, 293);
                this.comboBox1.Name = "comboBox1";
                this.comboBox1.Size = new System.Drawing.Size(121, 20);
                this.comboBox1.TabIndex = 14;
                this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
                // 
                // musicPlayer
                // 
                this.musicPlayer.Enabled = true;
                this.musicPlayer.Location = new System.Drawing.Point(341, 263);
                this.musicPlayer.Name = "musicPlayer";
                this.musicPlayer.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("musicPlayer.OcxState")));
                this.musicPlayer.Size = new System.Drawing.Size(10, 12);
                this.musicPlayer.TabIndex = 18;
                // 
                // frmMain
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(386, 445);
                this.Controls.Add(this.musicPlayer);
                this.Controls.Add(this.label4);
                this.Controls.Add(this.btnStop);
                this.Controls.Add(this.btnStart);
                this.Controls.Add(this.comboBox1);
                this.Controls.Add(this.lblScore);
                this.Controls.Add(this.label2);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.pbNextBlock);
                this.Controls.Add(this.pbMain);
                this.KeyPreview = true;
                this.Name = "frmMain";
                this.Text = "俄罗斯方块";
                this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.frmMain_KeyDown);
                ((System.ComponentModel.ISupportInitialize)(this.pbNextBlock)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.pbMain)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.musicPlayer)).EndInit();
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
    
            private System.Windows.Forms.Label label4;
            private System.Windows.Forms.Button btnStop;
            private System.Windows.Forms.Button btnStart;
            private System.Windows.Forms.Label lblScore;
            private System.Windows.Forms.Label label2;
            private System.Windows.Forms.Label label1;
            private System.Windows.Forms.PictureBox pbNextBlock;
            private System.Windows.Forms.PictureBox pbMain;
            private System.Windows.Forms.Timer timer1;
            private System.Windows.Forms.ComboBox comboBox1;
            private AxWMPLib.AxWindowsMediaPlayer musicPlayer;
        }
    }
    

    2.说明(分析代码时会用到)

    判断格子的状态
    绘图只能在绘图时间里面才有效果,paint(绘图事件)
    map[hang,lie]==1 //图形
    map[hang,lie]==2 //边界
    如果是边界颜色变化
    else //其他
    绘制三个边界
    for(int hang = 0 ;hang<map.getlength(0);hang++)
    //左边边界
    map[hang,0]=2;
    //右边边界
    map[hang,mapgetlength(1)-1]=2

    3.好的,展示完毕

    是的,哎。代码虽然写了,但是由于是上学期的事情,很多东西都忘了。而且vs2019我已经卸载掉了。只能把这个代码整个搞出来给大家学习使用。所以也没办法展示截图,抱歉。
    2

    4.总结

    本次实例需要写五个窗体,整个的大致方法和流程可以参考前面我更新的有关C#的实例应用。这也是最后一次更新 这个系列。我会把源代码传到平台上,关注一下就可以免费下载。代码里面的各种属性以及运行后的效果可以根据自己的需求修改。具体的方法和内容可以参考以前我写的内容以后大部分大项目我都会直接在文章底下发链接,供大家下载,当然需要找什么文件都可以在底下评论。之前的内容我会慢慢整理出来。

    传送门1.简易计算器的实现
    传送门2.学生系统管理系统
    传送门3.小游戏设计
    传送门4.数学测验器
    传送门4.C#窗体应用基础(第1期)
    其他的可以在主页查看哦。
    觉得对你有帮助可以点个关注,点赞,收藏。有什么问题请在下面留言或者私聊。谢谢支持
    点这里下载源代码.C#实现俄罗斯方块 (如果官方偷偷把资源积分调整了就私聊我,我发给你,本代码免费使用)

    隐藏福利:最近在复习汇编语言,一些电子书分享给大家,下期也可能会更新汇编语言的相关内容。

    1.汇编语言(第三版)清华大学出版社 链接:
    提取码:g2pb
    点这里下载.

    2.微机原理与接口技术 人民邮电出版社出版
    提取码:yfaj
    点这里下载.

    3.汇编语言编译器emu8086(汉化版)
    点这里下载.
    提取码:7jpa

    展开全文
  • c# Windows窗体应用程序设计综合实例(一)匹配游戏设计 上次的计时器运行效果图如下: = ------------------------------------------------------------------------------ 今天来分享一个综合实例,设计一个匹配...

    c# Windows窗体应用程序设计综合实例(一)匹配游戏设计

    上次的计时器运行效果图如下:
    效果图
    = ------------------------------------------------------------------------------

    今天来分享一个综合实例,设计一个匹配小游戏。
    本次实例步骤较多,切勿搞混。

    步骤一 新建项目

    1.目的:创建项目并设计布局表。该表有助于将图标对齐到有序的 4x4 网格。需设置若干属性,以改善游戏板的外观。
    2.项目名称窗体text属性改为“匹配游戏”(其他名字也行),在size属性中将窗体大小设置为550*550。
    3. 添加一个TableLayoutPanel 控件,将BackColor属性设置为CornflowerBlue。(其他颜色也行,有些属性的更改可以直接粘贴文本进去设置。);将Dock属性设置为Fill(即覆盖整个窗体),将CellBorderStyle属性设置为Inset。
    4. 选择 TableLayoutPanel 右上角的三角形按钮,以显示任务菜单。
    在任务菜单上,选择“添加行”两次以再添加两行,然后选择“添加列”两次以再添加两列 。
    三角形按钮
    图一 三角形按钮
    菜单
    图二 菜单栏

    打开菜单,选择“编辑行和列”,打开“列和行样式”窗口 。将列和行的值都设置为25%(注意设置时,都要保证右侧的设置内容为百分比,现实前面的下拉框可以切换行和列。)
    属性
    图三 属性设置

    设置好了以后,点击确定,效果应该为是一个 4x4 网格,包含十六个大小相等的方块单元格。

    5.再向左上角单元格添加一个Label 控件,将BackColor属性设置为CornflowerBlue ,将AutoSize属性设置为False。,将Dock属性设置为Fill ;TextAlign属性设置为MiddleCenter” 。图标显示在单元格中间;选中Font属性, 此时应显示一个省略号 (… ) 按钮。选择省略号按钮,并将“Font”值设置为“Webdings”,将“Font Style”设置为“Bold”,并将“Size”设置为“48” ;text属性设置为“c”

    6.选择 Label 控件并将其复制到 TableLayoutPanel 中的下一单元格,保证每个单元格都被复制粘贴完成。注意每个单元格要先选中再粘贴(用快捷键ctrl+c、ctrl+v即可)

    效果图:
    设置效果

    步骤二 添加代码

    1.添加图标列表

    在本步骤中,要为游戏创建一组匹配的符号。 每个符号将添加到窗体上 TableLayoutPanel 中的两个随机单元格。
    查看代码的方法:在“解决方案资源管理器” 中,选择“Form1.cs” ,然后在菜单栏上选择“查看” ,选择 “代码” 。
    本次需要添加的代码如下(给Form窗口添加代码):

    public partial class Form1 : Form
    {
           Random random = new Random();
        List<string> icons = new List<string>() 
        { 
            "!", "!", "N", "N", ",", ",", "k", "k",
            "b", "b", "v", "v", "w", "w", "z", "z"
    };
    }
    
    

    2.分配随机图标

    以下代码添加给label控件:

    private void AssignIconsToSquares()
    {   
        foreach (Control control in tableLayoutPanel1.Controls)
        {
            Label iconLabel = control as Label;
            if (iconLabel != null)
            {
                int randomNumber = random.Next(icons.Count);
                iconLabel.Text = icons[randomNumber];
                iconLabel.ForeColor = iconLabel.BackColor;
                icons.RemoveAt(randomNumber);
            }
        }
    } 
    
    
    

    若要用图标填充游戏板,你需要在程序启动时调用 AssignIconsToSquares() 方法。在 Form1 构造函数中 直接添加一条语句。

    public Form1()
    {
        InitializeComponent();
    
        AssignIconsToSquares();
    }
    
    

    效果:保存并运行程序。它应该显示一个窗体,其中每个标签都分配了随机图标。

    3.添加事件处理程序

    匹配游戏的运行原理:当玩家选择一个带有隐藏图标的方块时,程序会通过将图标颜色更改为黑色来向玩家显示该图标。然后玩家选择另一个隐藏的图标。如果图标互相匹配,则它们保持可见。如果不匹配,则两个图标都会再次隐藏。

    1.在Windows 窗体设计器”中打开窗体。在“解决方案资源管理器” 中,选择“Form1.cs” 在菜单栏上,依次选择“视图” > “设计器” 。选择第一个标签控件以选中它。然后,按住 Ctrl 键选择其他每个标签,将它们选中。确保选中每个标签。

    2.选择“属性” 窗口工具栏上的“事件” 按钮,在“属性” 窗口中查看“事件” 页面。向下滚动到“Click” 事件,在框中输入“label_Click” ,最后回车一下。
    添加的代码如下:

    private void label_Click(object sender, EventArgs e)
    {
        Label clickedLabel = sender as Label;
    
        if (clickedLabel != null)
        {
            
            if (clickedLabel.ForeColor == Color.Black)
                return;
    
            clickedLabel.ForeColor = Color.Black;
        }
     }
    
    

    效果:最后运行程序看到一个背景为蓝色的空窗体。在窗体中选择任意单元格,其中一个图标应变为可见。继续在窗体中选择不同位置。当选择图标时,可以显示。

    4.添加标签引用

    使用下面的代码向窗体(Form1)中添加标签引用:

    private void label_Click(object sender, EventArgs e)
    {
        Label clickedLabel = sender as Label;
    
        if (clickedLabel != null)
        {
            // If the clicked label is black, the player clicked
            // an icon that's already been revealed --
            // ignore the click
            if (clickedLabel.ForeColor == Color.Black)
                return;
    
            // If firstClicked is null, this is the first icon 
            // in the pair that the player clicked,
            // so set firstClicked to the label that the player 
            // clicked, change its color to black, and return
            if (firstClicked == null)
            {
                firstClicked = clickedLabel;
                firstClicked.ForeColor = Color.Black;
    
                return;
            }
        }
    }
    
    

    效果 :保存并运行程序,选择其中一个标签控件,它的图标将显示。
    效果图

    5.添加计时器

    关于计时器,在上次写的《c# Windows窗体应用程序(四)》有一个关于Timer控件的用法。

    在插入Timer控件以后,将计时器的Interval 属性设置为 750。双击该计时器添加如下代码:

    private void timer1_Tick(object sender, EventArgs e)
    {
        timer1.Stop();
    
          firstClicked.ForeColor = firstClicked.BackColor;
        secondClicked.ForeColor = secondClicked.BackColor;
        firstClicked = null;
        secondClicked = null;
    }
    

    若要查看正在使用的新计时器,请转至代码编辑器,将以下代码添加到 label_Click() 事件处理程序方法的顶部和底部。(将两个 if 语句添加到顶部,将三个语句添加到底部;该方法的其余部分保持相同。)

    private void label_Click(object sender, EventArgs e)
    {
        if (timer1.Enabled == true)
            return;
    
        Label clickedLabel = sender as Label;
        if  (secondClicked !=  null)
            return;
    
        if (clickedLabel != null)
        {
            if (clickedLabel.ForeColor == Color.Black)
                return;
            if (firstClicked == null)
            {
                firstClicked = clickedLabel;
                firstClicked.ForeColor = Color.Black;
                return;
            }
    
      
            secondClicked = clickedLabel;
            secondClicked.ForeColor = Color.Black;
    
           
            timer1.Start();
        }
    }
    
    
    

    效果:保存并运行程序。选择一个图标,它将显示出来。选择另一个图标。 它会短暂显示,然后两个图标都消失。

    6.保持对可见

    将下面的 if 语句添加到 label_Click() 事件处理程序方法中,紧靠启动计时器的语句上方代码的结尾处。

    if (firstClicked.Text == secondClicked.Text)
            {
                firstClicked = null;
                secondClicked = null;
                return;
            }
            
            timer1.Start();   
    
    

    效果:保存并运行程序,然后开始选择窗体上的图标。如果选择的是不匹配的对,则将触发计时器的事件,两个图标都会消失。

    7.添加验证玩家是否获胜的方法

    1.在代码底部,CheckForWinner() 事件处理程序下方添加一个 timer1_Tick() 方法,如以下代码所示。

    private void CheckForWinner()
    {
           foreach (Control control in tableLayoutPanel1.Controls)
        {
            Label iconLabel = control as Label;
    
            if (iconLabel != null) 
            {
                if (iconLabel.ForeColor == iconLabel.BackColor)
                    return;
            }
        }    
           MessageBox.Show("You matched all the icons!", "Congratulations");
        Close();
    }
    
    

    2.让标签的 Click 事件处理程序调用新的 CheckForWinner() 方法。 请确保程序在显示玩家选择的第二个图标后立即检查是否有赢家。 查找设置第二个选中图标颜色的行,将以下代码复制到CheckForWinner() 方法中。

    secondClicked = clickedLabel;
    secondClicked.ForeColor = Color.Black;
    CheckForWinner();
    if (firstClicked.Text == secondClicked.Text)
    {
        firstClicked = null;
        secondClicked = null;
        return;
    }
    
    

    效果:保存并运行程序。 玩游戏并匹配所有图标。

    3.运行结果

    效果图如下:
    结果
    有什么好的建议或者问题可以在下方留言。

    展开全文
  • c# Windows窗体应用程序设计(四)

    千次阅读 多人点赞 2020-04-21 10:52:17
    c# Windows窗体应用程序设计(四) 上次介绍的简单应用其中第二个窗体运行结果如下: 我相信肯定有比我做得更好的小伙伴,关于上次第二个窗体设计有疑问的可以在下方留言,欢迎讨论。 今天来介绍两个简单应用,树...
  • Windows程序设计》复习题

    万次阅读 多人点赞 2016-05-24 13:37:35
    Windows程序设计》复习题,包含windows程序设计和MFC程序设计的众多知识点。
  • Windows程序设计.chm

    2007-02-02 16:00:57
    本书介绍了在Microsoft Windows 98、Microsoft Windows NT 4.0和Windows NT 5.0下程序写作的方法。这些程序用C语言编写并使用原始的Windows Application Programming Interface(API)。
  • Windows编程(C++):登陆界面设计

    千次阅读 2019-03-31 18:07:45
    windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//Windows回调函数提前声明 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)//主函数 ...
  • Windows程序设计_Chap03_窗口与消息_学习笔记 ――By: Neicole(2013.06.07) 01. 开篇    《Windows程序设计》的第3章,讲述了在Windows编程中很基础同时也是很重要的内容,第一个是Windows窗口是什么,...
  • C# Windows窗体应用程序设计 简易实例操作(一)

    万次阅读 多人点赞 2020-04-18 16:52:20
    C# Windows窗体应用程序设计 简易实例操作(一) 大家好,这是我第一次写博客。写这个的目的一来是为了巩固自己所学的东西,二是希望通过简单的例子来激发对编程学习的热情,互相促进学习。在后面我也会更新其他的...
  • 最近在学习windows程序设计的创建窗口这方面的知识,有一些收获,现在将我所学到的内容记录下来,供大家参考。 本例将做一个类似txt文档窗口,可以对用户的键盘输入打印到该窗口上,并且有菜单栏可以单击菜单栏中的...
  • 安装好后再安装程序开发人员的字典MSDN,VS2013的MSDN和经典的VC++6.0的安装方法略有不同,这里提供一种在线的安装方法 ①打开vs2013后,点击“帮助”菜单栏->"添加和移除帮助内容",来到如何所示的界面 ②在需要...
  • Windows环境下32位汇编语言程序设计(典藏版) 》 基本信息 作者: 罗云彬 出版社:电子工业出版社 ISBN:9787121207594 上架时间:2013-7-8 出版日期:2013 年7月 开本:16开 页码:756 版次:1-1 所属...
  • C#学习教程12——Windows窗体应用程序

    千次阅读 多人点赞 2022-03-07 12:38:02
    文章目录 12.Windows窗体应用程序 12.1 创建Windows窗体应用程序 12.2 窗体属性 12.3 窗体事件 12.4 窗体方法 12.5 McssageBox:消息框 12.6 控件 12.7 Label和LinkLabel:标签控件 12.8 TextBox:文本框控件 12.9 ...
  • C++——Windows 程序开发

    千次阅读 2020-04-28 14:51:40
    Windows API的Windows程序,需要编写两个函数。一个是Winmain()函数,程序的执行从这里开始,基本的初始化工作也在这里完成。另一个是WindowProc()函数,该函数由Windows调用,用来给应用程序传递消息。Winmain与...
  • 第12章 Windows系统编程12.1 查阅相关资料,解释注册表几大根键...12.3 编写代码,使用至少3中不同的方法启动Windows自带的计算器程序。 答: 第一种方法: >>> import os>>> os.system('calc.exe...
  • 五种程序设计方法

    千次阅读 2011-09-04 00:59:28
    1. 结构化程序设计 为了提高程序的可读性、可重用性等,逐渐出现了将程序开发中经常用到的相同的功能,比如数学函数运算、字符串操作等,独立出来编写成函数,然后按照相互关系或应用领域汇集在相同的文件...
  • C#与.NET3.5高级程序设计第四版高清PDF中文完整版

    千次下载 热门讨论 2011-07-05 10:25:50
    27.2 创建一个简单的windows forms 程序(不用ide)  27.3 visual studio windows forms项目模板  27.4 剖析form  27.5 响应鼠标活动  27.6 响应键盘活动  27.7 设计对话框  27.8 通过gdi+呈现图形数据...
  • C#的应用窗体程序同样可以看成控制台应用程序的操作,只是核心思想变了,窗体程序讲究“事件机制的编程”也就是模块化的操作,有可视化的操作方便程序员写代码;本文内容主要介绍窗体应用程序常用的输入输出+操作...
  • 注明:本系列课程专为全国计算机等级考试二级 Python 语言程序设计考试服务 目录 考纲考点 1、Python语言的特点 2、程序设计语言 2.1、程序设计语言概述 2.2、编译和解释 2.3、计算机编程 3、Python语言概述...
  • Windows程序设计--文本输出(一)

    万次阅读 2015-10-21 23:10:45
    之前就写过,windows是一个消息驱动的系统,有两种方式把各种事件通知给应用程序:1是把消息放在应用程序的消息队列中;2是向适当的窗口过程直接发送消息。 这里主要讨论的是WM_PAINT消息 ,以下任何一个事件发送,...
  • 创建Windows窗体应用程序的一般步骤 1.创建Windows窗体项目 2.创建用户界面 3.添加控件 4.创建处理控件事件的方法 5.将控件事件与事件处理方法关联 6. 运行和测试程序 具体步骤如下: ① 创建窗体...
  • C# WinForm 编程需要创建「Windows窗体应用程序」项目。 .NET 提供了大量 Windows 风格的控件和事件,我们可以直接拿来使用,上手简单,开发快速。 Windows 窗体应用程序是 C# 语言中的一个重要应用,也是 C# 语言最...
  • 本书系统地介绍了Python程序设计语言和程序设计的基本方法。从Python语言发展历史、配置环境开始,详细介绍了Python语言的各种数据类型、程序编写方法、图形图像开发和多种库函数的使用。本书强调以程序设计基本方法...
  • Windows环境下32位汇编语言程序设计 第2版(罗文斌) 完整光盘内容,包含每章内容的完整代码 本光盘所包含目录的说明 根目录下的 *.pdf ;附录A、B、C的电子版文档 Chapter02\Test ;测试编译环境 Chapter03\Hello...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 456,390
精华内容 182,556
关键字:

windows的程序设计方法