C语言控制台窗口界面编程(修正版)

合集下载

用c语言编写一个windows窗口,Windows窗口创建代码(C语言)

用c语言编写一个windows窗口,Windows窗口创建代码(C语言)

⽤c语⾔编写⼀个windows窗⼝,Windows窗⼝创建代码(C语⾔)这是⼀个使⽤C语⾔创建空⽩窗⼝的基本框架代码案例。

#include#include//窗体备⽤HWND g_hwnd;HINSTANCE g_hInstance;//过程函数LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){switch (uMsg){case WM_DESTROY://销毁窗体PostQuitMessage(0);break;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}return 0;}//主函数int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrecInstance, LPSTR lpCmdLine, int nCmdShow){//定义填充窗⼝WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_VREDRAW | CS_HREDRAW;wcex.lpfnWndProc = WinProc;wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);wcex.lpszMenuName = NULL;wcex.lpszClassName = TEXT("WinApp");wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);//注册窗⼝类if (!RegisterClassEx(&wcex)){return 0;}g_hInstance = hInstance;//创建窗⼝HWND hwnd;if (!(hwnd = CreateWindowEx(0, TEXT("WinApp"), TEXT("HelloWord"), WS_OVERLAPPEDWINDOW, 0, 0, 800, 600, NULL, NULL, hInstance, NULL))){return 0;}g_hwnd = hwnd;//显⽰更新窗⼝ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);//消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}。

c语言编写窗体程序

c语言编写窗体程序

c语言编写窗体程序C语言编写窗体程序序号:1窗体程序是一种图形用户界面(GUI)应用程序,它通过使用窗口、按钮、文本框等可视化元素来与用户进行交互。

C语言是一种通用的编程语言,它也可以用于编写窗体程序。

虽然C语言相对于其他专门用于GUI开发的语言来说,可能会更加复杂一些,但是通过使用合适的库和工具,我们仍然能够编写出功能强大且高质量的窗体程序。

本文将介绍如何使用C语言编写窗体程序,并探讨一些相关的主题和概念。

序号:2编写窗体程序需要选择一个适合的库或框架。

在C语言中,有一些常用的库可以用于GUI开发,例如GTK+、Qt和WinAPI等。

这些库为我们提供了创建窗体、按钮等控件以及处理用户输入的功能。

需要根据自己的需求和偏好选择合适的库。

序号:3一种常用的库是GTK+,它是一个跨平台的GUI库,可以在多个操作系统上运行。

使用GTK+编写窗体程序可以很容易地创建各种控件,并通过信号和回调函数处理用户输入。

GTK+库的安装和配置相对简单,可以在Linux、Windows和Mac等平台上使用。

接下来是一个使用GTK+库编写的简单窗体程序的示例:```c#include <gtk/gtk.h>static void on_button_clicked(GtkWidget *widget, gpointer data) {g_print("Hello, World!\n");}int main(int argc, char *argv[]){gtk_init(&argc, &argv);GtkWidget *window;GtkWidget *button;window = gtk_window_new(GTK_WINDOW_TOPLEVEL);button = gtk_button_new_with_label("Click Me");g_signal_connect(button, "clicked",G_CALLBACK(on_button_clicked), NULL);g_signal_connect(window, "destroy",G_CALLBACK(gtk_main_quit), NULL);gtk_container_add(GTK_CONTAINER(window), button);gtk_widget_show_all(window);gtk_main();return 0;}```序号:4在上述示例中,我们首先包含了GTK+库的头文件,并定义了一个按钮点击事件的回调函数`on_button_clicked`。

用C语言写windows窗体程序

用C语言写windows窗体程序

很多学C的朋友认为C语言只能写DOS程序,而不能像C#那样写windows窗体的程序,这你可就打错特错了,今天我来简单掩饰下C语言怎么利用windows提供出来的API写windows窗体程序。

开发工具VC6.0,开发平台windows7。

首先第一步,打开VC,新建工程,选择win32 application,如下图然后新建一个C语言源文件,这个就不截图了,如果这也不会的话相信你也不会来看这篇帖子~呵呵建好文件以后把一下代码输入进去。

编译即可~代码讲解会下帖子下方1.#include <windows.h>2.3.LRESULT CALLBACK Windo WP roc(4. HWND hwnd, //handle to window5. UINT uMsg, //message identifier6. WPARAM wParam, //first message parameter7. LPARAM lParam //second message parameter8. );9.10.11.int WINAPI WinMain(HINSTANCE hInstance,12. HINSTANCE hPrevInstance,13. L PS TR lpCmdLine,14. int nShowCmd15. )//入口函数16.{17. WNDCLASS wndclass;18. HWND wndhwnd;19. MSG msg;20. wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//加载图标21. wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//加载鼠标样式22. wndclass.style=CS_VREDRAW | CS_HREDRAW;//窗口样式23. wndclass.lpfnWndProc=WindowProc;//窗口过程回调函数24. wndclass.cbClsExtra=0;//类额外内存25. wndclass.cbWndExtra=0;//窗口额外内存26. wndclass.hInstance=hInstance;//27. wndclass.hbrBackground=(HBRUSH)GetStockObject(SYSTEM_FONT);//窗口颜色28. wndclass.lpszMenuName=NULL;//窗口菜单29. wndclass.lpszClassName="testWindow";//窗口类名30.31. RegisterClass(&wndclass);32. wndhwnd=CreateWindow("testWindow","windows",WS_OVERLAPPEDWINDOW& ~WS_MAXIMIZEBOX,33. CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,34. NULL,NULL,hInstance,NULL);35. ShowWindow(wndhwnd,SW_SHOWNORMAL);36. UpdateWindow(wndhwnd);37. while(GetMessage(&msg,NULL,0,0))38. {39. TranslateMessage(&msg);40. DispatchMessage(&msg);41. }42.43. return 0;44.}45.46.LRESULT CALLBACK WindowProc(47. HWND hwnd, //handle to window48. UINT uMsg, //message identifier49. WPARAM wParam, //first message parameter50. LPARAM lParam //second message parameter51. )52.{53. HDC hdc,hDC;54. PAINTSTRUCT ps;55. char szchar[20];56. static int i=0;57. switch (uMsg)58. {59. case WM_PAINT://窗口重绘消息,窗口加载和重绘的时候产生该消息60. hdc=BeginPaint(hwnd,&ps);61. TextOut(hdc,0,0,"窗口加载完成",strlen("窗口加载完成"));//往窗口输出文本62. //MessageBox(hwnd,"Hello World","Hi",MB_OK);63. EndPaint(hwnd,&ps);64.65. break;66. case WM_CHAR://处理键盘按键消息67. sprintf(szchar,"char is %c",wParam);68. MessageBox(hwnd,szchar,"提示",MB_OK);69. break;70. case WM_LBUTTONDOWN://处理鼠标左键按下消息71. MessageBox(hwnd,"mouse click","提示",MB_OK);72. hDC=GetDC(hwnd);73. TextOut(hDC,0,50,"鼠标事件处理时显示文字",strlen("鼠标事件处理时显示文字"));74. ReleaseDC(hwnd,hDC);75. break;76. case WM_CLOSE://窗口关闭消息77. if(IDYES==MessageBox(hwnd,"你确定要关闭吗?","提示",MB_YESNO))78. DestroyWindow(hwnd);79. break;80. case WM_DESTROY:81. PostQuitMessage(0);82. break;83. default:84. return DefWindowProc(hwnd,uMsg,wParam,lParam);//使用缺省值来调用窗口过程函数85. }86. return 0;87.}复制代码要说明的事,windows程序必须包含的头文件就是windows.h,而程序的入口函数叫做WinMain(dos的入口函数叫main),如果搞不清有几个参数,参数怎么写,可以查阅MSDN,WindowProc函数是窗口过程函数,也就是处理窗口消息的函数;先来看winamin函数内部,首先定义了一个WNDCLASS类型的数据,这个类型是windows 提供出来的结构体,他里面有10个成员。

