📄 button.c
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
#include <ctype.h>
#include <errno.h>
#include <sys/time.h>
#define MWINCLUDECOLORS
#include <nano-X.h>
#include <nxcolors.h>
#include"button.h"
void InitWindows(WCB *wcb)
{
if (GrOpen() < 0)
{
fprintf (stderr, "GrOpen failed");
exit (1);
}
wcb->state = BUTTON_NOT_PRESSED;
wcb->gc_main = GrNewGC();
GrSetGCUseBackground (wcb->gc_main, GR_FALSE);
GrSetGCForeground (wcb->gc_main, MAIN_WINDOW_COLOUR);
wcb->gc_main_text = GrNewGC();
GrSetGCBackground(wcb->gc_main_text, MAIN_WINDOW_COLOUR);
GrSetGCForeground(wcb->gc_main_text, MAIN_WINDOW_TEXT_COLOUR);
wcb->gc_button = GrNewGC();
GrSetGCUseBackground (wcb->gc_button, GR_FALSE);
GrSetGCForeground (wcb->gc_button, BUTTON_FOREGROUND_COLOUR);
wcb->gc_button_text = GrNewGC();
GrSetGCUseBackground (wcb->gc_button_text, GR_FALSE);
GrSetGCForeground (wcb->gc_button_text, BUTTON_TEXT_COLOUR);
wcb->wid_main = GrNewWindowEx(GR_WM_PROPS_APPFRAME|GR_WM_PROPS_CAPTION|\
GR_WM_PROPS_CLOSEBOX, "Button Test win", GR_ROOT_WINDOW_ID, \
MAIN_WINDOW_X_POSITION, MAIN_WINDOW_Y_POSITION, MAIN_WINDOW_WIDTH,\
MAIN_WINDOW_HEIGHT, MAIN_WINDOW_COLOUR);
wcb->wid_button = GrNewWindow(wcb->wid_main, BUTTON_X_POSITION, \
BUTTON_Y_POSITION, BUTTON_WIDTH, BUTTON_HEIGHT, BUTTON_BOARDER,RED, GR_COLOR_BLACK);
if(!(wcb->wid_main&&wcb->wid_button)) {
fprintf(stderr, "Couldn't get a window\n");
GrClose();
exit(1);
}
GrSelectEvents(wcb->wid_main, GR_EVENT_MASK_EXPOSURE|\
GR_EVENT_MASK_CLOSE_REQ);
GrSelectEvents(wcb->wid_button, GR_EVENT_MASK_EXPOSURE|\
GR_EVENT_MASK_CLOSE_REQ|GR_EVENT_MASK_BUTTON_DOWN);
GrMapWindow (wcb->wid_main);
GrMapWindow (wcb->wid_button);
}
/*
* Draw a button which has a specified label string centered in it.
*/
void draw_Button(WCB* pwcb)
{
GrFillRect(pwcb->wid_button, pwcb->gc_button, 0, 0,
BUTTON_WIDTH, BUTTON_HEIGHT);
GrText(pwcb->wid_button, pwcb->gc_button_text, BUTTON_TEXT_X_POSITION,
BUTTON_TEXT_X_POSITION, "Click Me", -1, 0);
}
void draw_WinMain(WCB* pwcb)
{
GrFillRect(pwcb->wid_main, pwcb->gc_main, 0, 0,
MAIN_WINDOW_WIDTH, MAIN_WINDOW_HEIGHT);
switch(pwcb->state)
{
case BUTTON_NOT_PRESSED:
GrText (pwcb->wid_main, pwcb->gc_main_text, TEXT_X_POSITION, \
TEXT_X_POSITION, "Hello World", -1, GR_TFASCII);
break;
case BUTTON_PRESSED:
GrText (pwcb->wid_main, pwcb->gc_main_text, TEXT_X_POSITION, \
TEXT_X_POSITION, "Button is pressed", -1, GR_TFASCII);
break;
}
}
void handle_exposure_event(WCB *pwcb)
{
GR_EVENT_EXPOSURE *event = &pwcb->event.exposure;
if(event->wid == pwcb->wid_main) {
draw_WinMain(pwcb);
return;
}
if(event->wid == pwcb->wid_button) {
draw_Button(pwcb);
return;
}
}
void handle_mouse_event(WCB *wcb)
{
GR_EVENT_BUTTON *event = &wcb->event.button;
if(event->wid == wcb->wid_button) {
wcb->state = BUTTON_PRESSED;
draw_WinMain(wcb);
return;
}
}
void handle_event(WCB *wcb)
{
while(1) {
GrGetNextEvent(&wcb->event);
switch (wcb->event.type)
{
case GR_EVENT_TYPE_EXPOSURE:
handle_exposure_event(wcb);
break;
case GR_EVENT_TYPE_BUTTON_DOWN:
handle_mouse_event(wcb);
break;
case GR_EVENT_TYPE_CLOSE_REQ:
GrClose();
exit (0);
}
}
}
int main(int argc, char *argv[])
{
int size;
size = sizeof(WCB);
WCB *pwcb = malloc(size);
InitWindows(pwcb);
handle_event(pwcb);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -