串口到网络指示灯亮

串口到网络指示灯亮,第1张

前一段做了个串口通信小软件,当打开串口时串口指示灯亮,关闭串口时串口指示灯灭,实现方法如下:

1.在资源视图中,添加两个图标,分别为串口指示灯灭IDI_ICON1,串口指示灯亮IDI_ICON2。

2.在串口通信软件界面上添加图片控件,并利用类向导在对话框头文件中添加下面变量:

HICON m_hIcon_close//图片句柄关闭

HICON m_hIcon_open//图片句柄打开

CStatic m_Icon//指示灯图片控件关联控件变量

3.在串口通信软件BOOL CSchoolTimeDlg::OnInitDialog()函数中添加代码:

//导入指示灯图标

m_hIcon_open=LoadIcon(AfxGetInstanceHandle(),

MAKEINTRESOURCE(IDI_ICON2))

m_hIcon_close=LoadIcon(AfxGetInstanceHandle(),

MAKEINTRESOURCE(IDI_ICON1))

4.在串口指示灯需要打开位置添加代码:

m_Icon.SetIcon(m_hIcon_open)//打开指示灯

在串口指示灯需要关闭位置添加代码:

m_Icon.SetIcon(m_hIcon_close)//关闭指示灯

5.串口指示灯位图:

捷创源科技

微信公众号

用来分享Linux、Python、MySQL等技术教程

打开CSDN APP,看更多技术内容

proteus仿真stm32利用串口通信方式,实现对电路中指示灯的控制

proteus仿真stm32利用串口通信方式,实现对电路中指示灯的控制。 实现功能 发送小写字符“o”,开启指示灯LD2,发送小写字符“c” 设计思路 本实验采用stm32f103r6为主控芯片,及led-green、Virtual terminal时钟源为晶振为8M的系统内部时钟...

继续访问

【嵌入式STM32】采用中断方法实现点灯和串口通信_sitong000的博客-CS...

采用串口中断方式重做上周的串口通信作业。三、中断方式点灯1.CubeMX工程设置1 在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR 2 进行芯片型号选择,一般直接在左上角搜索自己的芯片型号即可。 3外设管脚设置 设置...

继续访问

MFC简单指示灯的实现

利用MFC的图片控件,简单实现指示灯的作用,实现不同的颜色!

串口通信实验——RS-232

实验任务: 一. 了解串口协议和RS-232标准,以及RS232电平与TTL电平的区别;了解"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理。 实验过程: 一、串口协议和RS-232标准 1.串口裂备通讯 串口通讯 (Serial Communication)是一种设派源信备间非常常用的串行通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。 通讯协议,我们以分层的方式来理解,最基本的是把它分为物理层和协议层。物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理

继续访问

Arduino Ethernet W5100扩展板的指示灯含义_温柔狠角色的博客-CSDN博 ...

5、COLL:当网络检测到冲突时闪烁。 6、RX:网络接收数据时尘轮会闪烁。 7、TX:网络发送数据时会闪烁。 需要注意的是,这里的RX,TX是网络通信指示灯,并不是其他控制器上的串口通信指示灯。

继续访问

C# 005 串口通信 串口扫描 开关指示灯_子非愚的博客

C# 005 串口通信 串口扫描 开关指示灯 usingSystemusingSystem.Collections.GenericusingSystem.ComponentModelusingSystem.DatausingSystem.DrawingusingSystem.LinqusingSystem.Text

继续访问

Arduino Ethernet W5100扩展板的指示灯含义

Arduino Ethernet W5100扩展板是继承WIZnet W5100网络芯片的扩展板。将扩展板连接到Arduino后,可使Arduino具有网络功能。此扩展板上有多个指示灯,由于轻易查不到此资料,特来和大家分享。 1、PWR:表示设备已通电。 2、LINK:表示网络已经连接。当发送或者接收数据时会闪烁。 3、FULLD:表示网络连接是全双工通信。...

继续访问

串口通信和Led灯的点亮的仿真及实现

串口通信和led点亮实验的仿真及实现

继续访问

最新发布 STM32F103中断方式实现led灯的控制和串口通信,DMA通信原理及给上位机发送数据

