ورود

View Full Version : مبتدی: درخواست توضیح تابع WndProc



mhabat
شنبه 25 آبان 1392, 19:34 عصر
با سلام.
این کد رو بینید:


LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_CHAR:
{
if(wParam==VK_ESCAPE)
SendMessage(hwnd,WM_CLOSE,0,0);
return 0;
}
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hDC;
char szBuffer[]="1111111111111";
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,50,50,(LPCWSTR)szBuffer,strlen(szBuffe r));
EndPaint(hwnd,&ps);
return 0;
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc (hwnd, message, wParam, lParam);
}

چند تا سوال داشتم:
1-
WM_PAINT برای چه کاریه ؟من نمی فهمم.
به جز این 3 تا case ممکن هست که case های دیگه یی هم وجود داشته باشه؟
اگه آره آدرس بدین.
2-این قسمت رو هم متوجه نمیشم:
return DefWindowProc (hwnd, message, wParam, lParam);

3- این قسمت چه کاری رو انجام میده:
PostQuitMessage(0);
؟
4- این قسمت چه کاری رو انجام میده؟:
EndPaint(hwnd,&ps);

5-این قسمت رو هم بگین چه کاری رو انجام میده:
SendMessage(hwnd,WM_CLOSE,0,0);

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

mhabat
دوشنبه 27 آبان 1392, 11:25 صبح
می گن باید 24 ساعت برای پاسخ به هر پست منتظر بمونید
من باید چند ساعت منتظر بمونم تا کسی بیاد جوابمو بده.
حرف نا حق دارم میزنم؟
اگر واقعا این بخش تعطیله! خوب درش بزنید اینجا تعطیل است تا ملت الاف نشن.
غیر از اینه!

Negative_Se7en
دوشنبه 27 آبان 1392, 18:06 عصر
میگن باید ۲۴ ساعت ....

هیچ بایدی وجود نداره !
شما مگه کاره خاصی کردی که انتظار داری حتما کسی جوابتو بده .
دلیل اصلیه اینم که کسی جواب نمیده اینه که تاحالا ۳۵۰۰ بار از این سوالا پرسیده شده . دیگه انقد همه جواب دادن خسته شدن از این چیزای تکراری .
اینجا که مرکز پشتیبانی ++C نیست که همچین توقعی دارید !
یکم زحمت بده خودت تو گوگل یا تو همین سایت جستجو کن .

mhabat
دوشنبه 27 آبان 1392, 19:55 عصر
اوکی
اون کلمه ی کلیدی که میگین باید جشت و جو می کردم تا به پاسخم برسم رو شما بگین تا من بزنم
ببینم چی میاد!

Negative_Se7en
دوشنبه 27 آبان 1392, 20:00 عصر
همه ی پرسش هایی رو که پرسیدی توش واژه کلیدی داره .
WM_PAINT
DefWindowProc
PostQuitMessage
EndPaint
SendMessage

هرکدوم از اینها رو تو Google جستجو کنی کلی نیتجه میاد براش .
توی MSDN هم همرو توضیح داده .

بهروز عباسی
دوشنبه 27 آبان 1392, 21:46 عصر
برای فهم اون تابع اول باید با مفهوم پیغام ها توی ویندوز آشنا باشی (و توابع مرتبط مثل SendMessage,PostQuitMessage, etc )

در مرحله بعد خودت می فهمی که هر برنامه ای با پیغام هایی که بهش ارسال میشه خودشو مدیریت و اجرا میکنه. خب تعداد این پیغام ها خیلی زیاده ! و برنامه در برخی موارد با دریافت پیام خاصی باید کار خاصی انجام بده اینجاست که با اون تابع و اون Case چک میکنه ببینه چه پیغامی امده و در مقابلش باید چکار کنه !

مثلا انجا که WM_PAINT رو چک کرده خواسته ببینه اگه این پیغام آمد بعش یه متنو نشون بده و همینطور الی آخر. (WM یک پیشوند برای پیغام هاست و شما خودت هم میتونی یک پیغام جدید بسازی)

OK ??

(به این سبک برنامه نویسی میگن Win32 کتاب و مقاله هم زیاد داره کمی در این مورد تحقیق کن ، چیز خوبیه.)

شب خوش .