C语言图形界面的编程

C语言图形界面的编程

C语⾔图形界⾯的编程1.编写图形程序时⽤致电的⼀些图形库函数抣在graphics.lib中,扏⾏这些函数时,所需的有关信息(如宏定义等)则包含在graphics.h头⽂件中。

2.我们⽇常在电视屏幕上显⽰的画⾯,其实均由⼀些圆点组成(其亮度,顔⾊不同),这些点称为像素(或像点),它们是组成图形的最⼩单位。

3。

插在PC机插槽中的图形卡(即适配器),其作⽤就是将要显⽰的字符和图形以数字形式存储在上的显⽰存储器(VRAM)中,再将其变成视频模拟信号送往相应适配的显⽰器机配有的显⽰器种类不同,因⽽适配器种类不同4,VGA:视频图形阵列适器:VGA是⽬前流⾏的PC机显⽰标准,它⽀持CGA,EGA的所有显⽰⽅式,但⾃已还有640*480像素的16⾊显⽰⽅式, 640*350像素的中分辨率显⽰⽅式和640*200像素的低分辨显⽰⽅式,它们均有16种显⽰顏⾊可供选择。

5.CVGA:是国内研制的带有显⽰汉字功能的VGA图形适配器,带有汉字字库,该适配器提供了和CGA,EGA,VGA全兼容的⼯作⽅式,还担供了在⽂本⼯作⽅式下的⾼分辨率图形显⽰功能。

6.显⽰器有两种⼯作⽅式,即⽂本显⽰和图形显⽰。

它们的区别是显⽰存储器中的存储的信息不同。

字符⽅式时, VRAM存放要显⽰字符的ASCII 码,⽤它作为,取出字符发⽣器ROM中存放的相应字符的图像(⼜称字模),变成视频信号在显⽰器上进⾏显⽰;⽽当选择图形⽅式时,则要显⽰的图形的图像直接存在VRAM中中,VRAM中某单元存放的数就表⽰了相应屏莫上某⾏和某列上的像素及顔⾊7.对EGA显⽰器,调⾊板即16个调⾊板寄存器是⼀个顔⾊索引表,它存有16种顔⾊,VRAM中的每个像素值(是4位)实际代表⼀个顔⾊索引号该值即上述函有选举权的参数index可知道选中哪个调⾊板寄存器,⽽每个调⾊板寄存器为6位,故可⽤6位⼆进制数表⽰⼀个顔⾊,因⽽可有64种顔⾊供选择。

该顔⾊值即是上述参数octual_color,8.对于VGA显⽰器,也只有⼀个调⾊板,对应16个调⾊板寄存器。

C语言实现图形界面

C语言实现图形界面

C语言实现图形界面C语言实现图形界面对于程序员来说是一项非常重要且有挑战性的任务。

随着计算机技术的不断发展,图形界面在软件开发中越来越重要,因此掌握如何使用C语言来实现图形界面也成为了程序员们必备的技能之一。

一、图形界面的基本概念在介绍C语言实现图形界面的具体方法之前,首先需要了解图形界面的基本概念。

图形界面是指通过图形元素(如按钮、文本框、菜单等)在屏幕上进行交互的界面,用户可以通过鼠标、键盘等设备与计算机进行交互操作。

二、使用C语言实现图形界面的方法1. 使用第三方库为了方便使用C语言实现图形界面,可以选择使用第三方库,如GTK、Qt等。

这些库提供了丰富的图形界面组件和接口,方便开发人员快速构建图形界面应用程序。

2. 使用Windows API对于Windows平台下的软件开发,可以使用Windows API来实现图形界面。

Windows API提供了一系列函数和数据类型,可以方便地创建窗口、按钮、菜单等图形界面组件。

3. 使用OpenGL如果需要在图形界面中展示3D图形,可以使用OpenGL库来实现。

OpenGL是一种跨平台的图形库,可以实现高性能的3D图形渲染。

