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+ 库,并在编译时链接相关的库文件。
希望这个示例对你有所帮助!如果你有任何其他问题,请随时提问。
用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语言
要控制控制台的宽度,我们可以使用控制台窗口大小的API函数。
其中,GetConsoleScreenBufferInfo函数和SetConsoleScreenBufferSize函数可以用来获取和设置控制台窗口的大小。
下面是一个简单的示例代码,它使用这些函数控制控制台的宽度,以便在显示文本时显示不同的格式:
```
#include <stdio.h>
#include <windows.h>
int main() {
// 获取控制台窗口信息
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO info;
GetConsoleScreenBufferInfo(hConsole, &info);
// 设置控制台窗口宽度为40列
int width = 40;
info.dwSize.X = width;
SetConsoleScreenBufferSize(hConsole, info.dwSize);
// 输出一些文本来测试宽度
printf("这是一个测试文本,宽度为%d列。
\n", width);
printf("这是另一个测试文本,宽度也为%d列。
\n", width);
return 0;
}
```
当我们运行这个程序时,它将控制台窗口宽度设置为40列,并输出两行文本,每行文本的宽度为40列。
你可以尝试更改width变量的值以测试不同的宽度效果。
用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语⾔图形界⾯的编程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语言实现图形界面的方法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(控制台)编程详解前⾔:控制台⽂本窗⼝的控制是基于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语言控制台界面编程(修正版)
控制台窗口界面编程控制〇、摘要一、概述二、控制台文本窗口的一般控制步骤三、控制台窗口操作四、文本属性操作五、文本输出六、文本操作示例七、滚动和移动八、光标操作九、读取键盘信息十、读取鼠标信息十一、结语补充篇--经典程序(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语言API编写窗口界面和button
C语⾔API编写窗⼝界⾯和button近期有个同学的程序须要⽤对话框的⽅式实现,但前⾯都是通过⿊框形式完毕的,⽼师突然让添加⼀个界⾯,本来准备採⽤MFC完毕的,但后来⼀想,该程序核⼼东西是体如今它的算法上,控制台的程序并不是不好.转念⼀想,假设使⽤MFC这个⽅案好像须要再倒腾⼀遍,想到了⼤⼀在"C语⾔能⼲⼤事"中的东西,所以就准备採⽤这种形式直接完毕,投机取巧的⽅法.主要是通过调⽤Windows API界⾯的CreateWindows函数完毕,同⼀时候也能创建button,把參数设置为button,假设想响应该button,仅仅需在回调函数中添加消息WM_COMMAND推断就可以.代码例如以下:#include<windows.h>#include<stdio.h>//声明回调函数LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;//主函数程序⼊⼝int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow){static TCHAR szAppName[] = TEXT ("HelloWin") ;HWND hwnd ; //⽤来保存成功创建窗⼝后返回的句柄MSG msg ; //定义消息结构体变量WNDCLASS wndclass ; //窗⼝类wndclass.style = CS_HREDRAW | CS_VREDRAW ; //指定窗⼝风格wndclass.lpfnWndProc = WndProc ; ////函数指针,指向处理窗⼝消息的函数⼊⼝wndclass.cbClsExtra = 0 ; //结构体后附加的字节数,⼀般总为0wndclass.cbWndExtra = 0 ; //窗⼝实例附加的字节数,⼀般总为0wndclass.hInstance = hInstance ; //模块句柄wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; //图标句柄任务栏显⽰的图标wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; //光标句柄wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //背景颜⾊COLOR_BACKGROUNDwndclass.lpszMenuName = NULL ; //菜单名的字符串wndclass.lpszClassName = szAppName ; //⾃⼰定义类名,不要与其它类名反复if (!RegisterClass (&wndclass)){MessageBox (NULL, TEXT ("注冊类失败!"), szAppName, MB_ICONERROR) ;return 0 ;}int x =((GetSystemMetrics(SM_CXSCREEN)/2)-200); //x居中int y =((GetSystemMetrics(SM_CYSCREEN)/2)-200); //y居中//创建窗⼝APIhwnd = CreateWindow(szAppName,TEXT("毕业设计"),WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,x,y,400,400,NULL,NULL,hInstance,NULL);//显⽰窗⼝的API 传⼊须要显⽰的窗⼝句柄和显⽰⽅式ShowWindow(hwnd,iCmdShow);//刷新窗⼝的APIUpdateWindow(hwnd);//从系统的应⽤程序线程消息队列中取得⼀个消息while(GetMessage(&msg,NULL,0,0) > 0){DispatchMessage(&msg);}return msg.wParam;}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){HDC hdc; //句柄PAINTSTRUCT ps;RECT rect; //矩形HINSTANCE hInstance; //窗⼝实例static HWND hwndButton[2]; //button句柄switch (message){case WM_CREATE: //创建button{hInstance = ((LPCREATESTRUCT)lParam)->hInstance;//button1hwndButton[0] = CreateWindow("BUTTON","训练",WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,10,10,100,100,hwnd,NULL,(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);//button2hwndButton[1] = CreateWindow("BUTTON","获取",WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,10,250,100,100,hwnd,NULL,(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);return 0;}case WM_PAINT: //绘制⽂字hdc = BeginPaint(hwnd,&ps);GetClientRect(hwnd,&rect);DrawText(hdc,TEXT("By:Eastmount CSDN制作"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hwnd,&ps);return 0;case WM_COMMAND: //响应button消息if((HWND)lParam == hwndButton[0]){MessageBox(NULL,TEXT("是否训练图⽚?"),TEXT("提⽰"),MB_YESNO|MB_ICONQUESTION);}if((HWND)lParam == hwndButton[1]){MessageBox(NULL,TEXT("是否获取图⽚?"),TEXT("提⽰"),MB_YESNO|MB_ICONQUESTION);}return 0;case WM_CLOSE: //关闭if(IDYES==MessageBox(hwnd,"是否关闭程序?","提⽰",MB_YESNO|MB_ICONQUESTION)){DestroyWindow (hwnd);}return 0;case WM_DESTROY: //退出程序PostQuitMessage (0) ;return 0 ;}return DefWindowProc (hwnd, message, wParam, lParam) ;}程序执⾏结果例如以下图所看到的:当中主要涉及到的函数原型例如以下所看到的://创建窗⼝hwnd = CreateWindow (szClassName, /* Classname */"Windows App", /* Title Text */WS_OVERLAPPEDWINDOW, /* default window */CW_USEDEFAULT, /* Windows decides the position */CW_USEDEFAULT, /* where the window ends up on the screen */544, /* The programs width */375, /* and height in pixels */HWND_DESKTOP, /* The window is a child-window to desktop */NULL, /* No menu */hThisInstance, /* Program Instance handler */NULL /* No Window Creation data */);//创建按钮hwndButton = CreateWindow("BUTTON", // predefined class"OK", // button textWS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, // styles10, // starting x position10, // starting y position100, // button width100, // button heighthwnd, // parent windowNULL, // No menu(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),NULL // pointer not needed);最后,写这篇⽂章主要是怀念⾃⼰⼤⼀时的⽣活,从⼀个什么都不知道的孩⼦,通过学习C语⾔,C语⾔能⼲⼤事開始接触编程.同⼀时候,我觉得这个程序也是很还的⼊门程序,希望刚接触程序的同学也能够看看,编编⾃⼰感兴趣的程序、写写博客、AC题⽬、编写游戏、聊天软件、移动开发,能从程序和⽣活中找到⼀些让⾃⼰⼼灵美妙的东西.(By:Eastmount 2014-5-25 夜2点半原创CSDN)。
《用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语言中,可以使用多种方式实现菜单界面,比如利用循环和条件语句结合的方式,或者使用函数和结构体来组织菜单功能。
下面将分别介绍两种实现方式。
一、使用循环和条件语句结合的方式实现菜单界面。
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语言如何开发桌面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桌面应用程序开发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(程序错误),可以通过逐步执行、设置断点和查看变量值等方式进行。
CSharp窗体编程
项 目 目 录 还 自 动 包 含 了 一 个 存 放 项 目 属 性 的 Proporties 目 录 , 包 含 如 下 文 件 : Settings.settings(项目设置,XML 文件)、Resources.resx(资源)、AssemblyInfo.cs(程序集 代码)和 Resources.Designer.cs(资源设计代码)。
Component
{ static class Program
Control
{ /// <summary> /// 应用程序的主入口点。
ScrollableControl ContainerControl
/// </summary> [STAThread]
Form
static void Main() {
MarshalByRefObject
ColorDialog FontDialog
Pen Component
CommonDialog
PrintDialog FileDialog
HatchBrush TextureBrush SolidBrush Control Timer ToolStripItem OpenFileDialog
的重载版为:public static void Run (Form mainForm) Exit 或 ExitThread ——停止消息循环。常用的重载版为:public static void Exit () EnableVisualStyles ——此方法为应用程序启用可视样式。如果控件和操作系统支
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++控制台界面编程
序 资料中一部分来自互联网,作者已无法考证,另一部分来自 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怎样设置控制台窗口界面一、概述所谓控制台应用程序,就是指那些需要与传统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语⾔时,实验课上写的计算器功能,挺有意思。
所以在此分享给学C语⾔的学弟学妹,记得收藏保留!计算器简单版本计算器,主要实现的是简单两个数的加法,减法,乘法,除法,求余功能。
⽤户可以在主菜单选择需要计算的功能,然后根据⽤户输⼊的数字,进⾏计算,输出结果。
⾸先,我们定义五个⽅法,实现两个数的加法,减法,乘法,除法,求余功能。
代码如下:// 加法float add(float a, float b) {return a + b;}// 减法float sub(float a, float b) {return a - b;}// 乘法float mul(float a, float b) {return a * b;}// 除法float mod(float a, float b) {return a / b;}// 求余int com(int a, int b) {return a % b;}然后定义⼀个打印主菜单界⾯的函数,使⽤简介美观的菜单界⾯,供⽤户选择要计算的功能,代码如下:// 打印主功能菜单void printMenu() {// 清屏// system("cls");printf("|----------------------- 计算器 -----------------------|\n");printf("| |\n");printf("| By -- 陈⽪的JavaLib |\n");printf("| |\n");printf("|---------------------- 1:加法 -----------------------|\n");printf("|---------------------- 2:减法 -----------------------|\n");printf("|---------------------- 3:乘法 -----------------------|\n");printf("|---------------------- 4:除法 -----------------------|\n");printf("|---------------------- 5:求余 -----------------------|\n");printf("|---------------------- 6:退出 -----------------------|\n");printf("| |\n");printf("|----------------------- 计算器 -----------------------|\n");}最后,我们在主函数 main 中,定义⼀个 while 循环代码块,不断读取⽤户输⼊的内容,进⾏数字计算,代码如下:int main() {// 选择的功能int select = 0;// 定义算术的两个数float a, b;while (select != 6){select = 0;// 打印主菜单printMenu();// 只允许选择菜单栏内的数字,不是则重新选择while (select < 1 || select > 6) {printf("请输⼊菜单功能(1-6):");scanf("%d", &select);}if (6 == select) {printf("\n|----------------- 欢迎使⽤计算器!再见!-----------------|\n"); return 0;}printf("\n请输⼊两个数(⽤空格隔开两个数):");scanf("%f %f", &a, &b);switch (select) {case 1:printf("%f+%f=%f\n\n", a, b, add(a, b));break;case 2:printf("%f-%f=%f\n\n", a, b, sub(a, b));break;case 3:printf("%f*%f=%f\n\n", a, b, mul(a, b));break;case 4:printf("%f/%f=%f\n\n", a, b, mod(a, b));break;case 5:printf("%f/%f=%d\n\n", a, b, com((int)a, (int)b));break;case 6:default:break;}}}下⾯我们演⽰⼏个例⼦,能更加直观体验计算器的功能:菜单功能选择错误,会提⽰重新选择加法除法退出简单版本计算器,完整代码如下:#include <stdio.h>#include <stdlib.h>// 加法float add(float a, float b) {return a + b;}// 减法float sub(float a, float b) {return a - b;}// 乘法float mul(float a, float b) {return a * b;}// 除法float mod(float a, float b) {return a / b;}// 求余int com(int a, int b) {return a % b;}// 打印主功能菜单void printMenu() {// 清屏// system("cls");printf("|----------------------- 计算器 -----------------------|\n");printf("| |\n");printf("| By -- 陈⽪的JavaLib |\n"); printf("| |\n");printf("|---------------------- 1:加法 -----------------------|\n");printf("|---------------------- 2:减法 -----------------------|\n");printf("|---------------------- 3:乘法 -----------------------|\n");printf("|---------------------- 4:除法 -----------------------|\n");printf("|---------------------- 5:求余 -----------------------|\n");printf("|---------------------- 6:退出 -----------------------|\n");printf("| |\n");printf("|----------------------- 计算器 -----------------------|\n");}/*** 简单版本计算器功能 By -- 陈⽪的JavaLib* @return*/int main() {// 选择的功能int select = 0;// 定义算术的两个数float a, b;while (select != 6){select = 0;// 打印主菜单printMenu();// 只允许选择菜单栏内的数字,不是则重新选择while (select < 1 || select > 6) {printf("请输⼊菜单功能(1-6):");scanf("%d", &select);}if (6 == select) {printf("\n|----------------- 欢迎使⽤计算器!再见!-----------------|\n");return 0;}printf("\n请输⼊两个数(⽤空格隔开两个数):");scanf("%f %f", &a, &b);switch (select) {case 1:printf("%f+%f=%f\n\n", a, b, add(a, b));break;case 2:printf("%f-%f=%f\n\n", a, b, sub(a, b));break;case 3:printf("%f*%f=%f\n\n", a, b, mul(a, b));break;case 4:printf("%f/%f=%f\n\n", a, b, mod(a, b));break;case 5:printf("%f/%f=%d\n\n", a, b, com((int)a, (int)b));break;case 6:default:break;}}}总结在⼤学期间,如果是计算机类的专业,⼀般都会学习 C 语⾔,作为编程⼊门语⾔,⼤家⼀定要学习好此门语⾔,⽽且如果学好了,其实学习其他编程语⾔就很容器上⼿的,不同语⾔其实⼤同⼩异,只要你编程思维提升了,基础语法掌握了,才能学习更加深⼊的知识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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中得到。