控制台窗口界面控制设计
- 格式:doc
- 大小:135.00 KB
- 文档页数:18
实验报告学院:计算机科学与信息工程学院专业:网络工程班级:网络091using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 11{public struct Student{public int num;public string name;public string sex;public int grade;public DateTime birthdate;public Student(int num1, string name1, string sex1, int grade1, DateTime birth){name = name1;num = num1;sex = sex1;grade = grade1;birthdate = birth;}};}2.实验程序:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace Proj9_2{public partial class Form1 : Form{public Form1()}}namespace Proj9_2{partial class Form1{///<summary>///必需的设计器变量。
///</summary>private ponentModel.IContainer components = null;///<summary>///清理所有正在使用的资源。
///</summary>///<param name="disposing">如果应释放托管资源,为true;否则为false。
Win32控制台程序界面类我相信不少同学也和我一样,在刚学习c++的时候都会尝试做简单的图书管理系统,学生成绩管理系统等,做这些实验项目可以加深你对文件操作,vector,list等容器的熟悉度,还可以让你学会设计系统结构。
随着学习的逐渐深入,同学们也许会发现,很多时候我们只要调用标准库函数里的类,代码量就会少很多,如果我们在平时的练习里有意识地去封装一些也许会比较常用的类,那么是不是我们平时编程的效率也会快好多呢。
答案是肯定的,特别对于XXXX系统之类的程序来说,可供应的地方就更多了,要重复使用这些我们自己封装好的类,只要将我们做好的类的.h和.cpp文件与我们做好想做的程序的代码放在同一个文件夹里就好。
下面我就将我在做好的界面类与大家分享,由于时间仓促,所做的类的调用方法也比较少,接下来的时间里,我会继续扩充该类的方法,以便适应未来工作学习的需要,同时也方便大家头文件:windesign.h//划线类(专供windowDesigner.h使用)wndowDesigner.h//画界面类其他要包含的cpp文件questionwin.cppwindesign.cppwindowDesigner.cppwindesign.h的方法:winDesign& leftSide(int,char);//首行缩进winDesign& leftSidec(int,char,char);//首行缩进做加左边框winDesign& Sidesc(int,char);//边框左winDesign& SidescR(int,int,char);//边框右winDesign& SidescL(int,int,char);//边框左2winDesign& centre(int,int,char,string);//中部内容winDesign& centre(int ,char );//中部标题,上下部边框(绘制一行的内容需要用到其中的几个方法)windowDesigner.h的方法:void mainwin(string sentence[],int n,int s);//画主界面//各行内容,选项数,缩进(选项数要大于sentence[]的元素数)void questionwin(string sentence[],int n,int s);//对话框//各行内容,选项数,缩进void needinput(string sentence[],string input[],int n,int s);//需要输入的界面//各文件源代码:windesign.h文件#ifndef WINDESIGN_H#define WINDESIGN_H#include<string>using std::string;#include<iomanip>using std::setfill;using std::setw;class winDesign{public:winDesign& leftSide(int,char);//首行缩进winDesign& leftSidec(int,char,char);//首行缩进做加左边框winDesign& Sidesc(int,char);//边框左winDesign& SidescR(int,int,char);//边框右winDesign& SidescL(int,int,char);//边框左2winDesign& centre(int,int,char,string);//中部内容winDesign& centre(int ,char );//中部标题,上下部边框};#endifwndowDesigner.h文件#ifndef WINDOWDESIGNER_H#define WINDOWDESIGNER_H#include"windesign.h"#include<string>using std::string;class windowDesigner{public:windowDesigner(winDesign){};//实验品(组成)void mainwin(string sentence[],int n,int s);//画主界面//各行内容,选项数,缩进void questionwin(string sentence[],int n,int s);//对话框//各行内容,选项数,缩进void needinput(string sentence[],string input[],int n,int s);//需要输入的界面// private:winDesign Line;};#endifquestionwin.cpp#include<iostream>using std::cout;using std::cin;using std::endl;#include<iomanip>using std::setfill;using std::setw;#include"windowDesigner.h"void windowDesigner::questionwin(string sentence[],int n,int s){int a=1;//边框粗细int h1=25;//整体缩进(数值越大越靠右)int k1=30;//窗口宽度(数值越大越靠下)int i;int n1=10;for(i=0;i<n1;i++){cout<<endl;}Line.leftSide(h1,' ').SidescR(a,a,'=').centre(k1,'=').SidescL(a,a,'=');//上边cout<<endl;Line.leftSide(h1,' ').SidescR(a,a,'=').centre(7,k1,' ',sentence[0]).SidescL(a,a,'=');cout<<endl;//标题Line.leftSide(h1,' ').SidescR(a,a,'=').centre(k1,' ').SidescL(a,a,'=');cout<<endl;for(i=1;i<n;i++)//选项{Line.leftSide(h1,' ').SidescR(a,a,'=').centre(s,k1,' ',sentence[i]).SidescL(a,a,'=');cout<<endl;Line.leftSide(h1,' ').SidescR(a,a,'=').centre(k1,' ').SidescL(a,a,'=');cout<<endl;}if(i<n-1){cout<<endl;}//(如果没有这句话,最后一个选项会有写不协调) Line.leftSide(h1,' ').SidescR(a,a,'=').centre(k1,'=').SidescL(a,a,'=');//底边cout<<endl;}windesign.cpp#include<iostream>using std::cout;using std::endl;#include"windesign.h"winDesign &winDesign::leftSide(int n1,char s3){cout<<setfill(s3)<<setw(n1)<<s3;return *this;}winDesign& winDesign::leftSidec(int n1,char s3,char s4){cout<<setfill(s3)<<setw(n1)<<s4;return*this;}//首行缩进做加左边框winDesign &winDesign::Sidesc(int n2,char a1){cout<<setfill(a1)<<setw(n2)<<a1;return *this;}winDesign &winDesign::centre(int n4,int n3,char s2,string str1) {int i;i=str1.length();cout<<setfill(s2)<<setw(n4)<<s2;cout<<str1;cout<<setfill(s2)<<setw(n3-n4-i)<<s2;return *this;}winDesign &winDesign::centre(int n3,char s2){cout<<setfill(s2)<<setw(n3)<<s2;return *this;}winDesign &winDesign::SidescR(int n2,int n21,char s1){cout<<setfill(' ')<<setw(n2-n21)<<' ';cout<<setfill(s1)<<setw(n21)<<s1;return *this;}winDesign &winDesign::SidescL(int n2,int n21,char s1) {cout<<setfill(s1)<<setw(n21)<<s1;cout<<setfill(' ')<<setw(n2-n21)<<' ';return *this;}windowDesigner.cpp文件#include<iostream>using std::cout;using std::cin;using std::endl;#include<iomanip>using std::setfill;using std::setw;#include"windowDesigner.h"void windowDesigner::mainwin(string sentence[],int n,int s){int h1=12;/*缩进*/const int n1=2;//头两行列数int h2=7,h3=45,h4=4;//头两行int y[4]={8,7,39,9};//第三行标题int k[3]={7,36,13};//const int n2=5,n3=8;int m2=8,m3=40,m4=8;//选项行间隔int mouth2=8,mouth3=10,mouth4=36,mouth5=12;//(窗口装饰)嘴int empty2=4,empty3=45,empty4=7;//空行int legL=4;//腿长=legL-1;int leg2=25,leg3=6,leg4=25;//腿行int a=1;//边框粗细int i;for(i=0;i<n1;i++)//绘制头顶部边框,行数n1=2{Line.leftSide(h1,' ').Sidesc(h2,'=').centre(h3,'=').Sidesc(h4,'=');cout<<endl;}Line.leftSide(h1,' ').Sidesc(y[0],'=').centre(y[1],y[2],'=',sentence[0]).Sidesc(y[3],'=');cout<<endl;//标题Line.leftSide(h1,' ').SidescL(8,n2-i+4,'=').centre(40,' ').SidescR(8,n2-i+4,'=');cout<<endl;//空白行for(i=1;i<n;i++)//选项{Line.leftSide(h1,' ').SidescL(k[0],a,'=').centre(s,k[1],' ',sentence[i]).SidescR(k[2],a,'=');cout<<endl;Line.leftSide(h1,' ').SidescL(5,a,'=').centre(45,' ').SidescR(6,a,'=');cout<<endl;}if(i<n-1){cout<<endl;}//(如果没有这句话,最后一个选项会有写不协调)for(i=0;i<n1;i++){Line.leftSide(h1,' ').SidescL(empty2,a,'=').centre(empty3,' ').SidescR(empty4,a,'=');cout<<endl;}Line.leftSide(h1,' ').SidescL(mouth2,a,'=').centre(mouth3,mouth4,'',"*********************").SidescR(mouth5,a,'=');cout<<endl;Line.leftSide(h1,' ').SidescL(mouth2,a,'=').centre(mouth3,mouth4,' ',"**").SidescR(mouth5,a,'=');cout<<endl;Line.leftSide(h1,' ').SidescL(mouth2,a,'=').centre(mouth3,mouth4,' ',"**").SidescR(mouth5,a,'=');cout<<endl;for(i=0;i<n1;i++){Line.leftSide(h1,' ').Sidesc(h2,'=').centre(h3,'=').Sidesc(h4,'=');cout<<endl;}for(i=1;i<legL;i++){Line.leftSide(h1,' ').SidescL(leg2,leg2-2*i,'=').centre(leg3,' ').SidescR(leg4,leg4-2*i,'=');cout<<endl;}cout<<endl;}。
控制台应用程序设计与调试在学习面向对象的C++之前,必须学习标准C++基础知识,这时可采用控制台应用程序进行练习。
控制台应用程序创建一个窗口模拟DOS 进行输入输出。
1.1 创建一个控制台应用程序工程1.进入VC 环境后,选择File|New 菜单,弹出New 对话框,在Projects 页面选择Win32 Console Application 工程类型,在Project name 编辑框输入工程名Ex1_1,在Location 编辑框输入工程路径E:\ projects\ Ex1_1,如图1.1所示,按OK 按钮。
2.在随后的Win 32 Console Application Step 1 of 1中,参见图1.2,选择an empty project ,按Finish 按钮。
图1.1 New Project 页面,创建新的应用程序图1.2Win 32 Console Application Step 1 of 13.出现Project Information框,如图1.3。
显示创建了一个空的控制台应用程序,且没有任何文件被添加到新工程中,此时,工程创建完成。
图1.3 New Project Information 窗口1.2 程序的编辑、编译、建立、执行1. 选择File|New菜单项,在New对话框的Files页面选择C++ Source File,输入文件名Ex1_1.cpp,选中Add to Project复选框,如图1.4,按OK按钮,打开了源文件编辑窗口,输入以下源代码,该代码用于通过调试的方法来确定浮点数的十六进制格式中,符号位所在位置。
(背景知识:实数的二进制表示为两种形式之一:数符-阶-阶符-尾数或者阶符-阶-数符-尾数)#include <iostream.h>void main(){float a,b;a=1.25;b=-1.25;cout<<endl;}2. 对于已经存在的源文件,选择Project|Add to Project| Files…菜单项,在随后打开的插入文件对话框中选择待添加文件,按OK添加进工程。
控制台窗⼝、脚本
控制太窗⼝是在Windows环境下运⾏的dos程序,只能以命令⾏的⽅式与⽤户交互。
没有特别作⽤,跟其他程序⼀样,只是表现形式不太⼀样 1.对于不太需要输⼊,太多交互的程序我都是⽤控制台完成 2.⼀些批处理也⽤控制台程序完成,查看输出就好了 2.⼀些⾃⼰定义命令进⾏操作的简便程序,⽅便定义命令和参数。
脚本是批处理⽂件的延伸,以纯⽂本的形式保存,可以⽤记事本读取和修改。
⽂本中记录着⼀条条的⽂字命令,当调⽤时,先由系统的解释器将命令翻译成机器可以能识别的指令,然后再执⾏。
因此,它⽐⼆进制程序执⾏效率低。
但是它可以由应⽤程序临时调⽤,可以减⼩程序的规模,从整个程序运⾏的⾓度看,有利于提⾼效率。
多合一控制器人机界面优化设计方案分析人机界面作为现代控制系统中不可或缺的一环,对于设备操作和调整起着至关重要的作用。
尤其对于多合一控制器来说,界面的设计更显得重要。
本文将分析多合一控制器人机界面优化设计方案,旨在提升用户操作的便利性和效率。
一、界面风格选择在设计多合一控制器人机界面时,选择适合的界面风格是非常重要的。
一般来说,可以从以下几个方面进行考虑:1. 一致性:界面设计应该与其他控制设备一致,以便用户能够轻松上手使用。
2. 美观性:界面的外观设计应当符合时代潮流,充满现代感,同时也需要注意不要过于花哨,以免影响用户的操作体验。
3. 易读性:选择合适的字体风格和大小,确保用户可以清晰地读取文字信息。
二、布局设计多合一控制器的界面设计需要合理的布局,以便用户可以快速找到所需的功能和信息。
以下几个方面需要考虑:1. 分组分类:将功能模块进行分类分组,如输入控制、输出控制、报警信息等,用户通过点击或滑动等方式可以快速切换不同的功能页面。
2. 标签导航:在每个功能模块下设置清晰明了的标签导航,用户可以通过点击不同的标签进行具体操作。
3. 窗口拖放:为了提升用户的操作便利性,界面设计应支持窗口拖放功能,用户可以自由调整窗口大小和位置,以适应不同的显示屏幕。
三、功能操作设计多合一控制器的用户需要不同的功能操作,为了提升用户的操作效率和准确性,以下几个方面需要考虑:1. 交互式指导:界面设计应提供交互式指导,帮助用户快速了解各种功能模块的操作方法。
2. 一键操作:对于常用的功能操作,应提供一键式操作方式,以便用户可以通过点击一个按钮进行快速操作。
3. 快捷键设置:为用户提供自定义快捷键设置功能,以满足不同用户对于操作方式的个性化需求。
4. 上下文菜单:根据用户当前的操作环境和需求,动态显示上下文菜单,提供与当前操作相关的功能选项,以便用户可以快速进行操作。
四、交互反馈设计在多合一控制器的界面设计中,交互反馈是非常重要的一部分,可以通过以下几个方面来提升用户的交互体验:1. 友好的提示信息:在用户操作过程中,及时给予友好的提示信息,以便用户了解当前操作的状态和结果。
c++设置控制台窗口的起始大小GetConsoleScreenBufferInfo 获取控制台窗口信息GetConsoleTitle 获取控制台窗口标题ScrollConsoleScreenBuffer 在缓冲区中移动数据块SetConsoleScreenBufferSize 更改指定缓冲区大小SetConsoleTitle 设置控制台窗口标题SetConsoleWindowInfo 设置控制台窗口信息此外,还有窗口字体、显示模式等控制函数,这里不再细说。
下列举一个示例,程序如下:#include#include#includevoid main(){HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口缓冲区信息GetConsoleScreenBufferInfo(hOut, bInfo );// 获取窗口缓冲区信息char strTitle[255];GetConsoleTitle(strTitle, 255); // 获取窗口标题printf("当前窗口标题是:%s\n", strTitle);_getch();SetConsoleTitle("控制台窗口操作"); // 获取窗口标题_getch();COORD size = {80, 25};SetConsoleScreenBufferSize(hOut,size); // 重新设置缓冲区大小_getch();SMALL_RECT rc = {0,0, 80-1, 25-1}; // 重置窗口位置和大小SetConsoleWindowInfo(hOut,true ,&rc);CloseHandle(hOut); // 关闭标准输出设备句柄}需要说明的是,控制台窗口的原点坐标是(0, 0),而最大的坐标是缓冲区大小减1,例如当缓冲区大小为80*25时,其最大的坐标是(79, 24)。
使⽤VisualStudio2019创建C#项⽬(窗体应⽤程序、控制台应⽤程序、Web应⽤程序)⼀、VS的开发环境⾸先你得安装了vs2019,然后确认下下⾯三个组件是否存在,如果没有要下载⼀下。
vs2019的安装可参考。
⼆、创建C#窗体应⽤程序打开vs可以直接在搜索框输⼊关键字进⾏搜索,选择 Windows 窗体应⽤(.NET Framework)。
如图。
也可以限定项⽬类型,所⽤的语⾔进⾏查找。
接下去狂点确定即可。
当然可以选择改个项⽬存放存放的⽬录和项⽬名称。
创建好后,就进⼊到了这么⼀个界⾯。
在窗体右边(也可能是在左边。
每个⼈的设置可能不同)有⼀个⼯具箱的选项,打开有⼀些窗体应⽤所需的控件。
接下来我们写个⼩程序测试⼀下项⽬是否能正常运⾏。
实现的功能就是当我们点击按钮的时候,能显⽰出⽬前的点击次数。
⾸先从属性那边拖动两个空间到窗⼝上,分别是Button和Label。
并把它们的名称和内容分别修改为(btn,点击)和(lab,0)接着绑定按钮的点击事件,如果不知道事件是什么,没关系,先跟着做就⾏。
可以从属性窗⼝那,点击右上⾓的闪电图标,然后点击Clike的按钮,如图。
或者直接双击按钮。
之后就会跳转到这么⼀个代码界⾯。
然后编写我们所需要的代码即可。
如下。
完成效果。
(虽然画⾯有点丑)三、创建控制台应⽤程序创建步骤跟上⾯类似,选择控制台应⽤程序创建即可写个测试程序。
从控制台输⼊⼀句话并打印出来了。
四、创建Web应⽤程序选择创建⼀个Web应⽤程序,如图。
选择空项⽬添加⼀个Web窗体创建好后是这么个界⾯。
可以直接编写H5代码。
或者点击左下⾓设计。
进⼊这么⼀个界⾯。
跟windows窗体应⽤开发很相似。
在右边也有个⼯具箱。
有许多控件可以使⽤。
添加⼀个Label和Button 空间到窗体,并修改下id和text。
要实现的功能是当点击按钮后将Label中的内容转成⼤写。
跟窗体应⽤程序⼀样,双击Button就可以绑定事件然后进⾏编辑。
控制台的设计原则
控制台的设计需要根据用户实际需求,项目具体情况,依据人体工程学、美学标准,进行定制化设计、研发,铁力山控制台能够满足用户的不同需求;
人体工程学主要参考一下几方面因素:
a) 充分参考了人体基础数据
人体基础数据主要包含三方面:人体构造、人体尺度以及人体的活动域。
Mt.Titlis控制台考虑了在不同空间与围护的状态下,工作人员动作和活动的安全,以及对大多数人的适宜尺寸,并强调其中以安全为前提。
b) 对视觉要素的计测为视觉效果设计提供科学依据
人眼的视力、视野、光觉、色觉是视觉的要素,人体工程学通过计测得到的数据,对室内光照设计、室内色彩设计、视觉最佳区域等提供了科学的依据。
室内环境中人的心理与行为:人在室内环境中,其心理与行为尽管有个体之间的差异,但从总体上分析仍然具有共性,仍然具有以相同或类似的方式做出反应的特点,这也正是我们进行设计的基础。
c) 附属件人性化体现
液晶显示器支臂,工程学键盘,桌面边沿包边的处理。
d) 人体工程学考虑的重点因素:
最佳视角、最佳视距、容膝空间、坐姿、手臂工作范围。
不应使脊椎过度弯曲;
头的姿势;
腿部空间;
手臂达到的空间;
工作台面的高度调整;
显示器支臂灵活调节;
键盘抽屉;
专用工作灯;。
控制台窗口界面控制设计(一)作者:丁有和转贴自:yesky 点击数:139 文章录入:本站编辑摘要:文本界面的控制台应用程序开发是深入学习C++、掌握交互系统的实现方法的最简单的一种手段。
然而,Visual C++的C++专用库却没有TC所支持的文本(字符)屏幕控制函数,为此本系列文章从一般控制步骤、控制台窗口操作、文本(字符)控制、滚动和移动、光标、键盘和鼠标等几个方面讨论控制台窗口界面的编程控制方法。
在众多C++开发工具中,由于Microsoft本身的独特优势,选用Visual C++已越来越被众多学习者所接受。
显然,现今如果还再把TC作为开发环境的话,不仅没有必要,而且也不利于向Windows应用程序开发的过渡。
然而,Visual C++的C++专用库却没有TC所支持的文本屏幕(控制台窗口)控制函数(相应的头文件是conio.h)。
这必然给C++学习者在文本界面设计和编程上带来诸多不便。
要知道,文本界面设计是一种深入学习C++、掌握交互系统的实现方法的最简单的一种手段,它不像C++的Windows图形界面应用程序,涉及知识过多。
为此,本系列文章来讨论在Visual C++ 6.0开发环境中,如何编写具有美观清晰的控制台窗口界面的C++应用程序。
一、概述所谓控制台应用程序,就是指那些需要与传统DOS操作系统保持某种程序的兼容,同时又不需要为用户提供完善界面的程序。
简单地讲,就是指在Windows环境下运行的DOS程序。
一旦C++控制台应用程序在Windows 9x/NT/2000操作系统中运行后,就会弹出一个窗口。
例如下列过程:单击Visual C++标准工具栏上的“New Text File”按钮,打开一个新的文档窗口。
选择File | Save菜单或按快捷键Ctrl+S或单击标准工具栏的Save按钮,弹出“保存为”文件对话框。
将文件名为“Hello.cpp” (注意扩展名.cpp不能省略)。
在文档窗口中输入下列代码:#includevoid main(){cout<<"Hello, Console!"<<ENDL;}单击小型编译工具栏中的“Build”按钮或按F7键,系统出现一个对话框,询问是否将此项目的工作文件夹设定源文件所在的文件夹,单击[是]按钮,系统开始编译。
单击小型编译工具栏中的“Execute Program”按钮或按Ctrl+F5键,运行刚才的程序。
程序运行后,弹出下图的窗口。
这就是控制台窗口,与传统的DOS屏幕窗口相比最主要的区别有:(1) 默认的控制台窗口有系统菜单和标题,它是一个内存缓冲区窗口,缓冲区大小取决于Windows操作系统的分配;而DOS屏幕是一种物理窗口,不具有Windows窗口特性,其大小取决于ROM BIOS分配的内存空间。
(2) 控制台窗口的文本操作是调用低层的Win32 APIs,而DOS屏幕的文本操作是通过调用BIOS的16(10h)中断而实现的。
(3) 默认的控制台窗口可以接收键盘和鼠标的输入信息,设备驱动由Windows管理,而DOS屏幕窗口接收鼠标时需要调用33h中断,且鼠标设备驱动程序由自己安装。
二、控制台文本窗口的一般控制步骤在Visual C++ 6.0中,控制台窗口界面的一般编程控制步骤如下:调用GetStdHandle获取当前的标准输入(STDIN)和标准输出(STDOUT)设备句柄。
函数原型为:HANDLE GetStdHandle( DWORD nStdHandle );其中,nStdHandle可以是STD_INPUT_HANDLE(标准输入设备句柄)、STD_OUTPUT_HANDLE(标准输出设备句柄)和STD_ERROR_HANDLE(标准错误句柄)。
需要说明的是,“句柄”是Windows最常用的概念。
它通常用来标识Windows资源(如菜单、图标、窗口等)和设备等对象。
虽然可以把句柄理解为是一个指针变量类型,但它不是对象所在的地址指针,而是作为Windows系统内部表的索引值来使用的。
调用相关文本界面控制的API函数。
这些函数可分为三类。
一是用于控制台窗口操作的函数(包括窗口的缓冲区大小、窗口前景字符和背景颜色、窗口标题、大小和位置等);二是用于控制台输入输出的函数(包括字符属性操作函数);其他的函数并为最后一类。
调用CloseHandle()来关闭输入输出句柄。
注意,在程序中还必须包含头文件windows.h。
下面看一个程序:#include#include#includevoid main(){HANDLE hOut;hout = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口信息GetConsoleScreenBufferInfo(hOut, &bInfo );// 获取窗口信息printf("\n\nThe soul selects her own society,\n");printf("Then shuts the door;\n");printf("On her devine majority\n");printf("Obtrude no more.\n\n");_getch();COORD pos = {0, 0};FillConsoleOutputCharacter(hOut, ' ', bInfo.dwSize.X * bInfo.dwSize.Y, pos, NULL);// 向窗口中填充字符以获得清屏的效果CloseHandle(hOut); // 关闭标准输出设备句柄}程序中,COORD和CONSOLE_SCREEN_BUFFER_ INFO是wincon.h定义的控制台结构体类型,其原型如下:// 坐标结构体typedef struct _COORD {SHORT X;SHORT Y;} COORD;// 控制台窗口信息结构体typedef struct _CONSOLE_SCREEN_BUFFER_INFO {COORD dwSize; // 缓冲区大小COORD dwCursorPosition; // 当前光标位置WORD wAttributes; // 字符属性SMALL_RECT srWindow; // 当前窗口显示的大小和位置COORD dwMaximumWindowSize; // 最大的窗口缓冲区大小} CONSOLE_SCREEN_BUFFER_INFO ;还需要说明的是,虽然在C++中,iostream.h定义了cin和cout的标准输入和输出流对象。
但它们只能实现基本的输入输出操作,对于控制台窗口界面的控制却无能为力,而且不能与stdio.h和conio.h友好相处,因为iostream.h和它们是C++两套不同的输入输出操作方式,使用时要特别注意。
控制台窗口界面的编程控制(二)作者:丁有和转贴自:yesky 点击数:141 文章录入:本站编辑三、控制台窗口操作用于控制台窗口操作的API函数如下:此外,还有窗口字体、显示模式等控制函数,这里不再细说。
下列举一个示例,程序如下:#include#include#includevoid main(){HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口缓冲区信息GetConsoleScreenBufferInfo(hOut, bInfo );// 获取窗口缓冲区信息char strTitle[255];GetConsoleTitle(strTitle, 255); // 获取窗口标题printf("当前窗口标题是:%s\n", strTitle);_getch();SetConsoleTitle("控制台窗口操作"); // 获取窗口标题_getch();COORD size = {80, 25};SetConsoleScreenBufferSize(hOut,size); // 重新设置缓冲区大小_getch();SMALL_RECT rc = {0,0, 80-1, 25-1}; // 重置窗口位置和大小SetConsoleWindowInfo(hOut,true ,&rc);CloseHandle(hOut); // 关闭标准输出设备句柄}需要说明的是,控制台窗口的原点坐标是(0, 0),而最大的坐标是缓冲区大小减1,例如当缓冲区大小为80*25时,其最大的坐标是(79, 24)。
四、文本属性操作与DOS字符相似,控制台窗口中的字符也有相应的属性。
这些属性分为:文本的前景色、背景色和双字节字符集(DBCS)属性三种。
事实上,我们最关心是文本颜色,这样可以构造出美观的界面。
颜色属性都是一些预定义标识:与文本属性相关的主要函数有:BOOL FillConsoleOutputAttribute( // 填充字符属性HANDLE hConsoleOutput, // 句柄WORD wAttribute, // 文本属性DWORD nLength, // 个数COORD dwWriteCoord, // 开始位置LPDWORD lpNumberOfAttrsWritten // 返回填充的个数);BOOL SetConsoleTextAttribute( // 设置WriteConsole等函数的字符属性HANDLE hConsoleOutput, // 句柄WORD wAttributes // 文本属性);BOOL WriteConsoleOutputAttribute( // 在指定位置处写属性HANDLE hConsoleOutput, // 句柄CONST WORD *lpAttribute, // 属性DWORD nLength, // 个数COORD dwWriteCoord, // 起始位置LPDWORD lpNumberOfAttrsWritten // 已写个数);另外,获取当前控制台窗口的文本属性是通过调用函数GetConsoleScreenBufferInfo后,在CONSOLE _SCREEN_ BUFFER_INFO结构成员wAttributes中得到。
五、文本输出文本输出函数有:BOOL FillConsoleOutputCharacter( // 填充指定数据的字符HANDLE hConsoleOutput, // 句柄TCHAR cCharacter, // 字符DWORD nLength, // 字符个数COORD dwWriteCoord, // 起始位置LPDWORD lpNumberOfCharsWritten // 已写个数);BOOL WriteConsole( // 在当前光标位置处插入指定数量的字符HANDLE hConsoleOutput, // 句柄CONST VOID *lpBuffer, // 字符串DWORD nNumberOfCharsToWrite, // 字符个数LPDWORD lpNumberOfCharsWritten, // 已写个数LPVOID lpReserved // 保留);BOOL WriteConsoleOutput( // 向指定区域写带属性的字符HANDLE hConsoleOutput, // 句柄CONST CHAR_INFO *lpBuffer, // 字符数据区COORD dwBufferSize, // 数据区大小COORD dwBufferCoord, // 起始坐标PSMALL_RECT lpWriteRegion // 要写的区域);BOOL WriteConsoleOutputCharacter( // 在指定位置处插入指定数量的字符HANDLE hConsoleOutput, // 句柄LPCTSTR lpCharacter, // 字符串DWORD nLength, // 字符个数COORD dwWriteCoord, // 起始位置LPDWORD lpNumberOfCharsWritten // 已写个数);可以看出:WriteConsoleOutput函数功能相当于SetConsoleTextAttribute和WriteConsole的功能。