三、示例代码下面是一个简单的示例代码,演示了如何使用C语言和GTK库实现一个简单的图形界面:```c#include <gtk/gtk.h>int main(int argc, char *argv[]){GtkWidget *window;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);g_signal_connect(window, "destroy",G_CALLBACK(gtk_main_quit), NULL);gtk_widget_show(window);gtk_main();return 0;}```四、总结通过以上介绍,我们了解了使用C语言实现图形界面的基本方法和示例代码。

cc++console(控制台)编程详解

cc++console(控制台)编程详解

cc++console(控制台)编程详解前⾔:控制台⽂本窗⼝的控制是基于win32 api(win32 api可理解为微软给我们提供的⼀系列函数的集合)实现的;例1:#include <stdio.h>int main(){printf("Hello World!\n");return0;}运⾏结果:例1中,我们⽤printf()函数实现在控制台输出了hello world!然⽽当我们想要将之前输出的内容清除时,在stdio.h中的函数并不能满⾜我们的需求;这时我们就要借助于win32 api函数例2:#include <stdio.h>#include <windows.h>int main(){printf("Hello World!\n");Sleep(1000);system("cls");return0;}运⾏结果:例2中,⽤到windows.h中的Sleep();system();函数,Sleep(1000)函数功能为延时1s后程序向下运⾏,system(“cls”)清除内容,所以在例2中,程序运⾏显⽰hello world!⼀秒后就清除⽤于控制台窗⼝操作的API函数如下:GetConsoleScreenBufferInfo 获取控制台窗⼝信息GetConsoleTitle 获取控制台窗⼝标题ScrollConsoleScreenBuffer 在缓冲区中移动数据块SetConsoleScreenBufferSize 更改指定缓冲区⼤⼩SetConsoleTitle 设置控制台窗⼝标题SetConsoleWindowInfo 设置控制台窗⼝信息例3:#include <windows.h>#include <stdio.h>int main(void){SetConsoleTitle(L"hello world!"); // 设置窗⼝标题printf("hello world!");return0;}运⾏结果:在例3中,我们使⽤了setconsoletitle()函数;窗⼝标题已然改变成为hello world!了关于其它函数的使⽤⽅法,可以度,这⾥暂且不做赘述了。

C语言控制台图形化编程

C语言控制台图形化编程

C语言控制台图形化编程在计算机编程领域,图形化界面一直是提高用户体验的重要手段之一。

在C语言中,虽然没有直接支持图形化编程的库函数,但我们可以利用一些技巧和库来实现控制台图形化编程。

本文将介绍如何在C语言中通过控制台绘制基本的图形和实现简单的交互效果。

一、基本概念在开始编写控制台图形化程序之前,我们需要了解一些基本概念。

首先是像素和字符的概念,控制台上的每个字符都可以看作一个像素,可以通过改变字符的颜色来实现绘图效果。

其次是控制台的坐标系,通常以左上角为原点,向右为X轴正方向,向下为Y轴正方向。

二、绘制基本图形1. 绘制点在控制台中绘制点可以通过改变字符的颜色实现,可以使用Windows API函数SetConsoleTextAttribute来设置字符的颜色。

例如,下面代码可以绘制一个红色的点:```c#include <windows.h>#include <stdio.h>void gotoxy(int x, int y) {COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);}void setcolor(int color) {HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hConsole, color);}int main() {int x = 10, y = 5;gotoxy(x, y);setcolor(FOREGROUND_RED);printf("*");return 0;}```2. 绘制线段要在控制台中实现绘制线段的效果,我们可以利用字符的重复打印来模拟直线的效果。

例如,下面代码可以绘制一条水平线段:```c#include <stdio.h>void setcolor(int color) {printf("\033[1;%dm", color);}int main() {int x1 = 10, x2 = 20, y = 5;setcolor(31); // 设置为红色for (int i = x1; i <= x2; i++) {printf("*");}return 0;}```3. 绘制矩形要在控制台中绘制矩形,可以利用循环来控制每行的输出。

C语言控制台界面编程(修正版)

C语言控制台界面编程(修正版)

控制台窗口界面编程控制〇、摘要一、概述二、控制台文本窗口的一般控制步骤三、控制台窗口操作四、文本属性操作五、文本输出六、文本操作示例七、滚动和移动八、光标操作九、读取键盘信息十、读取鼠标信息十一、结语补充篇--经典程序(Internet资源)摘要:文本界面的控制台应用程序开发是深入学习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程序。

一旦控制台应用程序在Windows操作系统中运行后,就会弹出一个窗口。

例如下列代码:#include <stdio.h>int main(int argc,char *argv[]){printf("Hello, Console!\n");return 0;}单击小型编译工具栏中的“Build”按钮或按F7键,系统出现一个对话框,询问是否将此项目的工作文件夹设定源文件所在的文件夹,单击[是]按钮,系统开始编译。

《用C语言编写带有GUI的桌面应用》

《用C语言编写带有GUI的桌面应用》

《用C语言编写带有GUI的桌面应用》
在今天的软件开发领域,GUI(图形用户界面)是一种重要的
部分。

C语言是一种功能强大的、可移植的编程语言,其灵活
性使其在现代软件开发中占据重要位置。

用C语言编写带有GUI的桌面应用程序可以提供软件开发者更多的可能性。

用C语言编写带有GUI的桌面应用前,首先要明确GUI应用
程序的目标,即想要实现的功能。

接下来,要编写程序的结构、编写代码,实现功能。

从程序结构的角度来看,程序的基本构件是模块和函数,它们可以有效地实现开发者想要实现的功能。

在编写程序结构时,可以通过模块化的体系结构来管理程序的结构,以循序渐进的方式编写程序,可以缩减程序的开发时间。

接下来,需要编写代码,实现功能。

由于C语言是低级语言,需要合理地使用结构化程序设计的原则,如判断/循环语句、
函数、变量等,以保证程序正确、稳定、可靠的工作。

另外,要实现GUI的设计,需要使用相应的工具,如GTK、wxWidgets等,这些工具可以让开发者用C语言实现GUI应
用程序。

这些工具可以让开发者快速编写GUI应用程序,而
无需使用更复杂的代码。

最后,在编写完成后,建议进行调试,以确保程序的可靠性。

