怎么用c语言做一个界面?
c语言制作UI界面需要相关的UI库
如windows操作系统本身就提供了UI的接口
一个简单的示例代码如下
#include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR line,int cmd){ static TCHAR AppName[]=TEXT("99"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style=CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc=WndProc; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hInstance=hinstance; wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName=NULL; wndclass.lpszClassName=AppName; if(!RegisterClass(&wndclass)) { MessageBox(NULL,TEXT("This program requires Windows NT!"),AppName,MB_ICONERROR); return 0; } hwnd=CreateWindow(AppName,TEXT("九九乘法口诀表"),\ WS_OVERLAPPEDWINDOW,\ CW_USEDEFAULT,\ CW_USEDEFAULT,\ CW_USEDEFAULT,\ CW_USEDEFAULT,\ NULL,\ NULL,\ hinstance,\ NULL); ShowWindow(hwnd,cmd); UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam;}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam){ HDC hdc; PAINTSTRUCT ps; RECT rect; static x,y; int i,j; int len; TCHAR buf[50]; TEXTMETRIC tm; switch(message) { case WM_CREATE: hdc=GetDC(hwnd); GetTextMetrics(hdc,&tm); x=tm.tmAveCharWidth; y=tm.tmHeight+tm.tmExternalLeading; ReleaseDC(hwnd,hdc); //MessageBox(NULL,TEXT("Create Successed!"),TEXT("Successed"),MB_OK); //PlaySound(TEXT("hello.wav"),NULL,SND_FILENAME|SND_ASYNC); return 0; case WM_PAINT: hdc=BeginPaint(hwnd,&ps); GetClientRect(hwnd,&rect); //DrawText(hdc,TEXT("Hello World!"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); //TextOut(hdc,rect.right/2-(strlen("Hello World!")/2)*x,rect.bottom/2-y/2,TEXT("Hello World!"),12); for(i=1;i!=10;++i) { for(j=1;j!=i+1;++j) { len=wsprintf(buf,TEXT("%dx%d=%-4d"),j,i,i*j); TextOut(hdc,j*len*x,i*y,buf,len); } } EndPaint(hwnd,&ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,message,wparam,lparam);}上面是一个打印windows下拥有窗口界面的九九乘法口诀表的c语言程序代码
同样的c语言也会有其它的UI库
比如Gtk,Gtk是可移植的UI库
可以使用它在Linux、windows包括mac等等操作系统上做ui程序设计
一个简单的示例代码如下
#include int main(int argc,char **argv){ GtkWidget *win; GtkWidget *label; int i,j; GString *str; gtk_init(&argc,&argv); win=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(win),GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(win),"delete-event",G_CALLBACK(gtk_main_quit),NULL); str=g_string_new(NULL); for(i=1;i str); gtk_container_add(GTK_CONTAINER(win),label); gtk_widget_show_all(win); gtk_main(); g_string_free(str,TRUE); return 0;}
代码
#include
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ) ; //声明用来处理消息的函数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )
{
static TCHAR szAppName[] = TEXT("MyWindow") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ; //声明一个窗口类对象
//以下为窗口类对象wndclass的属性
wndclass.style = CS_HREDRAW | CS_VREDRAW ; //窗口样式
wndclass.lpszClassName = szAppName ; //窗口类名
wndclass.lpszMenuName = NULL ; //窗口菜单:无
wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH) ; //窗口背景颜色
wndclass.lpfnWndProc = WndProc ; //窗口处理函数
wndclass.cbWndExtra = 0 ; //窗口实例扩展:无
wndclass.cbClsExtra = 0 ; //窗口类扩展:无
wndclass.hInstance = hInstance ; //窗口实例句柄
wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION ) ; //窗口最小化图标:使用缺省图标
wndclass.hCursor = LoadCursor( NULL, IDC_ARROW ) ; //窗口采用箭头光标
if( !RegisterClass( &wndclass ) )
{ //注册窗口类, 如果注册失败弹出错误提示
MessageBox( NULL, TEXT("窗口注册失败!"), TEXT("错误"), MB_OK | MB_ICONERROR ) ;
return 0 ;
}
hwnd = CreateWindow( //创建窗口
szAppName, //窗口类名
TEXT("我的窗口"), //窗口标题
WS_OVERLAPPEDWINDOW, //窗口的风格
CW_USEDEFAULT, //窗口初始显示位置x:使用缺省值
CW_USEDEFAULT, //窗口初始显示位置y:使用缺省值
CW_USEDEFAULT, //窗口的宽度:使用缺省值
CW_USEDEFAULT, //窗口的高度:使用缺省值
NULL, //父窗口:无
NULL, //子菜单:无
hInstance, //该窗口应用程序的实例句柄
NULL //
) ;
ShowWindow( hwnd, iCmdShow ) ; //显示窗口
UpdateWindow( hwnd ) ; //更新窗口
while( GetMessage( &msg, NULL, 0, 0 ) ) //从消息队列中获取消息
{
TranslateMessage( &msg ) ; //将虚拟键消息转换为字符消息
DispatchMessage( &msg ) ; //分发到回调函数(过程函数)
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
HDC hdc ; //设备环境句柄
PAINTSTRUCT ps ; //绘制结构
RECT rect; //矩形结构
switch( message ) //处理得到的消息
{
case WM_CREATE: //窗口创建完成时发来的消息
MessageBox( hwnd, TEXT("窗口已创建完成!"), TEXT("我的窗口"), MB_OK | MB_ICONINFORMATION ) ;
return 0;
case WM_PAINT: //处理窗口区域无效时发来的消息
hdc = BeginPaint( hwnd, &ps ) ;
GetClientRect( hwnd, &rect ) ;
DrawText( hdc, TEXT( "Hello, 卫班科技!" ), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER ) ;
EndPaint( hwnd, &ps ) ;
return 0 ;
case WM_LBUTTONDOWN: //处理鼠标左键被按下的消息
MessageBox( hwnd, TEXT("鼠标左键被按下。"), TEXT("单击"), MB_OK | MB_ICONINFORMATION ) ;
return 0;
case WM_DESTROY: //处理窗口关闭时的消息
MessageBox( hwnd, TEXT("关闭程序!"), TEXT("结束"), MB_OK | MB_ICONINFORMATION ) ;
PostQuitMessage( 0 ) ;
return 0;
}
return DefWindowProc( hwnd, message, wParam, lParam ) ; //DefWindowProc处理我们自定义的消息处理函数没有处理到的消息
}
空窗口:
#include <windows.h>
/* 所有的窗口输出到这里去 */
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
switch(Message) {
/* 停止后,告诉主线程停止 */
case WM_DESTROY: {
PostQuitMessage(0);
break;
}
/* 所有其他消息都使用默认程序处理 */
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}
/* Win32 GUI程序的主要功能:从这里开始执行 */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wc; /* 窗口的属性结构 */
HWND hwnd; /* "句柄" 一个窗口的标识符 */
MSG Msg; /* 所有消息的临时位置 */
/* 修改结构和设置的东西 */
memset(&wc,0,sizeof(wc));
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc; /* 发送消息的地方 */
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
/* 白色,COLOR_WINDOW是系统定义的颜色值,其数值是5 */
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = "WindowClass";
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* 载入一个标准图标 */
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); /* 使用名称“A”来作为该项目图标 */
if(!RegisterClassEx(&wc)) {
MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Caption",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, /* x */
CW_USEDEFAULT, /* y */
640, /* 宽度 */
480, /* 高度 */
NULL,NULL,hInstance,NULL);
if(hwnd == NULL) {
MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
/*
所有的输入处理和发送到窗口过程。
注意,这个块代码流,直到它接收到的东西,
所以回路不会产生不合理的高CPU使用率。
*/
while(GetMessage(&Msg, NULL, 0, 0) > 0) /* 如果没有收到任何错误…*/
{
TranslateMessage(&Msg); /* 如果存在翻译关键码字符*/
DispatchMessage(&Msg); /* 发送它到WndProc */
}
return Msg.wParam;
}
C 语言,就像他的名字一样,他就是一门计算机编程语言;
要做界面,需要调用绘图函数,而绘图函数有很多种,Windows 的 GDI 和 GDI+ 或者 Direct2D,Linux 下的 OpenGL,移动设备上的 XNA ,都可以;
MFC 是微软为咱们创建 Windows 窗体程序而设计好的开发包,可以提高开发效率,以面向对象的方式思考和设计程序,学习这个,需要有 Windows API 基础;
至于 API,在 Windows 下面,就是指 Win32 API 了,就是 32 位 Windows 操作系统的应用程序编程接口,是 Windows 系统提供给开发者的底层功能;
这些都不是一两句话可以概括的,需要自己多点去接触,才会有自己的心得;
最后一条比喻不是很恰当,面向对象拆开来,可以是一堆 API,也可以是单纯的一堆 C 语言句子,当然,也可以是一堆嵌入式汇编语句,所以没办法进行比喻;
通过调用API来创建界面:
#include<windows.h>
int main()
{
MessageBox(NULL,"Hello World!","C图形程序",MB_OK);
return 0;
}
linux下通过调用图形库来创建界面。
呵呵,楼主和我当初一样的迷惑。
我当初啃C语言的时候,也是想用C语言做界面出来,走了很多冤枉路,这里希望能给楼主一些提示。
如果你想用“纯”C来做界面的话,那么我会很肯定的告诉你,很难。你所有的操作都要调用API,包括每个按钮的位置、大小,框的位置、大小等等都是通过计算得出来的。这样一来开发的效率是可想而知的。
当然,也有专门做界面的,程序用C语言来写。比如:QT。具体的楼主可以去了解了解。
如果你想感受一下C语言的“乐趣”的话,在Win32中写一下程序:
#include <windows.h>
void main()
{
MessageBox(NULL," Hello World!","我的第一个窗口程序",MB_OK);
//这里的MessageBox函数,就是API函数,函数的意思是调用一个信息框
}
界面只是一个和用户交互的窗口,比如说在MFC中,界面和程序之间数据传递的方式就是通过UpDate()这个函数,UpDate(FALSE);是把变量数据传给界面,UpDate(TRUE)是把界面数据传给变量。当然,前提是需要它们之间关联一下。这么一说楼主估计就明白界面的用处了吧。
MFC是用C++开发的,C++和C上还是有很大的差异的。直接入门会有很大的难度。建议楼主可以先看看C++的书。了解下,什么是类,什么是容器,什么是重载,什么是构造,什么是析构,什么是面向对象。这也不是一句话两句话能讲完的。
我给楼主些意见:
一:想玩界面的话,就用QT写,或者先用其它简单语言(VB、或国产易语言。PS:易语言实质上就是C++的封装,不过很多功能都打包了,用起来比MFC简单的多。)。
二:如果你想更深一步做软件,可以选择学习C++,然后学MFC
三:C语言很强大,是其它编程易语言无法超越的(个人观点)。你前面的说C语言学的很好,我觉得你话撩的有点早。(这个观点当你水平从菜鸟上升一两个等级时候你就会明白)
四:多做项目。(PS:自己想做什么软件,就着手做,不要把要求定的太高,比你水平高一点的软件,做项目是上升最快的方法之一)
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
界面只是一个和用户交互的窗口,比如说在MFC中,界面和程序之间数据传递的方式就是通过UpDate()这个函数,UpDate(FALSE);是把变量数据传给界面,UpDate(TRUE)是把界面数据传给变量。当然,前提是需要它们之间关联一下。这么一说楼主估计就明白界面的用处了吧。
MFC是用C++开发的,C++和C上还是有很大的差异的。直接入门会有很大的难度。建议楼主可以先看看C++的书。了解下,什么是类,什么是容器,什么是重载,什么是构造,什么是析构,什么是面向对象。这也不是一句话两句话能讲完的。
一:想玩界面的话,就用QT写,或者先用其它简单语言(VB、或国产易语言。PS:易语言实质上就是C++的封装,不过很多功能都打包了,用起来比MFC简单的多。)。
二:如果你想更深一步做软件,可以选择学习C++,然后学MFC
三:C语言很强大,是其它编程易语言无法超越的(个人观点)。你前面的说C语言学的很好,我觉得你话撩的有点早。(这个观点当你水平从菜鸟上升一两个等级时候你就会明白)
四:多做项目。
如何用C语言实现上下界?
cout<<“所有玫瑰花数:”getRoseNum(lower,upper);}voidgetRoseNum(intlower,intupper){if((lower<1000)||(upper>9999)){cout<<“上下界错误!”<<endl;return;}for(inti=lower;i<=upper;i++){if(isRoseNum(i))。注意事项:C语言是普适性最强的一种计算机程序编辑语言,它不仅可以...
怎么用c语言做一个界面?
Message, wParam, lParam);}return 0;}\/* Win32 GUI程序的主要功能:从这里开始执行 *\/int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {WNDCLASSEX wc; \/* 窗口的属性结构 *\/HWND hwnd; \/* "句柄" 一个窗口的标识符 *\/MSG Msg; \/* 所有消...
怎么用c语言做一个界面
一:想玩界面的话,就用QT写,或者先用其它简单语言(VB、或国产易语言。PS:易语言实质上就是C++的封装,不过很多功能都打包了,用起来比MFC简单的多。)。二:如果你想更深一步做软件,可以选择学习C++,然后学MFC 三:C语言很强大,是其它编程易语言无法超越的(个人观点)。你前面的说C语言学...
如何用c语言设计界面?
整体来讲, 用C语言实现图形化需要API函数, 在windows.h中声明.但是它和C语言控制台下编程的区别可以说除了语法一样, 什么东西都不剩下. C库函数能实现的, API函数也全部都能实现, 而且功能更强大. 因此需要记忆的东西也就更多了, 但是绝对不可能把所有的API函数的用法全部知道, 只是知道大概, 一...
怎样用c语言编写一个界面好看的游戏 例如 俄罗斯方块
别说做游戏了,做一个正规的窗口都困难得要死!!!自己看吧。这就是用C语言做的最最简单的一个窗口:include <tchar.h>#include <windows.h>\/* 这个函数由Windows内部函数DispatchMessage()调用 *\/ LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ HDC...
编写的C语言程序,怎样制作一个UI界面?用什么软件好?
如果用C语言在windows下做GUI应用,要看看windows系统编程。这个可以用Windows自己的SDK开发。或者可以用GTK做界面,C的话可以用这个SDK(开发包)。此外还有wxwidget,FLTK等。
想用C语言编写一个有可视化的界面,有按钮,有输入框的程序
可以用MFC做界面,在Visual C++新建》项目》MFC AppWizard(exe)》dialog based》下面都默认,就能建立一个MFC工程。可以添加控件,控件响应的原理与VB中的类似,建议你找本MFC的教材仔细了解其原理
编写的C语言程序,怎样制作一个UI界面?
c语言制作UI界面需要相关的UI库 如windows操作系统本身就提供了UI的接口 一个简单的示例代码如下 include <windows.h>LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR line,int cmd){ static TCHAR AppName[]=TEXT("99"); ...
怎么用c语言实现选择界面
1函数说明编辑函数原型:int bioskey (int cmd)说明:bioskey()的函数原型在bios.h中bioskey()完成直接键盘操作,cmd的值决定执行什么操作。cmd = 0:当cmd是0,bioskey()返回下一个在键盘键入的值(它将等待到按下一个键)。它返回一个16位的二进制数,包括两个不同的值。当按下一个普通键...
c语言怎么做图形界面?
C语言可以做图形界面。C语言中要做图形见面,首先需要设置为图形模式,确定显卡类型,对屏幕进行初始化等等。相关的函数如下:1.detectgraph()显示卡检测函数 2.initgraph()图形初始化函数 3.getdrivername()获取图形驱动程序名的指针 4.getgraphmode()获取图形模式函数 5.getmoderange()获取模式值范围函数...
蛮亮哈乐: F5启动调试.VS2010,文件->新建->项目,在弹出的对话框中,已安装的模板选Visual C++,右侧选空项目,在下方填上项目名称,点击确定,之后会 在界面右侧的解决方案资源管理器中的源文件上右击,添加->新建项,就是打开一个空白页面供你写代码.(解决方案资源管理器看不到,可以到视图菜单下调出)
迎泽区15121474878: c语言中怎么编出一个好的界面,用一种语言吗? - ?
蛮亮哈乐: 我以前作了一个记事本的界面.主要研究一下graphic.h 那个库里面的函数.里面有很多自带的图画方面的函数.要了解函数可以参考turbo c 里面自带的几个演示程序.总之C语言和graphic库结合起来就可以做出很好的界面.不需要学习其他语言.
迎泽区15121474878: 怎样用c语言写界面 - ?
蛮亮哈乐: vc下可以用win32纯c语言写界面(也叫sdk方式) 另外还有个lccwin32好象也可以 不过只是听说而已 还没用过 哈哈 另外如果你不想写windows下的界面的话 去linux方面找找 应该也找的到的 哈哈 还有如果你想用Turbo C下写个界面出来 这个就很麻烦了 涉及到很底层的东西 不过可以买本讲DOS下图形编程的书来看看 很古老的东东了 怕你找不到 哈哈
迎泽区15121474878: C语言如何做界面?
蛮亮哈乐: MFC SDK ATL WTL WXWIDGET QT……随便选,一般初学就前2者就可以
迎泽区15121474878: C语言如何设计简单的界面? - ?
蛮亮哈乐: 这个是这样的1.使用C调用window API来画,其实C++也是这样作的2.使用C的图型库,这样的程序如果你是成手,也会作出好看的GUI,但是比1要难一些3.使用QT等第三方库
迎泽区15121474878: c语言程序如何编写精美的界面 - ?
蛮亮哈乐: 如果真想做界面,那就不要用面向过程的语言.任何一个面向对象的语言都可以很方便的做出界面来.当然如果想又精美又方便那就要借助各种开发工具了.比如C++用VC .NET用VS
迎泽区15121474878: 用C语言怎么制作界面? - ?
蛮亮哈乐: VC++吧,C语言只有以DOS的方式,这也算一个界面的!
迎泽区15121474878: 关于C语言做界面?求高手指教!?
蛮亮哈乐: C语言做界面是直接调用Windows API. 因为API比较复杂, 所以现在几乎没有直接用C语言做界面的吧. LZ想要了解的话, 我下面贴几个API函数. HWND CreateWindowEx( DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName...
迎泽区15121474878: C语言如何制作出这样的界面????
蛮亮哈乐: 在IDE下运行就不会,或者在代码结尾加一句system("pause");当然这得加头文件stdlib.h
迎泽区15121474878: 怎样用c语言做个最简单的软件界面来呢?看看这段代码 - ?
蛮亮哈乐: //用windows最基本的api写的,还有很多方法可以做界面#include<windows.h> LRESULT CALLBACK WndProc(HWND ,UINT ,WPARAM ,LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, ...