unix下的c做图形界面。。。。。。。。

各位大狭,我想了解一下在unix平台下面,用c语言怎么做图形界面?
在dos下,c 有各种各样这样的库函数可以用。在unix下是不是也有啊?
另外,在unix下的c语言编程,一般用那种编译器?
幼稚问题,还是望赐教
---------------------------------------------------------------

UNIX一般使用X Window窗口系统,最初由MIT开发。
Linux有免费的XFree86
X Windows提供API,即Xlib,可以用来写窗口程序。
但用Xlib写X Window程序就象用Win32 API写Windows程序一样麻烦。
所以很多人用XToolkit或Motif。
这是传统的UNIX窗口应用程序。

---------------------------------------------------------------

#include

  1<curses.h> /* 引进 curses.h , 并自动引进stdio.h */   
  2  
  3  
  4#define StartX 1 /* 决定游标初始位置 */   
  5#define StartY 1   
  6  
  7void initial();   
  8  
  9void main(void)   
 10{   
 11int x=StartX; /* 宣告 x,y 并设定其初值 */   
 12  
 13int y=StartY;   
 14int ch; /* 宣告 ch 为整数,配合 getch()使用 */   
 15  
 16  
 17initial(); /* 呼叫 initial(), 启动 curses 模式, */   
 18  
 19/* 并完成其它设定 */   
 20  
 21  
 22box(stdscr,' ¦','-'); /* 画方框 */   
 23  
 24  
 25attron(A_REVERSE); /* 开启反白模式 */   
 26  
 27mvaddstr(0,20,"Curses Program"); /* 在 (20,0) 处输出反白字元 */   
 28  
 29attroff(A_REVERSE); /* 关闭反白模式 */   
 30  
 31  
 32move(x,y); /* 将游标移至初始位置 */   
 33do { /* 以无限回圈不断等待输入 */   
 34  
 35ch=getch(); /* 等待自键盘输入字元*/   
 36switch(ch) { /* 判断输入字元为何 */   
 37  
 38  
 39case KEY_UP: --y; /* 判断是否"↑"键被按下   
 40*/   
 41  
 42break;   
 43case KEY_DOWN: ++y; /* 判断是否"↓"键被按下   
 44*/   
 45  
 46break;   
 47case KEY_RIGHT: ++x; /* 判断是否"→"键被按下   
 48*/   
 49  
 50break;   
 51case KEY_LEFT: --x; /* 判断是否"←"键被按下   
 52*/   
 53  
 54break;   
 55case '\r': /* 判断是否 ENTER 键被按下   
 56*/   
 57  
 58++y;   
 59x=0;   
 60break;   
 61case '\t': /* 判断是否 TAB 键被按下   
 62*/   
 63  
 64x+=7;   
 65break;   
 66case 127: /* 判断是否 BACKSPACE 键被按下   
 67*/   
 68  
 69mvaddch(y,--x,' ');/* delete 一个字元   
 70*/   
 71  
 72break;   
 73  
 74case 27: endwin(); /* 判断是否[ESC]键被按下   
 75*/   
 76  
 77exit(1); /* 结束 curses 模式   
 78*/   
 79  
 80/* 结束此程式   
 81*/   
 82  
 83  
 84default:   
 85addch(ch); /* 如果不是特殊字元, 将此字元印   
 86出 */   
 87  
 88x++;   
 89break;   
 90}   
 91move(y,x); /* 移动游标至现在位置   
 92*/   
 93  
 94} while (1);   
 95}   
 96  
 97void initial() /* 自定开启 curses 函式   
 98*/   
 99  