调试可以通过检查程序的运行路径、诊断某些程序问题等方式来进行。

调试完成后,就可以发布程序,以供使用者下载和安
装了。

总之,用C语言编写带有GUI的桌面应用并不是一件容易的任务,但是通过正确的策略和方法,以及一些相应的工具,开发者可以快速、高效地完成编写过程。

因此,用C语言编写具有GUI的桌面应用依然是一个值得探索的领域。

c语言控制台函数

c语言控制台函数

c语言控制台函数C语言控制台函数控制台函数是C语言中用于与用户进行交互的重要工具。

通过控制台函数,我们可以在控制台窗口中输出信息,接收用户的输入,并根据用户的输入做出相应的处理。

掌握控制台函数的使用方法,可以使我们的程序更加灵活、友好地与用户进行交互。

1. printf函数printf函数是C语言中最常用的输出函数之一。

它用于在控制台窗口中输出指定的信息。

我们可以使用printf函数输出字符串、数字等各种类型的数据。

例如,下面的代码会在控制台窗口中输出"Hello World"这个字符串:```c#include <stdio.h>int main() {printf("Hello World");return 0;}```2. scanf函数scanf函数是C语言中用于接收用户输入的函数。

它可以从控制台窗口中读取用户输入的数据,并将数据存储到指定的变量中。

例如,下面的代码会接收用户输入的一个整数,并将其存储到变量num 中:```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("你输入的整数是:%d", num);return 0;}```3. gets函数gets函数是C语言中用于接收用户输入字符串的函数。

它可以从控制台窗口中读取用户输入的一行字符串,并将字符串存储到指定的字符数组中。

例如,下面的代码会接收用户输入的姓名,并将其存储到字符数组name中:```c#include <stdio.h>int main() {char name[20];printf("请输入您的姓名:");gets(name);printf("您的姓名是:%s", name);return 0;}```4. putchar函数和puts函数putchar函数用于在控制台窗口中输出一个字符,而puts函数用于在控制台窗口中输出一个字符串。

C语言菜单界面的实现方

C语言菜单界面的实现方

C语言菜单界面的实现方在C语言中,可以使用多种方式实现菜单界面,比如利用循环和条件语句结合的方式,或者使用函数和结构体来组织菜单功能。

下面将分别介绍两种实现方式。

一、使用循环和条件语句结合的方式实现菜单界面。

1. 定义一个整型变量menuChoice作为用户选择菜单的输入,用来控制循环。

2. 使用无限循环while(1)来展示菜单和获取用户输入。

3. 在循环中使用条件语句switch来处理用户输入。

下面是一个简单的例子:```c#include <stdio.h>int maiint menuChoice;while (1)printf("========== 菜单 ==========\n");printf("1. 选项一\n");printf("2. 选项二\n");printf("3. 选项三\n");printf("0. 退出\n");printf("请输入您的选择: "); scanf("%d", &menuChoice); switch (menuChoice)case 1:printf("您选择了选项一\n"); //TODO:执行选项一的操作break;case 2:printf("您选择了选项二\n"); //TODO:执行选项二的操作break;case 3:printf("您选择了选项三\n"); //TODO:执行选项三的操作break;case 0:printf("谢谢使用,再见!\n"); return 0;default:printf("无效的选择,请重新输入\n");break;}}```二、使用函数和结构体来组织菜单功能。

C语言窗口程序设计简介

C语言窗口程序设计简介

C语言的窗口程序设计简介窗口程序设计是依赖操作系统平台的,以下分别介绍基于Windows平台和Linux平台的C语言窗口程序设计。

在Windows中,窗口是嵌入到内核的,编程时,使用自己平台独有的函数。

因此Windows程序都只能在Windows平台上运行。

Windows的C语言窗口程序设计使用Windows SDK。

/***********************************************文件名:Message.c*一个简单的消息提示框**********************************************///Windows程序都包含这个头文件#include <windows.h>//所有Windows程序的主函数入口 WinMain()函数,//相当于一般C语言程序的入口 main()函数int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow){//调用提示信息窗口APIMessageBox(NULL, //没有父窗口"在迷茫中追逐……\n在追逐中迷茫……", //提示信息内容"人生寂寞啊", //标题栏MB_OK | MB_ICONEXCLAMATION); //按钮和图标//退出程序return 0;} //==============WinMain函数结束==============使用wxDev-C++编译Windows的SDK程序,直接新建源文件,在连接器命令中输入:-lgdi32 –mwindows其中,gdi32是Windows SDK的链接库,-mwindows用来关闭命令行(DOS)窗口显示的。

运行结果:在Linux下,窗口是一个程序,而不是嵌入内核的。

C语言如何开发桌面GUI应用程序?

C语言如何开发桌面GUI应用程序?

C语⾔如何开发桌⾯GUI应⽤程序?这⾥介绍⼀种⾮常简单的⽅法,使⽤GTK,⼀个基于C语⾔开发的跨平台图形⼯具包,可以直接使⽤C语⾔快速完成桌⾯GUI程序的开发,下⾯我简单介绍⼀下实现过程,主要内容如下:1.⾸先,下载安装GTK,这⾥有2种⽅法,⼀种是按照GTK官⽹的⽅法⼀步⼀步配置,还有⼀种是直接使⽤打包好的GTK-bundle包,这⾥以第⼆种⽅法为例,直接使⽤打包好的GTK-bundle 包,这个可以直接在CSDN上找到下载,如下,解压这个zip⽂件到任意⼀个⽂件夹,之后需要将bin⽬录添加到环境变量中:2.接着打开cmd窗⼝,输⼊⼀下“pkg-config --cflags gtk+-3.0”命令,如果输出如下,则说明配置成功:这时你就可以测试⼀下GTK⾃带的⽰例,直接输⼊命令“gtk3-demo”就⾏,效果如下,就会弹出所有GTK⾃带的GUI⽰例:3.最后就是我们在C语⾔中引⼊GTK,然后实现GUI程序开发了,这⾥以Code::Blocks软件为例,需要分别是设置⼀下编译器和链接器,如下:打开Code::Blocks,依次点击菜单栏的“Settings”->"Compiler...",在编译器设置下⾯添加⼀⾏命令“`pkg-config --cflags gtk+-3.0`”,注意是反引号,主要作⽤是引⼊编译所需要的头⽂件:接着需要在链接器设置中添加⼀⾏命令“`pkg-config --libs gtk+-3.0`”,如下,主要作⽤是添加程序运⾏所需要的动态库:最后我们就可以编写C语⾔代码来实现GUI程序开发了,测试代码如下,⾮常简单,⼀个简单的窗⼝程序:编译运⾏这个程序,效果如下,已经成功弹出窗⼝啦:这⾥你也可以配置Dev-C++,VS2017都可以,⽹上也有相关资料和教程。

