Windows编程初步(三)【说明:有敏感字眼已全删,不知道为啥还审核不通过】

第三节 设计输出及利用在线帮助

在Windows中,消息ON_PAINT是专门用来处理输出的。基本所有的输出代码应放在这里。
。其输出方式不再限于从上往下,而是全屏可控,因此每个输出都需要告知系统输出位置。典型的文字输出代码是TextOut函数。

将WM_PAINT消息处理的内容保留BeginPaint和EndPaint函数调用,删除其他内容,用图中的内容替代。可以发现屏幕输出的内容改变了。TextOut函数使用一个叫做HDC类型的变量hdc,HDC叫做输出设备句柄,可以理解为一个结构体指针,在BeginPaint函数中被指向当前显示屏有关结构,而在EndPaint函数中释放这个指针的关联(即EndPaint函数之后,该句柄就不能被使用了)。其所指向的内容存储了和输出有关的默认属性。例如,隐含的属性包括用什么字体,用几号字,采用字体的颜色等。其后两个参数是屏幕坐标,屏幕坐标以像素为单位,左上角为0,0点。最后两个参数是待输出字符串的地址和字符串长度。

若要修改默认属性,例如使用一种新的字体如楷书,并且调整字体的大小——即变更字号,更换字体的颜色怎么办呢?Windows使用一组相关函数更改属性,例如SetTextColor函数将字体颜色设置为新的颜色,同时返回原先使用的颜色。当然在画图工作完毕后,应将字体颜色设置回原先的颜色,以免破坏其他程序的文字输出行为。SetTextColor函数具体使用可见后面的例子。

当用户希望显示魏碑字体而不是系统默认的新宋体时,则过程略微复杂一些。字体有大小和是否粗体和下划线等属性,画刷有颜色属性和贴图属性,画笔有颜色和粗细以及画实线还是虚线等属性,这样一些复杂的对象被称为GDI对象。当用户打算使用自定义的GDI对象时,可以使用各自的创建函数可以创建这些对象并得到对象句柄(可以理解为GDI对象的结构体的指针),然后使用SelectObject将这些对象句柄选入输出设备结构体中(HDC),同时得到HDC中原先使用的对象句柄。在使用完毕这些自定义对象后,应该将原先HDC中使用的默认对象选回,最后使用同一的DeleteHandle函数删除这些自定义对象。

下面的例子中创建一个字体,输出一段文字,再使用矩形把字体框住。

省略……

关于Windows画图的可用函数,可以从如图所示MSDN中找到
在这里插入图片描述
图 13 GDI帮助的位置以及初学者可以轻松阅读和应该精读的章节

第四节对话框与输入设计

Windows 是一种全屏的图形界面,使用行输入的scanf虽然简单但是不能满足用户的需要,用户有可能在输入一段内容以后回过头修改前面输入的内容。这时候需要使用全屏输入系统。在Windows中最常见的全屏输入系统是对话框。为允许用户输入数据,程序员需要使用对话框进行输入输出操作。下面设计一个输入顾客姓名和出生月日,输出其星座信息的程序。

首先按照程序中涉及的数据的逻辑相关性,可定义以下数据结构。注意其中全局变量MyCustomer。
在这里插入图片描述
程序片段8 星座之数据

然后在左侧资源视图中鼠标右键点击Dialog,调出快捷菜单,选择Insert Dialog
在这里插入图片描述
图14 新建对话框以及结果

从右图的控件栏中,分三次每次拖动一个 在这里插入图片描述到对话框中。这个是静态文本,将用来提示用户旁边输入什么数据。右键点击第一个静态文本,出现下图对话框,将文字内容修改为姓名。
在这里插入图片描述
图15 设置姓名输入

从控件工具箱中,拖动一个 在这里插入图片描述到对话框中,这个叫做编辑框EditBox,用户可以在这里输入一些字符。——其作用将相当于命令提示符下的scanf。将这个编辑框放在姓名边上。右键点击编辑框,将ID改名为IDC_NAME.如图
在这里插入图片描述
图16 修改姓名输入框属性

再次从控件工具箱中拖动 在这里插入图片描述到对话框中。这个叫做组合框ComboBox,可以向用户提供一些预先设置好的选项,用户可以从这些选项中选择一项。右键点击组合框,如图设置属性。注意在输入数据时,需要按CTRL+回车键输入下一行数据。这里输入月份数据的目的是为了观察对话框执行时其效果是否良好,在程序中还需再输入一次。
在这里插入图片描述
图17 设置月份下拉框属性

最后再拖动一个编辑框到对话框,修改属性如图
在这里插入图片描述
图18 设置生日输入框属性

右键点击OK和Cancel按钮(Button)将标题修改为“确定”和“取消”,然后拖动OK和Cancel按钮,使之更美观些,设置完毕后,可以按下 按钮来测试一下你设计的输入界面的效果。
在这里插入图片描述
图19 测试运行效果

注意到下拉框只能同时看到两个选项,可以回到对话框设计界面,点击组合框的下箭头,就可以拉伸选择区域可以看到的内容。
在这里插入图片描述
图20 修改组合框显示数据行

最后,这个对话框的目的是为了输入顾客信息,所以应该给这个对话框换个更好的名字。右键点击资源视图中新建对话框的名字(原先的名字是IDD_DIALOG1),在对话框中修改ID号如下图:
在这里插入图片描述
图21修改对话框名字

以上内容完成了一个输入界面设计,下面需要通过程序运作这个对话框。
从系统给出的样例代码中,复制AboutProc消息处理函数,修改函数名为InputCustomer,这个函数专门处理顾客信息输入。代码如下:
在这里插入图片描述
程序片段9 顾客信息的输入与编辑

下面需要确定合适的时机来输入顾客信息。方法可以很多,例如当你从菜单中选择一项“输入顾客信息”的命令——使用菜单的方法,前面已经介绍过;或者当你按下回车键时输入顾客信息——这需要对按下键盘作出响应;当你用鼠标在空白地方点击窗口时输入,也是个不错的选择——这需要对用户鼠标动作作出响应。下面用鼠标响应来作为顾客信息输入的事件。

鼠标动作其实很多,左键,右键,中键,按下,松开,双击都各自有不同的事件定义。对于每个事件系统都会告诉程序,事件发生的坐标。下面是一个简表可以浏览一下。
在这里插入图片描述
下面的示例程序中使用了鼠标左键双击事件,其用户操作的设计如下,当用户双击屏幕上任意一点时,弹出顾客对话框。注意,因为程序设计为在大窗口中双击而弹出顾客输入框,因此下面这段消息响应代码应该放置在MainWndProc中。
在这里插入图片描述
程序片段10 激发“输入顾客 ”对话框

一般情况下,窗口时不响应双击消息的。为使主窗口能够接受并处理鼠标双击消息,需要修改主窗口的风格。
在这里插入图片描述
程序片段11 修改主窗口的处理风格

当顾客输入完毕,按下“确定”按钮后,应该在屏幕上显示相应的星座。修改WM_PAINT消息如下:
在这里插入图片描述
程序片段12 显示顾客星座数据
在这里插入图片描述
图22 运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

408考研数据结构复习-时间复杂度与空间复杂度-附统考真题