100{   
101initscr();   
102cbreak();   
103nonl();   
104noecho();   
105intrflush(stdscr,FALSE);   
106keypad(stdscr,TRUE);   
107refresh();   
108}   
109  
110建议你用www.google.com   
111收索一把 : unix 图形编程”,   
112  
113  
114\---------------------------------------------------------------   
115  
116以下是我很久前编写的   
117很多细节都忘记了   
118它运行于X-WINDOW上   
119$ cc $1.c -lXm -lXt -lX11 -lsocket -o$1   
120  
121  
122#include<xm xmall.h="">   
123#include<fcntl.h>   
124#include<stdio.h>   
125#include<stdlib.h>   
126#include<malloc.h>   
127#include<sys stat.h="">   
128#include<sys types.h="">   
129#include<time.h>   
130  
131#include"datebase.h"   
132#include"function.h"   
133#include"space.h"   
134#include"input.h"   
135#include"query.h"   
136#include"chang.h"   
137#include"help.h"   
138void down_pro(Widget w,XtPointer client,XtPointer call){   
139exit(0);   
140}   
141  
142int main(int argc,char *argv){   
143  
144XtSetLanguageProc(NULL,NULL,NULL);   
145toplevel=XtVaAppInitialize(&amp;theApp,"Main",NULL,0,&amp;argc,argv,NULL,NULL);   
146one=XtVaCreateManagedWidget("One",xmBulletinBoardWidgetClass,   
147toplevel,   
148XmNallowOverlap,False,   
149XmNwidth, 750,   
150XmNheight, 510,   
151NULL);   
152/* MENU area 0 menubar--------------------------------------------*/   
153shell=XtVaCreateManagedWidget("X",   
154xmRowColumnWidgetClass,   
155one,   
156NULL);   
157menubar=XmCreateMenuBar(shell,"menuBar",NULL,0);   
158XtManageChild(menubar);   
159filepane=XmCreatePulldownMenu(menubar,"pane",NULL,0);   
160xmstr=XmStringCreateSimple("File");   
161Filebutton=XtVaCreateManagedWidget("File",   
162xmCascadeButtonWidgetClass,   
163menubar,   
164XmNsubMenuId,filepane,   
165XmNlabelString,xmstr,   
166XmNmnemonic,'F',   
167NULL);   
168Filebutton1=XtVaCreateManagedWidget("Open",   
169xmPushButtonWidgetClass,   
170filepane,   
171NULL);   
172xmstr=XmStringCreateSimple("F10");   
173Filebutton2=XtVaCreateManagedWidget("Close",   
174xmPushButtonWidgetClass,   
175filepane,   
176XmNaccelerator,"<keypress>F10",   
177XmNacceleratorText,xmstr,   
178NULL);   
179XtAddCallback(Filebutton2,XmNactivateCallback,down_pro,NULL);   
180/*FilesaveAsPane=XmCreatePulldownMenu(filepane,"save_as",NULL,0);   
181Filebutton3=XtVaCreateManagedWidget("Save As",   
182xmCascadeButtonWidgetClass,   
183filepane,   
184XmNsubMenuId,FilesaveAsPane,   
185NULL);   
186Filebutton4=XtVaCreateManagedWidget("MS Word",   
187xmPushButtonWidgetClass,   
188FilesaveAsPane,   
189NULL);   
190Filebutton5=XtVaCreateManagedWidget("LaTeX",   
191xmPushButtonWidgetClass,FilesaveAsPane,   
192NULL);   
193*/   
194querypane=XmCreatePulldownMenu(menubar,"pane",NULL,0);   
195xmstr=XmStringCreateSimple("Query");   
196Querybutton=XtVaCreateManagedWidget("query",   
197xmCascadeButtonWidgetClass,   
198menubar,   
199XmNsubMenuId,querypane,   
200XmNlabelString,xmstr,   
201XmNmnemonic,'Q',   
202NULL);   
203Queryname=XtVaCreateManagedWidget("Name",   
204xmPushButtonWidgetClass,   
205querypane,   
206NULL);   
207XtAddCallback(Queryname,XmNactivateCallback,mainquery,NULL);   
208Queryno=XtVaCreateManagedWidget("Number",   
209xmPushButtonWidgetClass,   
210querypane,   
211NULL);   
212inputpane=XmCreatePulldownMenu(menubar,"pane",NULL,0);   
213xmstr=XmStringCreateSimple("Input");   
214Inputbutton=XtVaCreateManagedWidget("Input",   
215xmCascadeButtonWidgetClass,   
216menubar,   
217XmNsubMenuId,inputpane,   
218XmNlabelString,xmstr,   
219XmNmnemonic,'I',   
220NULL);   
221Inputbutton1=XtVaCreateManagedWidget("Insert",   
222xmPushButtonWidgetClass,   
223inputpane,   
224NULL);   
225  
226changpane=XmCreatePulldownMenu(me</keypress></time.h></sys></sys></malloc.h></stdlib.h></stdio.h></fcntl.h></xm></curses.h>
Published At
Categories with 服务器类
Tagged with
comments powered by Disqus