A basic example
#include <X11/Xlib.h>
#define HELLO "hello world"
main(int argc, char **argv)
{
Display *display; // X server connection
Window *win; // Window ID
GC gc; // Grpahics context
int bw = 2 // Border width
int bc = BlackPixel; // Border color
int bgc = WhitePixel; // Window background color
XSizeHints hints; // Window sizing hints
XEvent event; // Event data Structure
// Open the display
display = XOpenDisplay(NULL);
// Set hints for window size and position
hints.x = 200; hints.y = 200;
hints.width=300; hints.height=200;
hints.flags= PPosition| PSize;
// Create the window
win = XCreateSimpleWindow(display, DefaultRootWindow(display), hints.x, hints.y, hints.width, hints.heigth, bw, bc, bgc);
XSetStandardProperties(display, win, HELLO, HELLO, argv, argc, &hints);
// Create a grpahics context for writing the text
gc = XCreateGC(dispaly, win, NULL, NULL);
// Specify events of interest (only exposure)
XSelectInput(display, win, ExposureMask);
// Show the window
XMapWindow(display, win);
// Event loop
while (TRUE) {
XNextEvent(display, &event);
// Discard all but the most recent expose event
if (event.type == Expose && event.xexpose.count == 0){
int x, y;
while (XCheckTypedEvent(display, Expose, &Event));
XClearWindow(display, win);
//******** Print "hello world" !! ******
XDrawImageString(display, win, gc, 50, 50, HELLO, strlen(HELLO));
} //End if
} // end while
exit(0);
}
A Motif example
Event dispatching can be handled in one of three ways.
图2:一个Motif编程的例子
#include <Xm/Xm.h> #include <Xm/PushB.h> main(int argc, char **argv) { Widget top_wid, button; XtAppContext app; top_wid = XtVaAppInitialize(&app, "Push", NULL, 0, &argc, argv, NULL, NULL); button = XmCreatePushButton(top_wid, "Push_me", NULL, 0);
/* tell Xt to manage button */ XtManageChild(button); /* attach fn to widget */ XtAddCallback(button, XmNactivateCallback, pushed_fn, NULL); XtRealizeWidget(top_wid); /* display widget hierarchy */ XtAppMainLoop(app); /* enter processing loop */ } void pushed_fn(Widget w, XtPointer client_data, XmPushButtonCallbackStruct *cbs) { printf("Don't Push Me!!\n"); }