C语言控制台窗口图形界面编程之一

本系列文章改编自《C语言控制台窗口界面编程(修正版)》。本系列文章会抛弃一些原文中难懂难理解且不常用的部分,并修改了部分样例程序。只为了更加清晰地学习C语言的控制台窗口界面编程。而想要更加深入的了解本系列文章,请阅读《C语言控制台窗口界面编程(修正版)》。

《C语言控制台窗口界面编程(修正版)》下载地址:http://download.csdn.net/detail/jzqt_t/7471013

在Windows操作系统下用C语言编写控制台的窗口界面首先要获取当前标准输入和标准输出设备的句柄。通过调用函数GetStdHandle可以获取当前标准输入以及输出设备的句柄。函数原型为:

HANDLE GetStdHandle(DWORD nStdHandle);
/*
其中,nStdHandle可以是
STD_INPUT_HANDLE    标准输入设备句柄
STD_OUTPUT_HANDLE   标准输出设备句柄
STD_ERROR_HANDLE    标准错误设备句柄
*/

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/C/

需要说明的是,“句柄”是Windows最常用的一个概念。它通常用来标识Windows资源(如菜单、 图标、窗口等)和设备等对象。虽然可以把句柄理解为是一个指针变量类型,但它不是对象所在的地址指针,而是作为Windows系统内部表的索引值来使用 的。调用相关文本界面控制的API函数。这些函数可分为三类。一是用于控制台窗口操作的函数(包括窗口的缓冲区大小、窗口前景字符和背景颜色、窗口标题、大小和位置等);二是用于控制台输入输出的函数(包括字符属性操作函数);其他的函数并为最后一类。通过调用CloseHandle函数来关闭输入输出句柄。

示例程序:

#include <stdio.h>
#include <windows.h>
#include <conio.h>    

int main(int argc,char *argv[])
{
    HANDLE handle_out;                              //定义一个句柄
    CONSOLE_SCREEN_BUFFER_INFO screen_info;         //定义窗口缓冲区信息结构体
    COORD pos = {0, 0};                             //定义一个坐标结构体
    handle_out = GetStdHandle(STD_OUTPUT_HANDLE);   //获得标准输出设备句柄
    GetConsoleScreenBufferInfo(handle_out, &screen_info);   //获取窗口信息
    _getch();   //输入一个字符,不会显示到屏幕上
    /*
    向整个缓冲区填充字符'A'
    其中填充的开始处为pos,坐标为{0, 0},也就是屏幕最左上角的字符处
    填充个数为screen_info.dwSize.X(缓冲区宽度,也就是横坐标) * screen_info.dwSize.Y(缓冲区高度,也就是纵坐标)
    因此可以达到向整个缓冲区填充字符'A'的效果
    */
    FillConsoleOutputCharacter(handle_out, 'A', screen_info.dwSize.X * screen_info.dwSize.Y, pos, NULL);
    CloseHandle(handle_out);    //关闭标准输出设备句柄
    return 0;
}
//程序中,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++两套不同的输入 输出操作方式,使用时要特别注意。

(

jzqt_t

)

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索标准输入输出
, c 界面 console
, 控制台
, 函数
, iostream
, 输入缓冲区
, console.info
, 句柄
, cout 输出流
, 缓冲区
, 窗口
, c语言 结构体 指针
, 窗口编程
, 输出
窗口句柄
c语言控制台界面编程、c语言控制台编程、c语言图形界面编程、c语言图形编程、c语言图形化编程,以便于您获取更多的相关知识。

时间: 2024-10-28 18:50:15

C语言控制台窗口图形界面编程之一的相关文章

C语言控制台窗口图形界面编程之八 鼠标事件

上次讲的是键盘事件,这次我们介绍鼠标事件.下面先介绍下鼠标事件的结构体以及相关信息. typedef struct _MOUSE_EVENT_RECORD //鼠标事件结构体 { COORD dwMousePosition; //当前鼠标在控制台窗口缓冲区的位置 DWORD dwButtonState; //鼠标按键的状态 DWORD dwControlKeyState; //控制键状态 DWORD dwEventFlags; //鼠标事件类型 } MOUSE_EVENT_RECORD; /*

C语言控制台窗口图形界面编程之六 光标操作

控制台窗口的光标的位置反映的是当前文本输入的插入位置,通过Windows API函数我们可以随意更改光标的位置,下面介绍这个控制光标位置的API函 BOOL SetConsoleCursorPosition( //设置光标位置 HANDLE hConsoleOutput, //句柄 COORD dwCursorPosition //坐标 ); //若函数调用成功则返回非0值 不仅仅是光标的位置,光标的信息我们也可以通过一些API函数来设置,下面介绍光标信息结构体已经获得和设置光标信息的API函数

C语言控制台窗口图形界面编程之五 控制文本移动的函数

控制文本的移动是控制台窗口界面编程的一个很重要的功能,有了这个功能我们可以实现界面的滚动.下面我们介绍一个控制文本移动的函数,如下: BOOL ScrollConsoleScreenBuffer( //文本移动函数 HANDLE hConsoleOutput, //句柄 const SMALL_RECT *lpScrollRectangle, //移动区域 const SMALL_RECT *lpClipRectangle, //裁剪区域,如果为NULL,那么将代表整个屏幕缓冲区 COORD d

C语言控制台窗口图形界面编程之三 设置文本属性的函数

在这里介绍一个设置文本属性的函数,原型如下 BOOL SetConsoleTextAttribute( // 设置WriteConsole等函数的字符属性 HANDLE hConsoleOutput, // 句柄 WORD wAttributes // 文本属性 ); 本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/C/ 顺便提一下文本属性,其实就是颜色属性,有背景色和前景色(就是字符的颜色)两类,每一类只提供

C语言控制台窗口图形界面编程之七 键盘事件

输入事件中的键盘事件通常有字符事件和按键事件,这些事件的附带信息构成了键盘输入的信息,而想要读取这些信息,是要通过API函数ReadConsoleInput来获取的,函数原型如下: BOOL ReadConsoleInput( //读取输入信息 HANDLE hConsoleInput, //句柄 PINPUT_RECORD lpBuffer, //输入事件结构体的指针 DWORD nLength, //要读取的记录数 LPDWORD lpNumberOfEventsRead //用来接受成功读

C语言控制台窗口图形界面编程之四 常用的文本输出函数

文本颜色属性已经学会了,那么下面就学习几个比较常用的文本输出函数,如下: BOOL FillConsoleOutputAttribute( // 填充字符属性 HANDLE hConsoleOutput, // 句柄 WORD wAttribute, // 文本属性 DWORD nLength, // 个数 COORD dwWriteCoord, // 开始位置 LPDWORD lpNumberOfAttrsWritten // 返回填充的个数 ); BOOL FillConsoleOutput

C语言控制台窗口图形界面编程之二 用于控制台窗口操作的API函数

下面介绍几个用于控制台窗口操作的API函数,如下: //获取控制台窗口信息 GetConsoleScreenBufferInfo(); //获取控制台窗口标题 GetConsoleTitle(); //更改指定缓冲区大小 SetConsoleScreenBufferSize(); //设置控制台窗口标题 SetConsoleTitle(); //设置控制台窗口信息 SetConsoleWindowInfo(); 下面的示例程序用于说明此类函数的使用: #include <stdio.h> #i

请问java图形界面编程中怎样改变消息提示框中确定按钮的文本内容啊?

问题描述 请问java图形界面编程中怎样改变消息提示框中确定按钮的文本内容啊? 问题补充:恩恩,swing的!请问怎么改啊?xiaolv 写道 解决方案 JOptionPane.setDefaultLocale(Locale.CHINA);JOptionPane.showMessageDialog(null, "11", "22",JOptionPane.INFORMATION_MESSAGE);这个按钮自动集成多语言.只能通来Locale来改.想要OK就用Loca

java-Java图形界面编程怎样动态绘制矩形?

问题描述 Java图形界面编程怎样动态绘制矩形? 就是类似Windows自带画图程序的那种,从一个点拖动到另一个点, 动态地绘制一个任意大小的矩形,大概的思路是怎样的 如果有其它语言实现的,可以讲一下大概的思路啊,不一定要代码 解决方案 '先确定要画的是矩形,在获取鼠标按下点的坐标,在获取移动到的点的坐标,实现移动一次图形更新一次,最后确定下鼠标抬起点的坐标,用以确定最后矩形的的大小 解决方案二: 这里有个完整的例子:http://developer.51cto.com/art/201201/3