文章目录一、时间复杂度二、空间复杂度三、相关题目一、时间复杂度 一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n),它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。算法中基本运算(最深…

解调去载波后均衡信道与实际信道的关系

关注公号【逆向通信猿】更精彩!!! 通常,信号经过调制后发送,会经过信道作用,示意图可以表示为 其中 x ( t ) x(t) x(t)为基带信号, e

第十二届蓝桥杯省赛A组试题:左儿子右兄弟Java

【问题描述】 对于一棵多叉树,我们可以通过 “左孩子右兄弟” 表示法,将其转化成一棵二叉树。如果我们认为每个结点的子结点是无序的,那么得到的二叉树可能不唯一。换句话说,每个结点可以选任意子结点作为左孩子,并按任…

activiti脚本任务_Activiti中的高级脚本:自定义配置注入

activiti脚本任务脚本任务可能是Activiti代码库中“最古老的”类之一,但是我认为它仍然未被许多人使用。 (感知到的)缺点当然是性能(解释还是编译),并且从IDE角度来看支持较少。 但是,好处&…

【锁相环系列3】QPSK+基带+Costas锁相环载波同步(重点环路滤波器参数设置和迭代核心代码详解)

引言 假设在QPSK信号解调中,完成匹配滤波、定时抽样后的星座如下所示 而画出基带信号部分点的星座图如下所示 由以上两幅图可以看出,基带信号中还存在微小的频偏,导致星座图旋转,而这种微小的频偏很难通过FFT估计出来,由此想到了用锁相环解决,锁相环锁定后的星座如下 …

线性移位寄存器序列(m序列)之MATLAB实现

移位寄存器的结构 nnn级线性移位寄存器的结构如下图 当生成多项式g(x)g(x)g(x)为本原多项式时,产生的序列为m序列。例如 g(x)x5x21g(x)x^5x^21g(x)x5x21的本原多项式,初态为10000的5级m序列,其周期为25−1312^5-13125−131,结构如…

scala和java像不像_关于Java和Scala同步的五件事你不知道

scala和java像不像实际上,所有服务器应用程序都需要在多个线程之间进行某种同步。 大多数同步工作是在框架级别为我们完成的,例如通过我们的Web服务器,数据库客户端或消息传递框架。 Java和Scala提供了许多组件来编写可靠的多线程应用程序。 …

BPSK调制下(2,1,6)标准卷积码及打孔生成2/3、3/4、4/5、5/6删余码Viterbi译码误码率曲线图(MATLAB实现)

关注公号【逆向通信猿】更精彩!!! 目录 仿真结果卷积码原理图删余后性能比较常用的删余码仿真代码根据码率生成打孔参数(子函数)将标准(2, 1, 6)编码后的序列进行打孔,生成删余码(子函数)对接收到的序列进行反打孔,将原来打孔删除的比特进行补零(子函数)BPSK调制下(2,1,6…

江南大学物联网工程学院数据库课程实验三作业3vb.net实验报告

一、开发环境 语言环境:Microsoft.NET Framework 4.6 SDK IDE:Microsoft Visual Studio Community 2015 二、代码及配置 1、Form1 Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadEnd SubPrivate …

[2021.07.25更新]循环冗余校验(CRC)的MATLAB实现

欢迎同步关注公众号【逆向通信猿】 CRC校验(循环冗余校验) 在计算CRC校验的时候,发现一个网站如下 http://www.ip33.com/crc.html 于是,想自己动手实现该网站计算CRC校验的功能,网站提供的在线计算工具是以十六进制来表示输入参数和结果的,为了方便MATLAB实现,本文提供…

江南大学物联网工程学院数据库课程实验四作业4vb.net实验报告

一、开发环境 语言环境:Microsoft.NET Framework 4.6 SDK IDE:Microsoft Visual Studio Community 2015 二、代码 Imports System.Data.SqlClient Public Class Form1 连接本机数据库并获取test_one数据库中的sc表数据 Dim mybind As BindingManagerB…

MATLAB库函数hilbert(希尔伯特变换)的C语言实现(FFT采用FFTW库)

目录希尔伯特变换原理公式MATLAB官方帮助文档中希尔伯特变换算法常量和结构体定义C语言实现(FFTW库的float版,double版类似)希尔伯特变换原理公式 MATLAB官方帮助文档中希尔伯特变换算法 hilbert uses a four-step algorithm: Calculate the FFT of the input sequ…

netbeans7.4_NetBeans 7.4 Beta提示警告无效的异常处理

netbeans7.4有许多例子说明Java异常处理可能比首次出现时要困难得多,Josh Bloch专门将一整章的《 Effective Java》 (两个版本)专门用于异常处理。 Java中的检查异常模型 仍然 “ 有争议” 。 我很高兴看到我最近下载的NetBeans 7.4 beta有一…

在厚度仅十几微米的电池隔膜找缺陷?人工智能说,能行(人工智能应用案例)

原文链接:https://www.paddlepaddle.org.cn/support/news?actiondetail&id2104 “我们的质检要做的是在厚度仅十几微米的电池隔膜上找出所有微小缺陷,如果没有检测出来,就很可能使新能源汽车的电池在使用过程中出现问题,甚至…

准确率超90%、1秒发出报警,人工智能助国网山东实现无人巡检(人工智能应用案例)

原文链接:https://mp.weixin.qq.com/s/Jh2YLY-4um79ucdHIs5NTg 众所周知,深度学习框架是人工智能的基础技术“底座”,在各大传统产业上也有着巨大的潜力尚待挖掘。5月20日,由深度学习技术及应用国家工程实验室与百度联合主办的“…

基于PaddlePaddle实现高尔夫球场的遥感检测(人工智能应用案例)

原文链接:https://www.paddlepaddle.org.cn/support/news?actiondetail&id2103 1 . 背景及意义 随着高尔夫球运动在我国的兴起,关于高尔夫球场大量占用土地资源、污染环境、耗水量大且公益性差的争议越来越多。国家从2004年开始制定一系列相关政策…

MATLAB库函数firls(最小二乘线性相位FIR滤波器设计)的C语言实现

firls函数功能 FILS设计了一种线性相位FIR滤波器,它可以最小化理想分段线性函数与滤波器在一组期望频带上的幅值响应之间的加权积分平方误差。 b = firls(n,f,a) b = firls(n,f,a,w) b = firls(n,f,a,ftype) b = firls(n,f,a,w,ftype)f是在0和1之间的范围内指定的频率点对的…

数电实验一-初识Multisim和Basys3

特别说明:该系列内容均是本人实验记录,无盗取侵权之嫌,仅供参考,请多动手实践! 一、实验目的 详见报告 二、实验仪器设备 详见报告 三、实验设计过程 使用Multisim为Basys3板卡创建一个PLD设计并进行验证。 1.创建P…

自动化学科前沿讲座作业 基于深度学习的工厂人员监测系统设计

1 背景及应用场景 在工业复杂生产环境下,作业人员的安全问题至关重要。大多数工业企业采用人眼观察视频的方式对作业人员位置进行判断,这种方式长时间会使管理者出现疲劳问题,效率非常低下,遇到安全问题也不能进行及时的处理。采用…

多重继承java_Java中的多重继承与组合vs继承

多重继承java有时我写了几篇有关Java 继承 , 接口和组成的文章。 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处。 Java中的多重继承 多重继承是创建具有多个超类的单个类的能力。 与其他一些流行的面向对象的编程语言&#…