PDA

View Full Version : سوال: راهنمایی در مورد نوشتن برنامه ای



terminator68
سه شنبه 05 آذر 1387, 13:10 عصر
با سلام.

من می خوام برنامه پاینت ویندوز رو به زبان سی بنویسم.

میشه بگید چه دستورات و امکانات و هدر هایی به کار ببرم.

با تشکر.

shask00l
سه شنبه 05 آذر 1387, 20:44 عصر
قراره کل امکاناتش رو خودت طراحی کنی .؟ (مثلا رسم خط و دایره و آرک و ..... ) با اینکه میتونی از توابع c استفاده کنی ..؟ استاد چی گفته ؟

terminator68
چهارشنبه 06 آذر 1387, 20:31 عصر
سلام.

سوال اینه :

برنامه شبیه ساز محیط paint با امکان رسم شکل و حذف شکل و انتخاب رنگ و ذخیره و بازیابی اشکال.

ممنون.

shask00l
چهارشنبه 06 آذر 1387, 22:23 عصر
خوب ... حالا بهتر شد .

ببین . نکته اول در مورد ذخیره سازی تصاویره ..
برای ذخیره کردن 2 تا متد داریم . bitmap و برداری .
برای رخیره کردن نوع bitmap فقط کافیه با 2تا for تو درتو کل رنگهای بخش نقاشیتو با getpixel بخونی و توی 1 فایل ذخیره کنی ولی برای دخیره از نوع برداری باید فقط فرمان مربوط به رسم رو ذخیره کنی . بصورت text .

هرکدوم از اینا مزایای خودشونو دارند مثلا نوع bitmap حجمش خیلی زیاده و وقتی روی 1 شکل شکل جدید رسم میکنی اطلاعات شکل قبلی بهم میخوره . امکان انتخاب اشکال رو نداری و .... تنها مزیتش اینه که خیلی راحت پیاده سازی میشه و 2تا حلقه for براش بسه .

ولی توی حالت برداری کد مربوط به رسم شکل ذخیره میشه . حجم فایل دخیره شده خیلی کمه . میتونی بعدا اونا رو edit کنی . انتخاب کنی . جاشونو تغییر بدی و ... ولی پیاده سازیش 1 خورده مشکله . باید 1 نوع رکورد برای ذخیره کردن شکلها طراحی کنی و همه رو با اون توی فایل ذخیره کنی . علاوه بر این باید 1 تابع برای تفسیر این فرامین دخیره شده بسازی (مفسر فرمان) البته زیاد پیچیده نیست . ضمنا این حالت ترجیحا با لیست پیوندی طراحی بشه چون محدودیت نداره.

من حالت برداری رو پیشنهاد میکنم .

راستی نگفتی برنامت باید ماوس هم داشته باشه یا فقط با صفحه کلید کار میکنه ..؟

صفحه کلید که کارش معلومه و ...... هیچی . ولی برای استفاه از ماوس بای توابع مربوط به اون رو توی برنامت بیاری . کار سختی نیست ولی 1 خوره وقت میگیره تا قلقش بیاد دستت .

در مورد کشیدن اشیاء اگه قراره از توابع c استفاده کنی که هیچی . ولی اگه قراره خودت اونا رو با putpixel طراحی کنی .... برای رسم هر یک از اشیاء 1 الگوریتم وجود داره مثلا الگوریتم رسم خط برسنهام و ..... اول باید در مورد اون الگوریتم تحقیق کنی و بعد پیاده سازیش کنی . البته کد آمادش روی اینترنت هست. ولی اگه خودت بتونی پیاده سازیشون کنی حیلی چیزای جالبی یاد میگیری (درمور الگوریتم) . البته 1 خورده دردسر داره .

در مورد انتخاب رنگ هم قربون getpixel برم ... خیلی راحت اینکارو برات انجام میده .

خسته شدم ...
در مورد انتخاب اشیاء هم ....... ان بالایی هارو پیاده سازی کن بع همینجا پست بزن تا برات بگم . چون 1 خورده پیچیدست .

موفق باشی

terminator68
پنج شنبه 07 آذر 1387, 14:41 عصر
سلام.

برنامه باید ماوس هم داشته باشه.

در ضمن من تا حالا اصلا با این متد ها کار نکردم.

میشه یک تیکه از این برنامه رو بزایرد.

ممنون میشم.

