تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 6 از 6

نام تاپيک: تغییر مکان دیالوگ با استفاده از دستور :

  1. #1
    داره خودمونی میشه cpplover's Avatar
    تاريخ عضويت
    Dec 2007
    محل سكونت
    esfarayen
    پست ها
    127

    14 تغییر مکان دیالوگ با استفاده از دستور :

    مدتی هست که قصد دارم یه message box متحرک بسازم یعنی قصد دارم با استفاده از تغییر دادن xpos و ypos (مثلا در یک حلقه for ) این کار رو انجام بدم و position دیالوگ رو تغییر بدم حالا ممکنه که بگید چه دستوری در visual c++2005 کار set کردن رو انجام میده ؟
    با تشکر

  2. #2
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Oct 2007
    پست ها
    205

    پيش فرض

    با متد MoveWindow میتونین اینکار رو انجام بدین منتها چون باید مختصات چهار سمت پنجره رو بهش بدین , اول مختصات جاری رو به GetWindowRect میگیریم و بعد از جابجایی با متد MoveToXY , مختصات جدید رو با تابع MoveWindow اعمال میکنیم :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    البته این کد چون توی یکی از متد های کلاس Dialog نوشته شده خود Dialog رو جابجا میکنه. اگه شما کنترل دیگه ای مد نظرتون هست میتونین از متد های اون استفاده کنین.(مثلا MyControl->MoveWindow)
    در ضمن رمتد های دیگه ای دیگه ای هم واسه این کار هست...

  3. #3
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    سلام!

    روشی که دوستمون گفتن متاسفانه در مورد MessageBox کاربرد نداره.
    چون در MFC و نظایر اون MessageBox یک Object یا کلاس نیست و صرفا یک تابع هست.

    دو تا راه حل وجود داره :

    1- یک فرم خودتون برای MessageBox بنویسین و به تعریف دیگه اون رو سفارشی کنین.

    2- گرفتن Handle پنجره ی MessageBox و تغییر اون با استفاده از SetWindowPos
    که من مورد دوم رو توضیح میدم :


    در مرحله اول Timer Event برنامه رو فعال میکنیم . با استفاده از SetTimer در OnInitDialog

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    من یک Button روی فرم قرار دادم که با کلیک روی اون یک پیغام ظاهر میشه :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


    برای تغییر وضعیت MessageBox نیاز به یک شمارنده هم داریم ، کافیه یک متغییر private از نوع
    int به کلاس اضافه کنیم : (در فایل h)

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


    مقدار این counter رو در OnInitDialog صفر در نظر می گیریم :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


    حالا به OnTimer کد زیر رو اضافه میکنیم :


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    یه توضیح کوتاه :

    با استفاده از FindWindow دستگیره و یا Handle مربوط به پنجره ای که اسمش Message باشه
    رو میگیریم. (دقت کنین که Caption پنجره ی MessageBox رو در FindWindow بنویسین.)

    اگه این Handle درست بود ، با استفاده از SetForegroundWindow اون رو پیش زمینه می کنیم (به علت وجود یه Bug !)
    و بعدش با استفاده از SetWindowPos محل اون رو تغییر میدیم.



    دقت کنین که MessageBox از Screen خارج نشه!!


    موفق باشین.

  4. #4
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Oct 2007
    پست ها
    205

    پيش فرض

    ظاهرا دوستمون میخواستن خودشون یک MessageBox بسازن و همونطور که گفتن position دیالوگ رو تغییر بدن نه اینکه MessageBox ی که ایجاد شده رو حرکت بدن. به اون خاطر من کد مربوط به حرکت دیالوگ رو گذاشتم...

  5. #5
    داره خودمونی میشه cpplover's Avatar
    تاريخ عضويت
    Dec 2007
    محل سكونت
    esfarayen
    پست ها
    127

    پيش فرض

    با سلام

    هر دو روش از لحاظی زیبا و قابل تامل بودند

    مثلا روش دوستمون m3hrz4d از لحاظ کوچک بودن عالی بود و من اون رو به صورت زیر به کار بردم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    }

    اما تنها عیبی که این روش داشت این بود که در زمان حرکت دیالوگ هیچ شیئی روی دیالوگ دیده نمی شد

    روش دوستمون someone هم به خاطر استفاده از تایمر جالب بود اما من به توصیه ایشون دقت نکردم و در حین کار بسته شدن برنامه واسم غیر ممکن شد و کامپیوتر رو دستی restart کردم !!!

    میشه بگید آی دی تایمر ما در اینجا چیه تا اون رو kill کنیم ؟

    با تشکر

  6. #6
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    ظاهرا دوستمون میخواستن خودشون یک MessageBox بسازن و همونطور که گفتن position دیالوگ رو تغییر بدن نه اینکه MessageBox ی که ایجاد شده رو حرکت بدن. به اون خاطر من کد مربوط به حرکت دیالوگ رو گذاشتم...

    بله ، درسته و من دقت نکردم.


    -----------------------------------------------------------------------------------


    اما تنها عیبی که این روش داشت این بود که در زمان حرکت دیالوگ هیچ شیئی روی دیالوگ دیده نمی شد
    دلیلش به خاطر استفاده از حلقه هست. تا زمانی که برنامه از حلقه خارج نشه ، برنامه به هیچکدوم از Event ها توجه نمیکنه.
    در اینجاست که بهتره به جای حلقه از Thread
    استفاده بشه.

    میشه بگید آی دی تایمر ما در اینجا چیه تا اون رو kill کنیم ؟
    عدد یک 1

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •