تعریف event (رویداد یا وقفه سیستم)

رویداد در محیط ویندوز معادل با وقفه در dos می باشد. هر گاه یک سیگنال وقفه ایجاد شود در ویندوز یک event روی می دهد و اگر زیر برنامه ای به آن event متصل باشد به ازای سیگنال وقفه صادر شده آن رویداد (event ) اجرا می گردد. روند ایجاد پیغام و ارسال آن به روال پاسخ گو به پنجره در شکل (  ) نشان داده شده است . همانطور که در شکل نشان داده شده است هر وقفه موجب یگ یا چند پیغام خواهد شد این پیغامها در مرحله اول در صف سیستم عامل قرار گرفته و بر اساس نوع پیغام ( Message )  و برنامه ( Process ) در صفها قرار میگیرد . حال اگر زیر برنامه ای به پیغام مربوطه متصل شده باشد اجرا خواهد شد . مانند زیر بنامه های رویداد حرکت موس  { OnMouseMove() } وقتی موس حرکت داده شود بطور خود کار اجرا میشوند .

  قطعه برنامه Message loop به صورت یک نخ (  Thread ) نوشته میشود . در این برنامه یک حلقه بینهایت وجود دارد همواره از صف پیغام را میخواند .


Procedure   MsgThread;

Var    Result       : integer;

        MyMsg      :TMsg;

Begin

Do  

Result:=GetMessage (^ MyMsg,nil,0,0);

If (Result<>0) and (Result<>1- ) then

Begin

                                                            TranslateMessage(^ MyMsg);

DisPatchMessage(^MyMsg);

End;                                                                                     

  While (Result<>0);

End

 در برنامه فوق:

MyMsg -1 از نوع TMSG تعریف شده است.

 2- تابع GetMessage یک پیغام را از صف می خواند اگر صف خالی باشد  و یا هر خطایی داشته باشد منهای 1 و اگر پیغام  Wm_quit   باشد صفر را بر می گرداند.در غیر این صورت ساختمان پیغام را در متغیر MyMsg قرار می دهد.        

3- تابع TranslateMessage پیغام خوانده شده را ترجمه کرده و آن را برای  روال پاسخگوی به پیغام  آماده می کند.

4- تابع DisPatchMessage    پیغام ترجمه شده را به روال پاسخگوی پنجره   ارسال می کند و در آن روال نتیجه پیغام (عملکرد پیغام ) اجرا می کند.

 

 برنامه پاسخگوی پنجرهWinProcMsg()   

این زیر برنامه پیغام ها را گرفته و بر اساس نوع پیغام به هر یک از آنها بر اساس شماره پیغام پاسخ می دهد.  مثال زیر برای برنامه های  C++ , VC   میباشد .

Lresult CallBackMinProc ( HWND           myhwnd         مشخصه پیغام 

unit           mymsg               

WPARAM   mywparam     اولین پارامتر پیغام

LPARAM     mylparam        دومین پارامتر پیغام

);

                                                                            }

Switch(my msg)

{                                                                       

 case Wm_Create        : {OnCreat()       return(0); break;}

 case Wm_Paint          : { On_Paint()    return(0); break;}

 case Wm_Size           : {OnSize( )                return(0)ز; break;}

 case Wm_Destroy      : {OnDestroy( )  return(0); break;}

 default      : DefWindowProc (myhwnd, myMsg,myWparam,myLparam);

}

Return(0);                                                                      

}                                    

در برنامه فوق  به ازای  پیغام  Wm_Create  دستورات مورد نظر برای اجرا در زمان وقوع رویداد روی تنظیمات اولیه پنجره قرار می گیرد. به ازای  پیغام  Wm_Paint  دستورات مورد نظر برای اجرا در زمان رویداد بازسازی و نمایش  پنجره قرار می گیرد . پیغام Wm_Size دستورات مورد نظر برای اجرا در زمان رویداد تنظیم پنجره و یا جابجایی آن صورت می گیرد.  پیغام Wm_Size  دستورات مورد نظر در زمان بسته شدن پنجره انجام می شود. در نهایت  با استفاده از  تابع  DefWindowProc  پیغام هایی که در روال پاسخگوی پنجره انجام نشده به  سیستم ارسال میگردد .