shask00l
پنج شنبه 07 آذر 1387, 15:01 عصر
اگه کد آماده در این زمینه میخوای برو به سایت programers heaven اونجا چنتا برنامه کامل اینجوری دیده بودم . ولی اگه در مورد روش کار کمک میخوای اینجا پست بزن . تا آخر ترم خیلی مونده . وقت برای تحقیق زیاد داری.

terminator68
شنبه 09 آذر 1387, 10:03 صبح
سلام.

میشه حداقل بگید از چه هدرهایی استفاده کنم؟

درضمن تا آخر آذر بیشتر وقت ندارم.

shask00l
شنبه 09 آذر 1387, 11:27 صبح
stdio و conio تا اونجایی که یادمه ...

ولی در مورد توابع کار با ماوس باید همشو خودتون بنویسین . هدر خاصی برای انجام این کار وجود نداره (البته تا اونجا که من میدونم)

برای نمونه کد هم باید بین برنامه های قدیمیم بگردم .... که اصلا کار جالبی نیست .. اگه پیدا کردم میزارم

shask00l
شنبه 09 آذر 1387, 21:26 عصر
از این میتونید برای استفاده از mouse توی c استفاده کنید . فقط حواستون باشه قبل از استفاده درایور ماوس تحت داس رو فعال کنید (البته اگه از ویندوز استفاده میکنید نیازی به این کار نیست)



union REGS regs;

int init_mouse();
int read_mouse();
int detect_mouse_movement();
void show_pointer();
void hide_pointer();
int isactive();


int init_mouse()
{
regs.x.ax=0; /*check existance of mouse*/
int86(0x33,&regs,&regs);
if(regs.x.ax==0) return 0; else return 1;
}

int read_mouse()
{
int a;
asm{
mov ax,0x3
int 0x33
mov a,bx
}
return a;
}

int detect_mouse_movement()
{
int midx, midy;
regs.x.ax=3;
int86(0x33,&regs,&regs);
midx=regs.x.cx;
midy=regs.x.dx;
if(midx==moux&&midy==mouy)
return 0;
else{
moux=midx;
mouy=midy;
return 1;
}
}

void show_pointer()
{ regs.x.ax=1; /*activate mouse pointer*/
int86(0x33,&regs,&regs);
}

void hide_pointer()
{ regs.x.ax=2;
int86(0x33,&regs,&regs);
}

int isactive()
{ int a;
asm{
mov ax,0x00
mov al,0x00
int 0x33
mov a,ax
}
if(a==0) return 0; else return 1;
}

terminator68
یک شنبه 17 آذر 1387, 19:44 عصر
سلام.

میشه ببینید مشکل این برنامه کجاست.

وقتی اجراش می کنم یکدفعه میپره بیرون.



include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <graphics.h>
//Menu Global Item
#define pixTOrc(x) (8*(x-1)) //convert pixel into row and col format
#define INC 5 //Increment Distance Between Menu Items
#define ROW 15 //Row Value for Menu Item
#define COL 8 //Column Value for Menu Item
#define MAXITEM 5 //Total menu items
// To display the Inventory Main menu options
typedef char option[15];
option mainMenu[]= {
"NEW",
"OPEN",
"SAVE",
"ABOUT ME",
"CLOSE"
};

// Function to displays all the menu prompt messages from the pointer array of option a[]
void normalvideo(int x,int y,char *str)
{
x=pixTOrc(x);
y=pixTOrc(y);
outtextxy(x,y,str);
}
// Function to move the cursor on the menu prompt with a reverse video color
void reversevideo(int x,int y,char *str)
{
x=pixTOrc(x);
y=pixTOrc(y);
setcolor(YELLOW); //Selected Item
sound(400);
delay(100);
nosound();
outtextxy(x,y,str);
setcolor(WHITE); //Unselected Item
sound(500);
delay(100);
nosound();
}

//Keep Track of which arrow key is pressed
char menu()
{
int i,done;
settextstyle(TRIPLEX_FONT,HORIZ_DIR,3);
setcolor(WHITE); //Initial Menu Item Color
for(i = 1; i < MAXITEM; i++)
normalvideo(COL, (i*INC)+ROW, mainMenu[i]);
reversevideo(COL,ROW, mainMenu[0]);
i = done = 0;
do
{
int key;
/**Status Bar Logic**/
//Message will be displayed as status bar guide-line
setfillstyle(SOLID_FILL,BLUE);
settextstyle(SMALL_FONT,HORIZ_DIR,5);
bar(pixTOrc(2),pixTOrc(52.5),pixTOrc(75),pixTOrc(5 5));
setcolor(LIGHTCYAN);
switch(i){
case 0 : outtextxy(pixTOrc(5),pixTOrc(52.75),"New --> Create New file");
break;
case 1 : outtextxy(pixTOrc(5),pixTOrc(52.75),"Open --> Open Existing file");
break;
case 2 : outtextxy(pixTOrc(5),pixTOrc(52.75),"Save --> Save file");
break;
case 3 : outtextxy(pixTOrc(5),pixTOrc(52.75),"About Me --> Programmer : Vivek Patel");
break;
case 4 : outtextxy(pixTOrc(5),pixTOrc(52.75),"Close the Program --> BYE C U");
break;
}
/**status Bar ends**/
//Restore Orignal Color and Font Setting
setcolor(WHITE);
settextstyle(TRIPLEX_FONT,HORIZ_DIR,3);
key = getch();
switch (key)
{
case 00:
key = getch();
switch (key)
{
case 72:
normalvideo(COL, (i*INC)+ROW, mainMenu[i]);
i--;
if (i == -1)
i = MAXITEM-1;
reversevideo(COL,(i*INC)+ROW,mainMenu[i]);
break;
case 80:
normalvideo(COL, (i*INC)+ROW, mainMenu[i]);
i++;
if (i == MAXITEM)
i = 0;
reversevideo(COL, (i*INC)+ROW, mainMenu[i]);
break;
}
break;
case 13:
done = 1;
}
}
while (!done);
return(i+49);
}

//Advertise Screen will displayed to utilize empty screen area
//It can be utilize for some effective...work
void advertise(){
setcolor(BLUE);
outtextxy(pixTOrc(30),pixTOrc(20),"salam");
outtextxy(pixTOrc(30),pixTOrc(26),"Mail :terminator ");
setcolor(YELLOW);
}

/* The function is used to display the main menu*/
//Actual code for all the menu utility resides in this
//Function...
void control_menu()
{
char choice;
do
{
choice = menu();
switch (choice)
{
case "1": //New
setcolor(BLUE);
outtextxy(pixTOrc(40),pixTOrc(15),"New");
advertise();
getch();
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(pixTOrc(2),pixTOrc(14),pixTOrc(75),pixTOrc(50) );
advertise();
break;
case "2": //Open
setcolor(BLUE);
outtextxy(pixTOrc(40),pixTOrc(15),"Open");
advertise();
getch();
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(pixTOrc(2),pixTOrc(14),pixTOrc(75),pixTOrc(50) );
advertise();
break;
case "3": //Save
setcolor(BLUE);
outtextxy(pixTOrc(40),pixTOrc(15),"Save");
advertise();
getch();
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(pixTOrc(2),pixTOrc(14),pixTOrc(75),pixTOrc(50) );
advertise();
break;
case "4": //Modify the status of item in inventory
setcolor(BLUE);
outtextxy(pixTOrc(40),pixTOrc(15),"About Me");
advertise();
getch();
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(pixTOrc(2),pixTOrc(14),pixTOrc(75),pixTOrc(50) );
advertise();
break;
case "5": //Close the program
setcolor(BLUE);
outtextxy(pixTOrc(40),pixTOrc(15),"CLOSE");
advertise();
delay(1000);
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(pixTOrc(2),pixTOrc(14),pixTOrc(75),pixTOrc(50) );
advertise();
goto out;
}
} while (choice != MAXITEM);
out:
}

void main()
{
int i,j;
int gd=DETECT,gm=0;
initgraph(&gd,&gm,"c:\\tc\\bgi\\");
///code as space holder\\\\\
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(0,0,640,480);
setcolor(DARKGRAY);
rectangle(0,0,639,480);
rectangle(1,1,638,479);
setcolor(BLACK);
rectangle(2,1,637,478);
rectangle(3,1,636,477);
settextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
setcolor(BLUE);
//outtextxy(pixTOrc(,pixTOrc(2)," MENU -->> (Simple Style) ");
setfillstyle(HATCH_FILL,DARKGRAY);
for(i=15,j=70;i<40||j>40;i++,j--){
bar(pixTOrc(j),pixTOrc(7),pixTOrc(i),pixTOrc(7.5)) ;
delay(10);
bar(pixTOrc(j),pixTOrc(7),pixTOrc(70),pixTOrc(7.5) );
delay(20);
}
bar(pixTOrc(7),pixTOrc(14),pixTOrc(25),pixTOrc(50) );
///code as space holder\\\\\
//Calling Menu
control_menu();
closegraph();
}