Refreshing with C

hufftt…. setelah lama vakum dalam dunia pemrograman, kali ini saya kembali bangkit untuk menaklukkan kembali dunia pemrograman. “Refreshing with C”, judul ini bukan berarti melakukan “refresh” windows atau browser dengan bahasa C, melainkan “refreshing” kembali dengan bahasa C. hehehe :-)

mencoba mengutak-atik kembali bahasa C, sekaran saya ingin mencoba membuat menu yang dapat dipilih-pilih pake tombol arah. setelah ber-searching ria akhirnya dapet juga sample source codenya di www.planet-source-code.com 

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#include "consolelib.h"
unsigned int sel = 1;
void menu(int);
void fct(int);
void main()
{
	CONSOLE_CURSOR_INFO console = {1,0};
	SetConsoleCursorInfo( GetStdHandle( STD_OUTPUT_HANDLE ), &console );
	menu(sel);
	int key;
	while (key != 27 && key != 13)
	{
		key = getch();
		switch(key)
		{
			case 72:
				if(sel != 1)
				{menu(--sel);}
				break;
			case 80:
				if(sel != 4)
				{menu(++sel);}
				break;
			default:
				break;
		}
		if(key == 13) {fct(sel);system("CLS");break;}
	}
}

void menu(int sel)
{
	switch(sel)
	{
	case 1: //draw menu 1
		cputsxy(" Option 1 ", 10, 4,	BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);
		cputsxy(" Option 2 ", 10, 6,	FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		cputsxy(" Option 3 ", 10, 8,	FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		cputsxy(" Option 4 ", 10, 10,	FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		break;
	case 2: //draw menu 2
		cputsxy(" Option 1 ", 10, 4,	FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		cputsxy(" Option 2 ", 10, 6,	BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);
		cputsxy(" Option 3 ", 10, 8,	FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		cputsxy(" Option 4 ", 10, 10,	FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		break;
	case 3: //draw menu 3
		cputsxy(" Option 1 ", 10, 4,	FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		cputsxy(" Option 2 ", 10, 6,	FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		cputsxy(" Option 3 ", 10, 8,	BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);
		cputsxy(" Option 4 ", 10, 10,	FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		break;
	case 4: //draw menu 4
		cputsxy(" Option 1 ", 10, 4,	FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		cputsxy(" Option 2 ", 10, 6,	FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		cputsxy(" Option 3 ", 10, 8,	FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		cputsxy(" Option 4 ", 10, 10,	BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);
		break;
	}
}
void fct(int sel)
{
	switch(sel)
	{
	case 1:
		//selection 1
		break;
	case 2:
		//selection 2
		break;
	case 3:
		//selection 3
		break;
	case 4:
		//selection 4
		break;
	default:
		//debug selection
		break;
	}
}
nah itu codingnya, terus isi dari library "consolelib.h" adalah:
#ifndef WINDOWS_H
	#include <windows.h>
#endif

#ifndef STDIO_H
	#include <stdio.h>
#endif

#ifndef STDLIB_H
	#include <stdlib.h>
#endif

#ifndef CONSOLELIB_H

#define CONSOLELIB_H

#define PERR(bSuccess, api){if(!(bSuccess)) printf("%s:Error %d from %s on line %d\n", __FILE__, GetLastError(), api, __LINE__);}

void setcolor(WORD color)
{
	BOOL b=SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color);
	PERR( b, "SetConsoleTextAttribute" );
	return;
}

void cputsxy(const char *inputstr, int x, int y, WORD color)
{
	LPDWORD res=NULL;
	COORD mycoord;
	mycoord.X=x;
	mycoord.Y=y;
	PCONSOLE_SCREEN_BUFFER_INFO sbi;
	sbi=NULL;
	WORD *pcolor;
	pcolor=(WORD*)malloc(sizeof(WORD)*(strlen(inputstr)));
	for (unsigned int i=0;i<=(strlen(inputstr)-1);i++) pcolor[i]=color;
	WriteConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE),pcolor,strlen(inputstr),mycoord,res);
	WriteConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE),inputstr,strlen(inputstr),mycoord,res);
	free(pcolor);
}

void clrln(int y)
{
	LPDWORD res=NULL;
	COORD mycoord;
	mycoord.X=0;
	mycoord.Y=y;
	_CONSOLE_SCREEN_BUFFER_INFO sbi;
	WORD *pcolor;
	char *inputstr;
	int i;
	GetConsoleScreenBufferInfo( GetStdHandle(STD_OUTPUT_HANDLE), &sbi );
	pcolor=(WORD*)malloc(sizeof(WORD)*(sbi.dwSize.X));
	inputstr=(char*)malloc(sizeof(char)*(sbi.dwSize.X));
	for (i=0;i<=(sbi.dwSize.X-1);i++) pcolor[i]=0;
	for (i=0;i<=(sbi.dwSize.X-1);i++) inputstr[i]=' ';
	WriteConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE),pcolor,sbi.dwSize.X,mycoord,res);
	WriteConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE),inputstr,sbi.dwSize.X,mycoord,res);
	free(pcolor);
	free(inputstr);
}

void setcursor(int x, int y)
{
	COORD mycoord;
	mycoord.X=x;
	mycoord.Y=y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),mycoord);
}

#endif
 
okey mungkin kali ini sampai disini dulu, sampai jumpa. :-) 
  1. Tinggalkan sebuah Komentar

Tinggalkan Balasan

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Ubah )

Twitter picture

You are commenting using your Twitter account. Log Out / Ubah )

Facebook photo

You are commenting using your Facebook account. Log Out / Ubah )

Connecting to %s

Ikuti

Get every new post delivered to your Inbox.