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.![]()