⾄此,我们就完成了利⽤C语⾔来开发桌⾯GUI程序,总的来说,整个过程不难,就是有些繁琐,C语⾔运⾏效率⾼,但毕竟封装性差,做GUI开发还是有些复杂,如果你想快速开发⼀个GUI应⽤,可以考虑使⽤⼀下其他语⾔,如C++,C#,Electron等,更简单也更快捷,希望以上分享的内容能对你有所帮助吧,也欢迎⼤家评论、留⾔。

使用C进行Windows桌面应用程序开发

使用C进行Windows桌面应用程序开发

使用C进行Windows桌面应用程序开发Windows桌面应用程序是指能够在Windows操作系统上运行的软件应用程序,通常具有图形用户界面(GUI)且能够提供丰富的功能和交互性。

开发Windows桌面应用程序可以使用多种编程语言,其中C语言是一种常用且强大的选择。

本文将介绍使用C语言进行Windows桌面应用程序开发的基本步骤和相关注意事项。

一、Windows桌面应用程序开发环境的准备在进行Windows桌面应用程序开发之前,首先需要搭建相应的开发环境。

以下是搭建C语言开发环境的基本步骤:1. 安装C编译器:C语言是一种编译型语言,因此需要安装相应的C编译器。

常用的C编译器有GCC和Visual Studio等。

GCC是一款开源的免费编译器,而Visual Studio是微软官方提供的一套集成开发环境(IDE),其中包含了C编译器。

2. 配置开发环境:根据选择的C编译器进行相应的环境配置。

对于GCC,可以通过在命令行中输入gcc命令来进行编译和链接操作。

对于Visual Studio,可以在IDE中创建一个新的C项目,并在项目设置中进行相关配置。

二、Windows桌面应用程序的开发流程在搭建好开发环境后,可以开始进行Windows桌面应用程序的开发。

下面是一个基本的开发流程:1. 确定应用程序需求:在开始开发之前,首先需要明确应用程序的需求和功能。

考虑应用程序的用途、目标用户以及所需的功能和界面设计,有助于后续的开发工作。

2. 编写代码:使用C语言编写应用程序的功能代码。

在编写代码时,可以利用C语言的丰富库函数来实现各种功能,比如文件操作、网络通信、图形界面等。

同时,还可以使用相关的开发工具和框架来简化开发过程。

3. 进行编译和调试:使用C编译器对代码进行编译,并进行调试。

编译过程会将源代码转换为可执行文件,检查并修复代码中的错误和问题。

调试过程是为了定位并解决代码中的BUG(程序错误),可以通过逐步执行、设置断点和查看变量值等方式进行。

C语言实现图形界面登陆窗口

C语言实现图形界面登陆窗口

纯C语言实现图形界面登陆窗口一下是界面图:编程工具是:VC6.0请根据个人需要对源代码进行修改使用,图片放在工程文件夹中。

新建时应该将文件后缀设置为.cpp以下是程序灯源代码:#include<graphics.h>#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<String.h>#include<windows.h>#define LEN_A 20//账户长度#define LEN_P 10//密码长度typedef struct Account{char name[20];long int password;}InAccount;typedef struct inputAPword{InAccount account;int flag;}InputAPword;void inputbox(void);void cursor(void);void cursor2(void);void name(void);int MouseEvent(IMAGE);InputAPword menu2(void){initgraph(640,480);//初始化图形界面IMAGE Img1;//声明一个IMAGE变量IMAGE Img2(640,480);//声明一个IMAGE变量char input1[LEN_A];//用于接收输入的字符串char input2[LEN_P];//用于接收输入的字符串int j;InputAPword account;loadimage(&Img1,_T("girl4.bmp"));//加载图片SetWorkingImage(&Img1);//设置当前绘图设备为Img1setlinestyle(PS_SOLID, NULL, 2);//设置线的样式setfont(64,0,"华文隶书");//设置字体的样式和大小settextcolor(RGB(134,0,255));//设置字体的颜色setlinecolor(RGB(16,16,16));//设置线的颜色setbkmode(TRANSPARENT);//设置字体的背景为透明outtextxy(50,50,_T("A 用户登录"));//显示汉字settextcolor(RGB(0,0,0));//设置字体的颜色rectangle(50,150,350,340);//画矩形框rectangle(254,515,302,585);//画一个矩形框fillrectangle(100,280,173,315);//登录框fillrectangle(223,280,296,315);//取消框SetWorkingImage();//恢复当前绘图设备为默认设备putimage(0,0,&Img1);//显示图片do{name();//显示文字信息setbkmode(OPAQUE);//设置字体背景为默认setbkcolor(RGB(255,255,255));cursor();//显示输入框以及闪烁的光标for(j=0;LEN_A;j++){//限制输入,最多允许输入LNE位数据input1[j]=getch();//读取键盘输入的字符并存入数组outtextxy(161+8*j,193,input1[j]);//将字符显示在图片上if(input1[j]==8){//按删除键时的操作input1[j-1]=0;//字符数组内容删除一位outtextxy(161+8*j,193," ");//将字符遮掩outtextxy(161+8*(j-1),193," ");//将字符遮掩j -=2;//数组坐标后退两个if(j<=-1){//当回退到头时的处理input1[0]='\0';//对数组进行标记break;//退出本次输入}continue;}else if(input1[j]==13){//按回车键时的处理input1[j]='\0';//将数组的最后一个数据标记为'\0'if(j==0){//无任何输入,且按下回车时的处理outtextxy(161+8*j,193," ");//将回车显示的字符遮掩outtextxy(161+8*(j-1),193," ");//将回车显示的字符遮掩input1[0]='\0';//对数组进行进行标记}break;//退出本次输入}}setbkmode(OPAQUE);//设置字体背景为默认setbkcolor(RGB(255,255,255));cursor2();//光标聚到下一个输入框的开始位置for(j=0;j<LEN_P;j++){//密码输入input2[j]=getch();//获取从键盘输入的字符outtextxy(161+8*j,234,"*");//以*号显示,起到遮掩密码的作用if(input2[j]==8){//按下删除键时的处理input2[j-1]=0;//对数组进行处理outtextxy(161+8*j,234," ");//对需要进行删除处理的字符进行遮掩outtextxy(161+8*(j-1),234,_T(" "));//对需要删除进行处理的字符进行遮掩j-=2;//对数组进行处理if(j<=-1){//当删除到头时进行的操作input2[0]='\0';//对数组进行标记break;//退出本次输入}continue;}else if(input2[j]==13){//按下回车时的操作outtextxy(161+8*j,234," ");input2[j]='\0';//将数组的最后一位标记为‘\0’if(j==0){//无任何操作,直接进行回车输入时的操作outtextxy(161+8*j,234," ");//对输入回车时产生的字符进行遮掩outtextxy(161+8*(j-1),234,_T(" "));//对输入回车时产生的字符进行遮掩input2[0]='\0';//对数组进行标记}break;//结束本次输入}}getimage(&Img2,0,0,640,480);//保存当前显示的界面}while((input1[0]=='\0')&&(input2[0]=='\0'));//当第一个或第二个框有一个未输入时则继续循环输入switch(MouseEvent(Img2)){case 1:{account.flag=1;strcpy(,input1);//将输入的字符存入结构体account.account.password=atol(input2);//将输入的密码存入结构体break;}case 2:{account.flag=2;}}return account;closegraph();}void name(void)//显示文字信息函数{setfont(25,0,"宋体");//设置字体的大小和样式setbkmode(TRANSPARENT);settextcolor(RGB(0,0,0));outtextxy(90,190,_T("账号"));//显示汉字outtextxy(90,233,_T("密码"));outtextxy(111,285,_T("登录"));outtextxy(234,285,_T("取消"));setfont(18,0,"宋体");//setbkmode(OPAQUE);//设置字体背景为默认}void cursor(void)//闪烁光标的作用{while(1){//如果键盘没有进行输入这循环闪烁inputbox();if(kbhit()){//当键盘有反应时kbhit()会返回一个非零值break;//退出闪烁}Sleep(300);//延时setlinestyle(PS_SOLID,NULL,2);//设置线的样式为PS_SOLID,宽度为2line(161,194,162,210);//光标的描绘Sleep(300);//延时}}void cursor2(void)//第二个光标{do{Sleep(30);//延时setlinestyle(PS_SOLID,NULL,2);//设置字体样式line(162,234,163,251);//光标的描绘Sleep(30);//延时}while(!kbhit());//当键盘有反应时kbhit()会返回一个非零值}void inputbox(void)//描绘两个输入框{int i;for(i=0;i<2;i++){bar(150,188+41*i,300,216+41*i);//账户栏和密码输入栏setcolor(RGB(0,0,0));rectangle(150,188+41*i,300,216+41*i);}}int MouseEvent(IMAGE Img)//鼠标判断{MOUSEMSG m;//声明一个鼠标变量int value=0;//返回值while(!value){m=GetMouseMsg();//获取鼠标的信息switch(m.uMsg){case WM_MOUSEMOVE://当鼠标又移动时的信息处理{if((m.x>=100&&m.x<=173)&&(m.y>=280&&m.y<=315)){//对鼠标的X,Y 坐标进行判断SetWorkingImage(&Img);//设置当前的绘图设备setlinestyle(PS_SOLID,NULL,2);setlinecolor(RGB(252,15,0));//线的颜色,红色settextcolor(RGB(252,15,0));//字体颜色,红色setfont(25,0,"宋体");//设置字体的大小和样式setbkmode(TRANSPARENT);fillrectangle(100,280,173,315);//登录框outtextxy(111,285,_T("登录"));SetWorkingImage();//恢复当前的绘图设备putimage(0,0,&Img);//显示当前的图画}else if((m.x>=223&&m.x<=296)&&(m.y>=280&&m.y<=315)){//对鼠标的X,Y坐标进行判断SetWorkingImage(&Img);//设置当前的绘图设备setlinestyle(PS_SOLID,NULL,2);setlinecolor(RGB(252,15,0));//线的颜色,红色settextcolor(RGB(252,15,0));//字体颜色,红色setfont(25,0,"宋体");//设置字体的大小和样式setbkmode(TRANSPARENT);fillrectangle(223,280,296,315);//取消框outtextxy(234,285,_T("取消"));SetWorkingImage();//恢复当前的绘图设备putimage(0,0,&Img);//显示当前的图画}else{SetWorkingImage(&Img);//设置当前的绘图设备setlinecolor(RGB(134,0,255));//设置线的颜色settextcolor(RGB(134,0,255));//字体颜色,黑色fillrectangle(100,280,173,315);//登录框fillrectangle(223,280,296,315);//取消框setbkcolor(RGB(255,255,255));///字体背景色,白色setfont(25,0,"宋体");//设置字体的大小和样式outtextxy(111,285,_T("登录"));outtextxy(234,285,_T("取消"));SetWorkingImage();//恢复当前绘图设备为默认设备putimage(0,0,&Img);}break;}case WM_LBUTTONDBLCLK://鼠标双击左键时的信息{if((m.x>=100&&m.x<=173)&&(m.y>=280&&m.y<=315)){//登陆按键范围value=1;}else if((m.x>=223&&m.x<=296)&&(m.y>=280&&m.y<=315)){//取消按键范围value=2;}break;}}}return value;//返回值}void main(){long int a;InputAPword account;account = menu2();a = account.account.password;system("cls");printf("这是测试的密码:%ld",a);printf("%s",);getchar();getchar(); }。

C语言中的形界面编程

C语言中的形界面编程

C语言中的形界面编程在计算机编程领域,形界面编程(GUI)是一种以图形化方式来设计和实现用户界面的方法。

C语言作为一种广泛使用的编程语言,也提供了丰富的工具和库来支持形界面编程。

本文将介绍C语言中的形界面编程的基本概念和常用工具,以帮助读者更好地理解和应用此技术。

一、形界面编程概述形界面编程是指使用图形化的方式来设计和操纵用户界面。

通过形界面,用户可以通过鼠标点击、拖拽等操作与程序进行交互,使用户体验更加友好和直观。

在C语言中,我们可以利用特定的库或工具来实现形界面编程,其中最常用的是使用GTK+和Qt库。

二、GTK+库GTK+(GIMP Toolkit)是一种开源的跨平台的GUI工具包,它为C语言程序员提供了丰富的界面设计和开发工具。

GTK+库是基于事件驱动的,可以通过信号与槽机制实现用户界面的交互和响应。

以下是使用GTK+库的基本步骤:1. 引入头文件首先,我们需要在代码中引入GTK+库的头文件,通常是`#include <gtk/gtk.h>`。

2. 创建主窗口使用`gtk_window_new()`函数创建一个主窗口,并设置窗口的属性,如标题、大小等。

3. 添加组件使用各种GTK+提供的控件,比如按钮、标签、文本框等,来设计用户界面。

可以使用`gtk_container_add()`函数将控件添加到主窗口中。

4. 设置事件处理函数对于用户的操作,如点击按钮或关闭窗口,我们需要为相应的事件设置处理函数,以响应用户的操作。

5. 显示窗口最后,使用`gtk_widget_show_all()`函数显示主窗口及其包含的所有控件。

三、Qt库Qt是一个跨平台的应用程序和UI框架,也是一种支持C++编程的形界面开发工具。

它提供了丰富的界面元素和事件处理机制,方便开发者创建各种精美的用户界面。

以下是使用Qt库的基本步骤:1. 引入头文件在代码中引入Qt库的头文件,通常是`#include <QtWidgets>`。

C_C++控制台界面编程

C_C++控制台界面编程
C/C++控制台界面编程 (wyz5@ 整理)
C/C++控制台界面编程
序 资料中一部分来自互联网,作者已无法考证,另一部分来自 MSDN,其余部分为本人(wyz5@) 自己编写并重新整理、修改、增加和补充一些内容,使之更充实、完善,所有程序均在 Visual Studio 2005 SP1 中调试通过(操作系统为 Windows XP SP3),原文很多代码均有语法错误,全部作了更正,部分示例 代码的功能也进行了增加,有些示例代码功能稍多,为使示例更有针对性,在保留其知识点的基础上对代 码进行了精简,最后提供了自己的几个简易的程序示例,以飨读者。 每一个学习 C、C++的人,最先接触到的就是在控制台窗口下进行编程学习,它是一个基于文本模式的 黑黑的窗口,它不涉及到复杂的人机交互编程,是深入学习 C、C++最直接、简单的手段。 早期的开发都使用 Turbo C(简称 TC)进行开发,在 TC 的库中提供了大量的用于控制台界面处理的函 数,时至今日,这些涉及到 C、C++标准之外的界面控制程序已经无法在在 VC 中编译通过了,有时候为了学 习和移植早期的代码,需要将这些函数在 VC 中重新实现,本教程提供了这样的参考。 更多的时候,用户学习编程语言最先接触的是控制台的界面,通过本教程可以深入了解界面相关的操 作,对于 Win32 窗口界面的程序来说,基于控制台窗口的程序也有很多优点,操作简单、几乎不需要书写 与界面相关的代码就能编译并生成可执行文件,这样的程序开发速度非常快,一些对于界面要求不是很高 的小工具用它开发,比花更多的时间去处理窗口程序的界面要划得来。 从 Windows 2000 以后,Windows 操作系统中的控制台已经不再是那个古老的,只能在 Windows 系统划 分的一块内存中模拟运行的 16 位程序了,现在的控制台窗口是一个与窗口程序有着相同特性的特殊窗口程 序,说它特殊是它只能显示字符,而且是命令行的,但它几乎支持窗口程序的所有功能,比如多线程、网 络通信、以及其它的 Windows 程序开发用的技术等,除了涉及到界面的东西以外,它可以完成你想要的所 有功能,当然 Windows 的 API 也可以完全由它来调用。 在众多 C++开发工具中,由于 Microsoft 本身的独特优势,选用 Visual C++已越来越被众多学习者所 接受。显然,现今如果还再把 TC 作为开发环境的话,不仅没有必要,而且也不利于向 Windows 应用程序开 发的过渡。然而,Visual C++的 C++专用库却没有 TC 所支持的文本屏幕(控制台窗口)控制函数(相应的头文 件是 conio.h)。这必然给 C++学习者在文本界面设计和编程上带来诸多不便。要知道,文本界面设计是一 种深入学习 C++、 掌握交互系统的实现方法的最简单的一种手段, 它不像 C++的 Windows 图形界面应用程序, 涉及知识过多。为此,本系列文章讨论在 Visual Studio 开发环境中,如何编写具有美观清晰的控制台窗 口界面的 C++应用程序,并且只介绍输入、输出和界面相关的东西,即只涉及控制台的人机交互方面,其它 方面本文档并不涉及。 当然,控制台的窗口也有自己的缺点,它与窗口界面的程序没有可比性。教程中所有的示例全部可以 用 C 和 C++来实现,教程中的示例为便于学习,尽量采用的是面向过程的 C 语言的结构,部分示例还同时 C++的实现,关于这两种语言的使用,教程中不作过多讲解,这里假设读者已经具备了熟练的 C、C++语言功 底。对于只学习过 C 语言的读者,也不影响从本教程中获取想要的知识,但最后面的几个示例和小程序, 有的用 C++实现的,可能会给您带来不便,见谅,文中如有错误和不足之处,希望各位读者批C++控制台界面编程 (wyz5@ 整理)

