PDA

View Full Version : هندل کردن موقعیت مکانی کنترل common Dialog



unforgiven
یک شنبه 18 فروردین 1387, 19:22 عصر
سلام دوستان
به چه صورت میشه موقعیت مکانی کنترل دیالوگ های حاصل از Common Dialog را کنترل کرد ؟ منظورم کنترل دیالوگ های Open , Save , Print , ... است که توسط برنامه نویس کنترل بشه و در جاهای مورد نظر برنامه نویس نشون داده بشه . مثلا کنترل دیالوگ پرینت در وسط صفحه نمایش داده شود .

پیشاپیش متشکرم

Mbt925
دوشنبه 19 فروردین 1387, 09:29 صبح
راه مستقیمی برای تعیین مکان ظاهر شدن اه پنجره های Common Dialog وجود نداره.

2 روش غیر مستقیم برای این کار وجود داره.

روش ساده:

پنجره های Common dialog معمولا در سمت چپ/بالا ی پنجره ی Owner ظاهر میشن.
پس میشه این کنترل رو روی یه فرم دیگه قرار داد و قبل از نمایش Common dialog مکان اون پنجره رو ست کرد و بعد Common dialog رو نمایش داد.
میشه فرم مربوطه رو Invisible کرد.

روش مشکل :


استفاده از هوک.

برای استفاده از این روش باید از API اه GetOpenFileName استفاده کنید.

این API یه Struct برای ورودی می گیره که یکی از آرگومان هاش ipfnHook هست که آدرس تابع هوک رو می گیره.
برای فعال کردن هوک باید Flags رو با OFN_ENABLEHOOK
OR کنید.

وظیفه ی تابع هوک تون باید این باشه که با استفاده از توابع
GetParent, GetWindowRect, SystemParametersInfo and MoveWindow
و با استفاده از هندل پنجره ی Common dialog مکان اون رو تنظیم کنه.

unforgiven
دوشنبه 19 فروردین 1387, 15:10 عصر
دوست عزیز از پاسختون ممنونم
اما دومین کدی که شما ارائه کردید برای وقتیست که ما Common Dialog رو از طریق Call Api کرده باشیم . اگه ممکنه مثالی با Common control ویبی بگذارید .
متشکرم

Mbt925
چهارشنبه 21 فروردین 1387, 10:21 صبح
راه حل دومی که گفتم فقط برای شکل API اه Common Dialog هست.

یه روش احتمالیه دیگه هم وجود داره.

اینکه توسط کلاس و عنوان پنجره ی Common Dialog هندل اون رو توسط تابع FindWindow بدست بیاریم و توسط تابع MoveWindow اونرو به مکان موردنظر منتقل کنیم.