各位大狭,我想了解一下在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(&theApp,"Main",NULL,0,&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>