中断通常被定义为一个事件,该事件能够改变处理器执行指令的顺序。这样的事件与 CPU 芯片内外部硬件电路产生的电信号相对应。中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。中断分为同步中断和异步中断。同步中断——同步中断是当指令执行时由 控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后 CPU 才会发出中断。

继续访问

PyCharm pyqt5用label控件显示图片 QPixmap 串口通信指示灯

import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtGui import QPixmap import SerialCommunication # module SerialCommunication.py # myPyMainForm # 主窗口对象 # labIndicator # label控件对象 # 以下是代码片段 # 获取“串口指示灯亮”图片文件路径 imgLedOff

继续访问

MFC下指示灯的实现

指示灯的闪烁1、首先应引入两个图标,一个代表灯亮(属性为ICON_ON),一个代表灯灭(属性为ICON_NOT)。(图标属性默认为IDI_ICON1、IDI_ICON2等,可自行修改)2、添加图标句柄变量例如:      HICON m_hIcon_close 

继续访问

给串口加指示灯

一般有两种接法, A和B两种接法,都可以实现我们的目的。 但是,我一般选择B,为什么呢? A:IO为高时,LED亮,IO为低时,LED灭。 电阻为上拉电阻,IO驱动LED亮灭。 IO电流加载到LED上,长期点亮LED,会发现有些发烫。 B:IO为高时,LED灭,IO为低时,LED亮。 由电源驱动LED,IO不带负载。 LED常亮,也基本不会发热。 ...

继续访问

学习笔记——利用串口通信控制LED指示灯开关

目录一、任务要求二、实现方法三、参考代码 一、任务要求 在CT107D单片机上, 1.系统上电初始化后,关闭蜂鸣器和继电器等无关设备,并向上位机发送字符串:“Welcome to Born_toward system!”,回车换行; 2.上位机通过串口发送单字节命令可以控制下位机的8个LED灯开关; 3.上位机通过串口发送单字节命令可以读取下位机运行信息。 二、实现方法 对于串口通信,在之前已经讲过了,在此不作特别说明。控制灯光可以用单字节命令来控制,则需要建立一个能够识别command并且让LED灯做出

继续访问

【学习笔记】MFC实现按钮控制指示灯的亮度增减显示教程

(1)设计bitmap位图指示灯 (2)将指示灯导入res, 设计五个指示灯来显示灯的亮度等级,并通过label标签显示亮度等级。 可以通过代码来改变静态文本框字体和颜色等属性; (3)通过类向导生成颜色控制消息方法OnCtlColoe()HBRUSH CMFCbuttonDemoDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogEx::OnCtl...

继续访问

「C++ &MFC」状态信号灯显示实现

1.在工具箱拉一个 Control控件 2.右键属性更改ID为xxxStatus 3.右键控件添加类型为CRoundButton的变量m_xxxStatus 4.添加一个继承于CButton的类CRoundButton 类的.h文件如下:

继续访问

CDialog构造函数重载

头文件如下: #pragma once // CMyDlg 对话框 class CMyDlg : public CDialog { DECLARE_DYNAMIC(CMyDlg) public: CMyDlg(CWnd* pParent = NULL)// 标准构造函数 CMyDlg(int iId, CWnd* pParent = NULL)virtual

继续访问

热门推荐 串口收发指示灯电路----电子工程世界论坛

串口收发指示灯电路 如果没猜错的话 这个电路是用于通信速率较高,而通信频度又很低的场合。这时若不加处理,仅低电平点灯的话(串口空闲时为高电平),可能一闪而过,人眼几乎没反应,感觉不到在通信。 以Q5、Q3那一路为例,该电路的关键在1uF电容和后面的那个电阻。通信线上有数据来时Q5导通使Q3也导通点灯,并一下释放了1uF里的电荷,而这时即便通信线已很快恢复成高电

继续访问

c语言mfc实现串口通信,基于MFC-MSComm控件的PC与单片机串口通信编程

终于搞定了!我想我只能这么说,这两天熬夜的成果啊。自从去年校电子竞赛之后一直想要做些计算机控制的东西,和郑子含老师聊了聊,她推荐我去学习VB,但是我对C++情有独钟,因为学过C上手可能快。一直没有时间搞。这次比赛搞小车,想把上学期的想法实现一下。但是电脑控制小车必须要一个良好的人机交换界面。于是开学想要系统的学习下C++语言,看了半本郑阿奇的书结果发现内容竟然和C一模一样,关键的后半本介绍了类的概...

继续访问

使用MFC中的Picture Control控件实现指示灯

步骤: (1)将图片转换成ICO:http://www.bitbug.net/ (2)建立一个基于对话框的MFC项目, 在资源视图导入两个图标,一个代表初始状态(修改ID为IDI_ICON_RED),一个代表工作状态(修改ID为IDI_ICON_GREEN)。(图标属性默认为IDI_ICON1、IDI_ICON2等,可自行修改) (3)在对话框中添加一个Picture Con...

继续访问

利用MFC开发的Activex指示灯控件

在OnSize()事件中,利用CRgn类,裁剪出自己喜欢的指示灯的形状,SetWindowRgn(...)。简单易学,适合初学者!

MFC中Picture Control控件的使用

项目源码下载:http://download.csdn.net/download/zhuzemin45/12005643 所有需要的文件都打包在项目中,下载解压即可。 MFC中红绿指示灯控件的使用 Picture Control控件创建指示灯步骤: 1、将红色绿色指示灯图片放入项目的res文件夹内。 2、项目资源视图->项目名->Icon->添加资源->Icon-...

继续访问

MFC指示灯学习

*** 作步骤  1、在资源编辑的时候选中按钮的 Owner draw 属性,不需要选择 Bitmap 属性.        按钮右键-->Styles-->Owner draw  2、在程序中定义一个CBitmapButton成员变量。         属性添加变量,修改变量类型为CBitmapButton  3、在资源视图中添加资源Bitmap(照片格式要为bmp)

继续访问

MFC制作闪烁灯、绘制彩色文字源代码

此代码可以实现在VC界面上绘制一个彩色的灯,当时也可以绘制多个,可以使用按键来控制闪烁。并且实现了在界面上绘制彩色文字的功能。程序运行环境是VS2010,但是如果稍加移植,在各个编译环境下都可以运行。

串口通信指示灯

MFC

C#会不会获得广泛的接受,并且挤掉其他的语言?

Lindholm: 通常,一种语老颤液言既不会从别的语言那里获利,也不会被挤掉。那些坚定的Fortran程序员不还用着Fortran吗?对于个人来说,语言的选择当然因时而异,但就整体而言,语言的种类只会递增,也就是说,它们之间的关系是“有你有我”而不是“有你没我”。

对于一个新语言的接受程度,往往取决于其能力所及。Java技术被迅速接受,原因是多方面的,Internet和World Wide Web接口,在其他技术面前的挫折感,对于Java技术发展方向的全面影响能力,都是原因。另一个重要的原因是Java独立于厂商,这意味着在兼洞行容产品面前可以从容选择。

C#是否会获得广泛接受?视情况而定。总的来说,那些对于平台无关性和厂商无关性漠不关心的程序员,可能会喜欢C#。那些跟微软平台捆在一起人当然可能想要寻找VB 和VC的一个出色的替代品。但是对于程序跨平台执行能力特别关注的程序员,将会坚守Java之类的语言。这种能力对于多重访问设备(multiple access devices)和分布式计算模型至关重要,而Java语言提供了一个标准的、独立于厂商运行时环境。

Stroustrup: C#的流行程度几乎完全取决于微软投入的资金多少。看上去C#的兴起肯定会牺牲掉其他一些语言的利益,但是事实上未必如此。Java的蓬勃发展并没有给C++带来衰败。C++的应用仍然在稳定增长(当然,已经不是爆炸性的增长了)。也许其他的语言也还能获得自己的一席之地。

不过,我实在看不出有什么必要再发明一种新的专有语言。特别是微软,既生VB,何需C#?

不同OOP语言各有什么优势和劣势?

Stroustrup: C++的优点自始至终都是这么几条:灵活、高效,而且并非专有语言。现在ISO C++标准的出现,巩固了最后一点。

我认为C++的高效是它最基本的优点。这种高效来自于其特有的数据和计算模型,较之Java和C#,这种模型更加贴近机器。不过,哪些程序才真正地渴望这么高的效率?这是个问题。我认为这类程序非常多。人们对于计算机的期望,永远都超越硬件科技的发展速度。很显然,Java和C#的设计者的想法不同,他们认为,在很多地方效率问题无关紧要。

C++主要的缺点,归罪于糟糕的教育(是那些始终认为C++是个纯粹面向对象语言的人,和那些把C++当成C语言变体的人导致了这种情况),归罪于不同平台上的不一致性,归罪于不完整、不标准的编译器实现,归罪于平台无关的系统级程序库的缺少。

这些问题归于一点,就是缺乏一个卓越的厂商,能够满足整个C++社区的需求,勇于投入大量的资金开发必要的程序库。

Lindholm: Java技术的成功,是因为它在合适的时间,出现在合适的地点,而且合理地选择了语言和计算平台的支持目标。Java并不是在所有场合都优于其他OOP语言,但是对于出现的新问题能够解决得很出色。它面向Internet计算环境,避免了C++中晦涩的结构,成功翻越了继承机侍物制的恼人问题。垃圾收集机制显著地提高了生产率,降低了复杂度。在网络背景下使用虚拟机,以及有关安全性和动态加载的一系列设计选择,迎合了正在出现的需求和愿望。这些特性使Java不仅成为现有程序员的新武器,而且也为新的程序员创造了繁荣的市场空间。

此外,Java拥有一个标准化的、二进制形式的类库,提供了必要的(当然并非充分的)平台与厂商无关性。平台与厂商无关性要求一项技术必须有清晰的规范,摒弃那些阻碍二进制标准实施的特性。C++虽然有一个ISO标准,但其实甚至对于相同系统与相同指令体系的各个平台,也提不出一个实用的、各版本兼容的二进制标准。

历史上很多使用虚拟机的语言饱受责难,是因为其不够出色的性能问题,而这要归过于缓慢的解释器和糟糕的垃圾收集器。Java的早期实现也因为同样的问题受到严厉的批评。但是自那时起,业界向新的虚拟机实现技术投入了大量资金,取得了显著的效果,如今在大部分场合,Java的性能跟常规的静态编译语言相比毫不逊色。这使得程序员在获得平台和厂商无关性的同时,也不必付出性能上的代价。

C++并没有强制使用面向对象方法,因此为了编写出色的面向对象代码,就要求程序员们有相当强的纪律性。很多公司就是因为这个原因放弃了C++。作为语言,Java的一个突出的优点就是强制面向对象方法,不允许非面向对象的结构。

C#介于C++和Java之间,脚踏两只船,因此既不够安全,又失之复杂。

对于公司来说,采用新的语言要付出巨大代价。雇不到好的程序员(没人熟悉这种新语言),培训费用高得惊人,学习过程中生产率和产品质量下降,多年的经验随风消逝,等等。一种语言如何克服这些障碍?

Lindholm: 说得很对,采用新东西确实常常开销巨大。不过问题是:这个新东西是否能够节省更多的开支,或者提供巨大的改进,获取合理的回报?很多公司发现,转向Java技术不论在开发的后端(尽快进入市场、快速迭代开发、维护简单性)还是前端(跨平台发布,适用范围从低端设备到高端服务器的技术,安全性),都能节省大笔的开销。

对于新事物的接纳,常常是在痛楚的压力之下。很大程度上,这正是Java所经历的。Java的产生,是对当时很多系统的缺陷所做出的反应。Java技术通过下面的手段减轻了开发者的痛楚:1) 顾及了网络计算方面的需求,是应运而生。2) 在技术能力的抉择上,保持良好的品位,顾及了大众的心理。3) 采用适度强制性策略推行设计决定。此外,Java技术已经成为大学教学中的主流,这同样保证了Java开发者队伍的不断壮大。

但是最重要的一点是,再没有另一种程序设计技术,能够像Java那样允许程序员开发基于Internet的不同平台之上的应用程序。Java平台在这方面的杰出表现,已经被大量的实例证明。Java已经成为Internet上的缺省应用程序平台,Java APIs也成为Internet应用程序开发的天然平台。

Stroustrup: 微软和Sun把大笔的金钱扔在Java、VB和C#中,并不是因为他良心发现,也不是因为他们真的相信这些语言能够带给程序员更美好的生活,而是利益使然。

有一个说法,认为软件工具厂商如果能够把应用程序开发者的专业技术任务负担起来,将获取巨大的经济利益。我对其背后的经济分析颇为怀疑,我认为这很难成为现实,特别是当应用程序开发者使用开放的、标准化的工具时,他们可以有多种选择,从而使上面的想法更加不可能。

多年以前,C++就已经具有泛型能力(也就是templates和STL),有运算符重载,有枚举类型?我们会不会在Java的未来版本中看到这些特性?Java是不是应该纳入这些特性呢?

Strousturp:从1988-89年起,C++就已经有了templates。但是我们花了不少时间来了解如何最好地运用这个工具,早期各厂家对于template的支持在品质上也有很大的差异。有些编译器厂商动作迟缓,至少有一个主要的编译器厂商(好像是指微软,微软在Visual C++4.0才开始支持template,在此之前一直声称template是过于复杂而又没什么用的技术,时至今日,Visual C++对于template的支持在主流编译器中都属于最差的一档——译者注)暗中鼓励声名狼藉的反template宣传,直到他们自己终于学会了这项技术为止。直到今天,对于template的支持在品质上仍然有待改进。

你上面提到的那些特性,我认为Java(还有C#)应该,也肯定会逐渐引入。那些对于程序员来说最有用的语言特性和概念,将会逐渐集中,成为各家主流语言的必然之选。也就是说,我认为类似析构函数和模板特殊化之类的机制,远远比枚举等机制重要得多。

Lindholm:Java技术成功的原因之一,就是很清楚哪些不该做。我们得多问几个为什么:这项特性是不是必不可少?增加它会带来哪些开销?运算符重载是C++中一项极其强大的特性,但是它也大大增加了C++语言的复杂度,很多人都难以招架。Java在各种可能的权衡之中,做出了明智的抉择,找到了能力与需求之间的完美平衡点。

当然,Java也会发展,而且最重要的是,现在是开发者们在推动发展。Java增加泛型能力这件事,很好地展示了Java是如何通过整个开发者社群的参与,在权衡中决定正确的平衡点。关于增加泛型类型(generic types)的“Java规格申请”(Java Specification Request, JSR)已经进入JCP(Java Community Process)程序,而且已经开发了很长一段时间(参见 之JSR-014)。现在,在JCP中,有超过80个JSRs正在讨论中,这充分体现了整个体系对开发者的积极反馈和高度合作,这正是驱动Java平台不断进化的动力。

发展 vs. 革新(Evolution vs. Revolution)

C++是一种发展型的语言,Java和C#似乎更像是革新型语言(它们是从头设计的)?什么时候,革新型的语言才是必需的呢?

Lindholm: Java技术并非凭空出世,反而更像是发展型的。Java所有的特性,在Java平台推出之前,都至少已经存在于另一种环境之中。Java的贡献在于,在众多的特性和权衡中,做出了合理的选择,使得产品既实用,又优雅。Java技术对于程序员的态度是:抚养,但不溺爱。

Stroustrup:从技术上讲,我并不认为Java和C#是什么“从头设计的”革新型语言。倘若Java是从技术原则出发,从头设计,大概就不会模仿C/C++那种丑陋和病态的语法了(不必惊讶,Stroustrup在很多场合表示过,C++采用C的语法形式,实在是迫于兼容性。他本人更偏爱Simula的语法——译者)。

我认为,只有当程序员们面对的问题发生了根本的变化的时候,或者当我们发现了全新的、极其优越的程序设计技术,又完全不能为现存语言所支持的时候,我们才需要全新的语言。问题是,我们恐怕永远也碰不到那些“根本”、“全新”的情况。

我以为,自从OOP问世以来,可称为“根本”的新型程序设计技术,唯有泛型程序设计(generic programming)和生成式程序设计(generative programming)技术,这两项技术主要是源于C++ templates技术的运用,也有一部分曾经被视为面向对象和函数式语言(functional languages)的次要成分,现在都变成正式、可用和可承受的技术了。我对于目前C++模板(template)程序设计的成果非常兴奋。例如,像POOMA, Blitz++和MTL等程序库,在很多地方改变了数值计算的方式。

Java和C#的一个“卖点”,就是它们的简单性。现在Java是不是快失去这个卖点了?

Stroustrup:新语言总是宣称自己如何如何简单,对老语言的复杂性颇多非议。其实这种所谓的“简单性”,简单地说,就是不成熟性。语言的复杂性,是在解决现实世界中极为烦琐和特殊的复杂问题的过程中逐渐增加的。一个语言只要活的时间够长,总会有某些地方逐渐复杂起来,或者是语言本身,或者是程序库和工具。C++和Java显然都不例外,我看C#也一样。如果一种语言能够度过自己的幼年时代,它会发现,自己无论是体积还是复杂性都大大增加了。

Lindholm:Java技术的的功能在增加,需要学习的东西也在增加。不过功能的增加并不一定带来复杂性的增加。Java技术的发展,并没有使学习曲线更加陡峭,只是让它继续向右方延展了。

标准

标准化语言和开放型语言各自的优点和缺点何在?

Lindholm:对于一个开放、不允许专有扩展、具有权威的强制性标准语言或者运行环境来说,不存在什么缺点。允许专有扩展就意味着允许厂商下套子绑架客户。特别重要的是,必须让整个平台,而不只是其中一部分完全标准化,才能杜绝厂商们利用高层次的专有API下套子。客户要求有选择厂商的自由,他们既要有创造性,又需要兼容性。

Stroustrup:对于一个语言,如C/C++来说,建立正式标准(如ISO标准)最大的好处,在于可以防止某一个厂商 *** 纵这种语言,把它当成自己的摇钱树。多个厂商的竞争给用户带来的是较低的价位和较好的稳定性。

专有语言的好处,一是流行,二是便宜(不过等你被套牢了之后,情况就会起变化),三是对于商业性需求可以做出快速的反应。

标准化语言的特点之一是,它不能忽略特殊用户的需求。比如我在AT&T中所考虑的东西,其规模、可靠性和效率要求,跟那些普通厂商关注的大众软件相比,根本不可同日而语。那些公司很自然只关注主要的需求。

然而,多数大机构和身处前沿的公司,都有着特殊的需求。C++的设计是开放、灵活和高效的,能够满足我所能想象的任何需求。跟其他的现代语言相比,C++的家长式作风可谓少之又少,原因就在这。当然,不能赞赏这一点的人会诟病C++的“危险”。

拥有正式和开放标准的语言主要是为编程工具的使用者和客户服务的,而拥有专属“标准”的语言,主要是为厂商服务的。

最近看书时,学到了这方面的知识.觉得这对提高初学者学习VC的兴趣有帮助.就把一些东西敲在了上面.内容虽然简单,可敲进去不太容易啊.呵呵...

1,如何访问桌面窗口

静态函数CWnd::GetDesktopWindow返回桌面窗口的指针,应用程序窗口都可看成是这个窗口的子窗口.可通过下面方面提供的方式来获得应用程序句柄.

HWND hWnd=::GetWindow(::GetDesktopWindow(),GW_CHILD)

2,如何修改主窗口的风格

在我们应用程序的重载方法中CMainFrame::PreCreateWindow(CREATESTRUCT cs)提供给我们修改窗口风格的机会.只需在这里重新设计我们想要我风格即可.

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT&cs)

{

cs.style&=~FWS_ADDTOTITLE

cs.style&=~WS_THICKFRAME

cs.style|=WS_DLGFRAME

return CFrameWnd::PreCreateWindow(cs)

}

注:由于多种风格参数由逻辑或("|")组合在一起的,因此如果想要添加某种风格,只需用"|"把对应的参数加到CREATESTRUCT结构的style域中,而删除已有的风格,则只需用"&"连接CREATESTRUCT结构的style域与该风格的逻辑非值.而要判断是否具有某种风格只需要将原有风格与待判断风格作"&"运算,根据结果值的真假的来判断即可.只所以可以这样做的原因是:所有的风格,在宏中都定义成只有一位为1的二进制数.(不信你去看看,呵呵)

这同样适用于其它类似的场合....

3.调用CWnd::SetWindowText可以改变任何窗口(包括控件)的标题.

AfxGetMainWnd()->SetWindowText(_T("你的窗口的标题"))或者这样

GetParentFrame()->SetWindowText(_T("你的窗口的标题"))

对于控件来说可以这样用:

GetDlgItem(IDC_BUTTON)->SetWindowText(_T("按钮标题"))也可以直接合起来一步用:

SetDlgItemText(IDC_BUTTON,"按钮标题")

4.如何单击除了窗口标题栏以处的区域使窗口移动

当窗口需要确定鼠标位置时Windows向窗口发送WM_NCHITTEST信息,程序可以处理该信息使Windows认为鼠标在窗口标题上.对于对话框和基于对话的应用程序,可以使用ClassWizard处理该信息并调用基类的函数,如果函数返回HTCLIENT则表明鼠标在客户区域,返回HTCAPTION表明鼠标在Windows的标题中.例:

UINT CSampleDialog::OnNcHitTest(CPoint point)

{

UINT nHitTest=CDialog::OnNcHitTest(point)

return(nHitTest==HTCLIENT)?HTCAPTION:nHitTest

}

下面再给出一种推荐方法:直接发送消息.

在响应WM_LBUTTONDOWN信息时处理

void CSampleDialog::OnLbuttonDown(UINT nFlags,CPoint point)

{

CDialog::OnLButtonDown(nFlags,point)

PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y))

}//别小看这个,这里面可是有一定编程技巧的,呵呵!

5.如何创建一个不规则形状的窗口*****

这里面要用到CWnd类的SetWindowRgn函数可以创建不规则形状的窗口.

原型如下:int SetWindowRgn(HRGN hRgn,BOOL bRedraw)

第一个参数就是窗口要画的区域了,第二个是说你是否立即重画.

你只要创建了一个区域就可以实现创建一个不规则形状窗口的目标了.

你可以这样做:

m_rgnWnd.CreateEllipticRgn(0,0,100,100)/*创建一个区域,m_rgnWnd是CRgn类对象放在头文件中了*/

SetWindowRgn((HRGN)m_rgnWnd,TRUE)

6.如何控制窗口的框架的最大最小尺寸

要控制一个框架的最大最小尺寸,你需要做两件事情.在CFrameWnd的继承类中处理消息WM_GETMINMAXINFO,作为参数的MINMAXINFO结构设置了整个窗口类的尺寸限制,因此程序需要考虑工具条,卷动条等等的大小.

你可以先响应WM_GETMINMAXINFO,在里面设置好最大最小尺寸.

然后在框架窗口的PreCreateWindow(...)函数中改变一下风格就行了,就是去掉WS_MAXIMIZEBOX风格(还记得怎么去吗?)

......****.......没时间了,要上课了,改天在来!

在软件启动时,为了加深软件在用户头脑中的印象,可以在软件封面上由下而上循环滚动显示一些包含软件名称、功能、版本、用户名、研制单位等文字信息,在用户按下任意键或点击鼠标键后,立即结束演示进入程序主界面。本文通过向工程中添加Splash screen组件,然后在CsplashWnd类中添加DrawText成员方便地实现了具有滚动文字效果的软件封面,其中文字的位置、对齐方式、字体祥猛型、字号、颜色都由程序来控制。

---- 详细设计步骤如下:

---- 1.创建一个名为test的SDI或MDI工程;

---- 2.向工程中添加Splash screen组件,即添加一个CWnd类的派生类CsplashWnd;

---- 3.编辑或导入软件封面的位图资源,标识号为IDB_SPLASH;

---- 4.向CsplashWnd类中添加一个公有成员函数DrawText,此函数用来在软件封面中显示文字,的实现代码如下:(其中参数含义分别为:内存dc,文字位置,对齐方式,字体,字号,颜色,正文文字)

void CSplashWnd::DrawText(CDC *pDC,

int x, int y, int nAlign,

CString sFontName, int nFONTSIZE0,

COLORREF crTextColor, CString sText)

