⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 button.c

📁 一本关于ARM 嵌入系统书籍源代码很实用的
💻 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 + -