سلام به همه دوستان
از امروز تصمیم گرفتم این تاپیک راکد رو یکم حرکت بدم اگه میشه یه کمکی هم بکنید که تاپیک رو به مراتب بهتر کنیم.

همونطور که توسعه نویس جان توضیح دادن هر پنجره دارای یه پروسیجره که تمامی کارهایی که برنامه انجام میده توی اون نوشته شده هست
برنامه با گرفتن هر پیام از ویندوز سراغ پروسیجر میره تا دستورات مربوط به پیام رو بررسی و اجرا کنه

پیامی که خیلی مورد استفاده هست WM_PAINT هستش که با هر بار نادرست شدن "Client Rect" تو صف پیامها قرار داده میشه.
سوال اینجاست که چه موقع محیط پنجره نادرست میشه؟ در ابتدای برنامه محیط پنجره نادرسته چون برنامه هنوز هیچ چیز روی صفحه ننوشته پس این پیام توی صف پیامها قرار میگیره و اطلاعات رو چاپ میکنه. توی اکثر برنامه ها تغییر اندازه پنجره باعث نادرست شدنش میشه که بخاطر دادن دو فلگ CS_HREDRAW و CS_VREDRAW به فیلد style هست. WM_PAINT با minimize و دوباره maximize شدن هم تو صف پیامها قرار میگیره. حتی با پنهان شدن قسمتی از پنجره توسط پنجره های دیگه اون قسمت از client rect نادرست میشه.

پیام WM_PAINT اغلب با این تابع شروع میشه:


hdc = BeginPaint(hwnd, &ps);



و با این تابع تموم میشه:

 

EndPaint(hwnd, &ps);



توی هر دو تا تابع، اولین پارامتر دستگیره پنجره هست. پارامتر دوم مربوط به استراکچر PAINTSTRUCT میشه که حاوی اطلاعاتیه که پروسیجر برای چاپ به اونا نیاز داره.
طی فراخوانی تابع BeginPaint، پنجره تمام client area خودشو پاک میکنه و به رنگی که تو hbrbackground تعریف شده رنگ میکنه. تابع BeginPaint مقدار برگشتی از نوع (HDC (Handle to a Device Context داره. HDC برای ارتباط با ویدیو کارت به کار میره که ما برای نشون دادن نوشته هامون بهش نیاز داریم.