{

LOGFONT lf//字体

lf.lfStrikeOut=0/谨猜/删除线

lf.lfCharSet = DEFAULT_CHARSET //字符集

lf.lfEscapement =0//角度

lf.lfItalic = 0 //倾斜

lf.lfUnderline = 0 //下划线

lf.lfHeight = nFONTSIZE0 //字号

strcpy(lf.lfFaceName,sFaceName.

GetBuffer(sFontName.GetLength()))

CFont font

font.CreateFontIndirect(&lf)

CFont *pOldFont = (CFont *)

pDC->SelectObject(&font)

UINT oldAlign,uAlign

switch(nAlign)

{

case 0: uAlign = TA_LEFT | TA_TOP break

case 1: uAlign = TA_CENTER | TA_TOPbreak

case 2: uAlign = TA_RIGHT | TA_TOP break

default: uAlign = TA_LEFT | TA_TOP break

}

oldAlign = pDC->SetTextAlign(uAlign)

int oldMode = pDC->SetBkMode(TRANSPARENT)

int oldColor = pDC->SetTextColor(crTextColor)

pDC->TextOut(x,y,sText)

pDC->SetTextColor(oldColor)

pDC->SetTextAlign(oldAlign)

pDC->SetBkMode(oldMode)

pDC->SelectObject(pOldFont)

font.DeleteObject()

}

---- 5. 给CsplashWnd类中添加如下公有成员变量,并初始化变量;

class CSplashWnd : public CWnd

{

......

public:

CDC m_dcText,m_dcImage//显示dc的兼容内存dc

CBitmap* m_pBitmap//位图对象

CBitmap* m_pOldBitmapText,

*m_pOldBitmap/知谨/跟踪内存dc中的原位图

CRgn m_rgn//用于生成矩形区域

CRect m_TextRect //显示文字的矩形区域

int m_nCurPos //文字当前位置

......

}

CSplashWnd::CSplashWnd()

{......

m_nCurPos = 50

......

}

---- 6.在SPLASH.CPP中加入以下预定义命令:

#define TITLECOLOR RGB(0,0,255)//默认标题颜色

#define CONTENTCOLOR RGB(0,255,255)//默认说明文字颜色

#define FONTSIZE0 15 //默认字号

---- 7. 在CsplashWnd类Create中拷贝矩形区域到m_TextRect ;

BOOL CSplashWnd::Create

(CWnd* pParentWnd /*= NULL*/)

{......

m_TextRect.CopyRect

(&CRect(50,100,500,300))

......

}

---- 8. 在CsplashWnd类的成员OnPaint中添加代码,响应显示窗口时发送的WM_PAINT消息。

void CSplashWnd::OnPaint()

{

CPaintDC dc(this)

BITMAP bm

m_bitmap.GetBitmap(&bm)

static BOOL bFirst = TRUE//

指示是否第一次绘制窗口

if(bFirst)

{

if (!m_dcImage.CreateCompatibleDC(&dc)) return

m_pOldBitmap = m_dcImage.SelectObject(&m_bitmap)

if (!m_dcText.CreateCompatibleDC(&dc)) return

m_pBitmap = new CBitmap

int nBitCount = m_dcText.GetDeviceCaps(BITSPIXEL)

m_pBitmap->CreateBitmap

(bm.bmWidth,bm.bmHeight,1,nBitCount,NULL)

m_pOldBitmapText = m_dcText.SelectObject(m_pBitmap)

m_rgn.CreateRectRgn(m_TextRect.left,m_TextRect.top,

m_TextRect.right,m_TextRect.bottom)

bFirst = FALSE

}

m_dcText.SelectClipRgn(NULL)

m_dcText.BitBlt(0, 0, bm.bmWidth,

bm.bmHeight,&m_dcImage, 0, 0, SRCCOPY)

m_dcText.SelectClipRgn(&m_rgn)

int nBasex = m_TextRect.left

int nBasey = m_TextRect.bottom-m_nCurPos

int nMidx = m_TextRect.left + m_TextRect.Width()/2

DrawText(&m_dcText,nMidx,nBasey, 1,

"楷体_GB2312", FONTSIZE0+5,TITLECOLOR,"研制单位")

DrawText(&m_dcText,nMidx,nBasey+30, 1,

"楷体_GB2312", FONTSIZE0,CONTENTCOLOR,

"武警指挥学院模拟中心")

DrawText(&m_dcText,nMidx,nBasey+50, 1,

"楷体_GB2312", FONTSIZE0,TITLECOLOR,"邮政编码")

DrawText(&m_dcText,nMidx,nBasey+70, 1,

"楷体_GB2312", FONTSIZE0,CONTENTCOLOR,"300350")

dc.BitBlt(0, 0, bm.bmWidth,

bm.bmHeight,&m_dcText, 0,0, SRCCOPY)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12193738.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存