سلام
پارس گيگا عزيز اگر سوالت رو تو گروه مطرح كني بهتر هست و به طور كامل جوابت رو ميدم
چون ممكنه ديگران هم اين سوال براشون پيش بياد و تو اونجا جوابش رو پيدا كنند
ما اينجا بيشتر براي هماهنگي ميايم
سلام
پارس گيگا عزيز اگر سوالت رو تو گروه مطرح كني بهتر هست و به طور كامل جوابت رو ميدم
چون ممكنه ديگران هم اين سوال براشون پيش بياد و تو اونجا جوابش رو پيدا كنند
ما اينجا بيشتر براي هماهنگي ميايم
منظورتون كجاست؟
تو امضام نوشته گروه طراي سيستم عامل روش كليك كن
نت عزيز من امروز جمعه خونه بودم منتظر تماست
چرا تماس نگرفتي ؟
ببخشيد ها !
چرا نوشتي گروه طراي سيستم عامل
امیدوارم موفق و پیروز باشید.
متوجه نشدم يعني چي !نقل قول:
ببخشيد ها !
چرا نوشتي گروه طراي سيستم عامل
ممنوننقل قول:
امیدوارم موفق و پیروز باشید.
سلام
من يک شبيه ساز کنترل پنجره ي خيلي ساده نوشتم
خوشحال مي شو اگه:
1-نظر بديد
2-کاملش کنيد
راستش در نمايش پيکسل ها کند است
مي دونم اگه مستقيم در حافظه گرافيکي بنويسم سرعتس بيشتر مي شه
اما کار با vga را بلد نيستم
کد:/************************************
** ParsGIGA
** Windows simulator
************************************/
#include <Dos.h>
#include <Bios.h>
#include <Stdio.h>
#include <Conio.h>
#include <Stdlib.h>
#include <Graphics.h>
#define MAX_WIN 100
#define TITLE_HEIGHT 20
#define TITLE_UP 4
#define TITLE_SIDES 4
typedef char* string;
typedef short char bool;
typedef int IDwnd;
struct _Mouse
{
int X,Y,Button;
};
typedef struct _Mouse Mouse;
struct _Window
{
int Width,Height,StartX,StartY;
char Color;
string Text;
string Type;
void (*proc)(int);
};
typedef struct _Window Window;
int CounterWin=0;
Window *UserWins[MAX_WIN];
int Privilege[MAX_WIN];
/////////////////////////////////
void LoadGraph();
void UnLoadGraph();
IDwnd CreateWin(Window);
bool RemoveWin(IDwnd);
void ShowWin(Window*);
void Proc();
void ShowMouse();
void HideMouse();
Mouse GetMouse();
IDwnd FindWin(int,int);
IDwnd FindWin(Window*);
void ActiveWin(IDwnd);
void MoveWin(IDwnd,Mouse,Mouse);
void SetPrivilege(IDwnd);
void Refrash();
bool IsSelectedTitle(Window*,Mouse);
void FillRect(int,int,int,int,int);
///-- User functions
void Kernel();
void MyProc(int);
void main()
{
LoadGraph();
Kernel();
UnLoadGraph();
}
////////////////////////////////
void Kernel()
{
/////----------
Window w1;
w1.StartX=10;
w1.StartY=10;
w1.Width=100;
w1.Height=100;
w1.Color=4;
w1.Text="MyWin";
w1.proc=&(MyProc);
w1.Type=0;
int id1=CreateWin(w1);
Window w2;
w2.StartX=50;
w2.StartY=50;
w2.Width=150;
w2.Height=150;
w2.Color=5;
w2.Text="Notepad";
w2.proc=&(MyProc);
w2.Type=0;
int id2=CreateWin(w2);
Window w3;
w3.StartX=80;
w3.StartY=80;
w3.Width=200;
w3.Height=300;
w3.Color=6;
w3.Text="My computer";
w3.proc=&(MyProc);
w3.Type=0;
int id3=CreateWin(w3);
///////---------------------
Proc();
}
////////////////////////////////
void MyProc(int msg)
{
sound(100);
delay(100);
nosound();
}
///////////////////////////////////////////////////////////
////////////////////////////////
void LoadGraph()
{
puts("Switch to graphics mode");
int gdrive=DETECT,gmode=0;
initgraph(&gdrive,&gmode,"C:\\TC\\BGI");
}
////////////////////////////////
void UnLoadGraph()
{
closegraph();
puts("Switch to text mode");
}
////////////////////////////////
IDwnd CreateWin(Window w)
{
/* Allocation some memory for save window information */
if(CounterWin!=MAX_WIN)
UserWins[CounterWin]=(Window*)malloc(sizeof(Window));
if(UserWins[CounterWin]==NULL)
{
printf("Memory error");
getch();
exit(0);
}
UserWins[CounterWin]->Width=w.Width;
UserWins[CounterWin]->Height=w.Height;
UserWins[CounterWin]->StartX=w.StartX;
UserWins[CounterWin]->StartY=w.StartY;
UserWins[CounterWin]->Color=w.Color;
UserWins[CounterWin]->Text=w.Text;
UserWins[CounterWin]->Type=w.Type;
UserWins[CounterWin]->proc=w.proc;
SetPrivilege(CounterWin);
ShowWin(UserWins[CounterWin]);
return CounterWin++;
}
////////////////////////////////
bool RemoveWin(IDwnd id)
{
CounterWin--;
free(UserWins[id]);
return 1;
}
////////////////////////////////
void ShowWin(Window* w)
{
int bgcolor=w->Color;
int aticolor=1;
int oticolor=9;
int ticolor;
HideMouse();
// Draw background of window
setcolor(bgcolor);
setfillstyle(1,bgcolor);
bar(w->StartX+1,
w->StartY+1,
(w->StartX+w->Width-1),
(w->StartY+w->Height-1));
floodfill(w->StartX+2,w->StartY+2,bgcolor);
// draw title of window
int curid=FindWin(w);
if(Privilege[0]==curid)
ticolor=aticolor;
else
ticolor=oticolor;
setcolor(ticolor);
setfillstyle(1,ticolor);
rectangle(w->StartX+TITLE_SIDES,
w->StartY+TITLE_UP,
(w->StartX+w->Width-TITLE_SIDES),
(w->StartY+TITLE_HEIGHT));
floodfill(w->StartX+TITLE_SIDES+1,w->StartY+TITLE_SIDES+1,ticolor);
// Show text of window
setcolor(15);
outtextxy(w->StartX+5,w->StartY+8,w->Text);
ShowMouse();
}
///////////////////////////////
/*
void FillRect(int X,int Y,int Width,int Height,int Color)
{
unsigned char far* video=(unsigned char far*)0XA0000000L;
for(int y=Y;y<=Height;y++)
for(int x=X;x<=Width;x++)
// ??? video[(y<<8)+(y<<6)+x]=Color;
}
*/
///////////////////////////////
void ShowMouse()
{
asm Mov ax,0x1;
asm Int 0x33
}
////////////////////////////////
void HideMouse()
{
asm Mov ax,0x2;
asm Int 0x33
}
////////////////////////////////
Mouse GetMouse()
{
union REGS r;
Mouse mouse;
r.x.ax=0x3;
int86(0x33,&r,&r);
mouse.X=r.x.cx;
mouse.Y=r.x.dx;
mouse.Button=r.x.bx;
return mouse;
}
////////////////////////////////
void Proc()
{
int id;
ShowMouse();
setbkcolor(3);
while(1)
{
// Get Keyboard status
if(kbhit())
if((getch())==27)
break;
// Get Mouse status
Mouse m=GetMouse();
if(m.Button==0x01)
{
// Active window
id=FindWin(m.X,m.Y);
if(id!=-1)
ActiveWin(id);
// Move window
if(IsSelectedTitle(UserWins[id],m))
{
Mouse n=GetMouse();
if(m.X!=n.X || m.Y!=n.Y)
{
Mouse mnew,mold;
mold.X=m.X;
mold.Y=m.Y;
do
{
mnew=GetMouse();
MoveWin(id,mold,mnew);
mold.X=mnew.X;
mold.Y=mnew.Y;
}while(mnew.Button==0x01);
}
}
}
}
HideMouse();
for(int c=0;c<=CounterWin;c++)
RemoveWin(c);
}
////////////////////////////////
IDwnd FindWin(int X,int Y)
{
int winid=-1;
for(int i=0;i<=CounterWin;i++)
{
int id=Privilege[i];
if(X>=UserWins[id]->StartX &&
Y>=UserWins[id]->StartY &&
X<=(UserWins[id]->Width+UserWins[id]->StartX) &&
Y<=(UserWins[id]->Height+UserWins[id]->StartY))
{
winid=id;
break;
}
}
return winid;
}
////////////////////////////////
IDwnd FindWin(Window *w)
{
for(int i=0;i<=CounterWin;i++)
{
int id=Privilege[i];
if(UserWins[id]==w)
return id;
}
return -1;
}
////////////////////////////////
void ActiveWin(IDwnd id)
{
if(Privilege[0]!=id)
{
ShowWin(UserWins[id]);
SetPrivilege(id);
}
}
////////////////////////////////
void SetPrivilege(IDwnd id)
{
int pri=-1;
//---------- Search
for(int i=0;i<=CounterWin;i++)
{
if(Privilege[i]==id)
{
pri=i;
break;
}
}
//-- If find
if(pri!=-1)
{
// Replce privileges
for(int j=pri-1;j>=0;j--)
Privilege[j+1]=Privilege[j];
Privilege[0]=id;
}
//-- Else ,then is new
else
{
for(int high=CounterWin;high>=0;high--)
Privilege[high+1]=Privilege[high];
Privilege[0]=id;
}
}
////////////////////////////////
void MoveWin(IDwnd id,Mouse Oldm,Mouse Newm)
{
int OffsetX=Newm.X-Oldm.X;
int OffsetY=Newm.Y-Oldm.Y;
UserWins[id]->StartX+=OffsetX;
UserWins[id]->StartY+=OffsetY;
Refrash();
}
////////////////////////////////
void Refrash()
{
clearviewport();
for(int i=CounterWin;i>=0;i--)
ShowWin(UserWins[Privilege[i]]);
}
///////////////////////////////////////
bool IsSelectedTitle(Window* w,Mouse m)
{
if(w->StartX+TITLE_SIDES <= m.X &&
w->StartY+TITLE_UP <= m.Y &&
(w->StartX+w->Width-TITLE_SIDES) >= m.X &&
(w->StartY+TITLE_HEIGHT) >= m.Y)
return 1;
return 0;
}
سلام ببخشيد
فيلد limit در رکورد توصیفگر در حالت محافظت شده
حاوی اندازه ی سگمنت است یا آدرس پایان آن؟
اي ول درست زدي وسط خال.نقل قول:
نوشته شده توسط Harry Potter