vc怎样设置控制台窗口界面

vc怎样设置控制台窗口界面

VC怎样设置控制台窗口界面一、概述所谓控制台应用程序,就是指那些需要与传统DOS操作系统保持某种程序的兼容,同时又不需要为用户提供完善界面的程序。

简单地讲,就是指在Windows环境下运行的DOS程序。

一旦C++控制台应用程序在Windows 9x/NT/2000操作系统中运行后,就会弹出一个窗口。

例如下列过程:单击Visual C++标准工具栏上的“New Text File”按钮,打开一个新的文档窗口。

选择File | Save菜单或按快捷键Ctrl+S或单击标准工具栏的Save 按钮,弹出“保存为”文件对话框。

将文件名为“Hello.cpp” (注意扩展名.cpp 不能省略)。

在文档窗口中输入下列代码:#include<iostream.h>{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中断,且鼠标设备驱动程序由自己安装。

c语言创建窗口代码

c语言创建窗口代码

c语言创建窗口代码
在 C 语言中,你可以使用图形界面库来创建窗口。

下面是一个简单的示例,使用 GTK+ 库创建一个窗口:
```c
#include <gtk/gtk.h>
int main(int argc, char *argv[]) {
// 初始化 GTK+
gtk_init(&argc, &argv);
// 创建一个窗口
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
// 设置窗口标题
gtk_window_set_title(GTK_WINDOW(window), "My Window");
// 显示窗口
gtk_widget_show(window);
// 主事件循环
gtk_main();
return 0;
}
```
上述代码使用了 GTK+ 库来创建一个窗口。

首先,通过调用 `gtk_init()` 初始化GTK+。

然后,使用 `gtk_window_new()` 创建一个顶级窗口。

接下来,使用`gtk_window_set_title()` 函数设置窗口的标题。

最后,使用`gtk_widget_show()` 函数显示窗口。

在主事件循环中,调用 `gtk_main()` 启动 GTK+ 主事件循环,等待用户交互。

请注意,这只是一个简单的示例,你可以根据需要进一步定制窗口的外观和功能。

此外,你需要安装 GTK+ 库,并在编译时链接相关的库文件。

希望这个示例对你有所帮助!如果你有任何其他问题,请随时提问。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

控制台窗口界面编程控制〇、摘要一、概述二、控制台文本窗口的一般控制步骤三、控制台窗口操作四、文本属性操作五、文本输出六、文本操作示例七、滚动和移动八、光标操作九、读取键盘信息十、读取鼠标信息十一、结语补充篇--经典程序(Internet资源)摘要:文本界面的控制台应用程序开发是深入学习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程序。

一旦控制台应用程序在Windows操作系统中运行后,就会弹出一个窗口。

例如下列代码:#include <stdio.h>int main(int argc,char *argv[]){printf("Hello, Console!\n");return 0;}单击小型编译工具栏中的“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 <windows.h>#include <stdio.h>#include <conio.h>int main(void){HANDLE hOut;CONSOLE_SCREEN_BUFFER_INFO bInfo; // 存储窗口信息COORD pos = {0, 0};// 获取标准输出设备句柄hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取窗口信息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();// 向窗口中填充字符以获得清屏的效果FillConsoleOutputCharacter(hOut,' ', bInfo.dwSize.X * bInfo.dwSize.Y, pos, NULL);// 关闭标准输出设备句柄CloseHandle(hOut);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++两套不同的输入输出操作方式,使用时要特别注意。

(三)控制台窗口操作操作用于控制台窗口操作的API函数如下:GetConsoleScreenBufferInfo 获取控制台窗口信息GetConsoleTitle 获取控制台窗口标题ScrollConsoleScreenBuffer 在缓冲区中移动数据块SetConsoleScreenBufferSize 更改指定缓冲区大小SetConsoleTitle 设置控制台窗口标题SetConsoleWindowInfo 设置控制台窗口信息此外,还有窗口字体、显示模式等控制函数,这里不再细说。

下列举一个示例,程序如下:#include <windows.h>#include <stdio.h>#include <conio.h>int main(void){char strTitle[255];CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口缓冲区信息COORD size = {80, 25};HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设备句柄GetConsoleScreenBufferInfo(hOut, &bInfo ); // 获取窗口缓冲区信息GetConsoleTitle(strTitle, 255); // 获取窗口标题printf("当前窗口标题是:\n%s\n", strTitle);_getch();SetConsoleTitle("控制台窗口操作"); // 设置窗口标题GetConsoleTitle(strTitle, 255);printf("当前窗口标题是:\n%s\n", strTitle);_getch();SetConsoleScreenBufferSize(hOut,size); // 重新设置缓冲区大小_getch();SMALL_RECT rc = {0,0, 80-1, 25-1}; // 重置窗口位置和大小SetConsoleWindowInfo(hOut,true ,&rc);CloseHandle(hOut); // 关闭标准输出设备句柄return 0;}需要说明的是,控制台窗口的原点坐标是(0, 0),而最大的坐标是缓冲区大小减1,例如当缓冲区大小为80*25时,其最大的坐标是(79, 24)。

(四)文本属性操作操作与DOS字符相似,控制台窗口中的字符也有相应的属性。

这些属性分为:文本的前景色、背景色和双字节字符集(DBCS)属性三种。

事实上,我们最关心是文本颜色,这样可以构造出美观的界面。

颜色属性都是一些预定义标识:FOREGROUND_BLUE 蓝色FOREGROUND_GREEN 绿色FOREGROUND_RED 红色FOREGROUND_INTENSITY 加强BACKGROUND_BLUE 蓝色背景BACKGROUND_GREEN 绿色背景BACKGROUND_RED 红色背景BACKGROUND_INTENSITY 背景色加强COMMON_LVB_REVERSE_VIDEO 反色与文本属性相关的主要函数有: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中得到。

相关文档
最新文档