خیلی ممنون که وقت گزاشتی.
هر وقت حال داشتی راجع به توابع DoEvents ؛ ReleaseDC ؛ GetDesktopWindow ؛ GetDC خصوصیت های ScaleMode و AutoRedraw و به طور کلی چگونگی کارکرد برنامه! برامون بگو.
باز هم تشکر
فرمان DoEvents :
در ویندوز درخواست هایی که خارج از یک روال مشخص اجرا می شوند مستقل از هم هستند و دقیقا مشخص نیست
که کی اجرایشان به پایان می رسد، مثلا ما از ویندوز درخواست کرده ایم که تصویر داخل PictureBox ای را داخل
فایل bmp ذخیره کند. اما برنامه ما الزاما تا پایان اینکار معطل نمی شود و به اجرای کد های بعدی می پردازد.
ممکن است برنامه آنقدر سریع سراغ درخواست تبدیل فایل bmp به jpg برود که هنوز ذخیره سازی فایل bmp
کامل نشده باشد. فرمان DoEvents به سیستم اعلام می کند که برنامه تا زمانی که درخواست نیمه کاره ای
وجود دارد معطل شود تا همه درخواست های قبلی به پایان اجرایشان برسند. در واقع استفاده کردن از
DoEvents این تضمین را به ما می دهد که درخواست های قبلی پیش از اجرا کد بعدی کاملا خاتمه یافته اند.
تابع GetDesktopWindow :
تابع GetDesktopWindow شماره Handle پنجره Desktop را اعلام می کند. یکی از خصوصیات پنجره Desktop
در این است که تصویر آن همه آن چیزی است که روی صفحه نمایشگر مشاهده می شود، یعنی دقیقا تصویر
Screenshot نمایشگر است.
مفهوم Handle پنجره ها :
هر پنجره ای یک شماره مخصوص خود را دارد (مثل شماره شناسنامه) که به آن Handle می گویند، مثلا مشخصه
hWnd که در فرم ها و اکثر کنترل های ویژوال بیسیک وجود دارد، شماره Handle پنجره آن شیء را مشخص می کنند،
مثل Picture1.hWnd یا Form1.hWnd یا Text1.hWnd
توابع API ویندوز پنجره ها را با این شماره Handle می شناسند و اگر بخواهید فرضا در مورد پنجره Form1 کاری
را با توابع API ویندوز انجام دهید بجای نام Form1 باید از شماره Form1.hWnd استفاده کنید.
توابع GetDC و ReleaseDC :
اگر بخواهید شماره Handle یک DC را بدست بیاورید، از تابع GetDC استفاده خواهید کرد. از آنجایی که این
شماره Handle دارای یک منبع نامحدود نیست و یک دسترسی اختصاصی و موقتی را برای برنامه ایجاد می کند
باید هر زمانی که کارتان با DC تمام شد با استفاده از تابع ReleaseDC آنرا آزاد کنید.
مفهوم Handle برای DC ها :
اگر بخواهید روی یک شیء ای چیزی رسم کنید یا تصویرش را بخوانید یا تغییر دهید باید به Device Context
آن شیء دسترسی داشته باشید که به اختصار DC نامیده می شود. در ویندوز هر چیزی که بتوانید داخلش
رسم کنید یا تصویر داشته باشد DC دارد، مثلا پنجره هایی که تصویر دارند و چاپگر (پرینتر)
DC هم مثل پنجره توسط یک شماره Handle شناسایی می شود، مثلا مشخصه hDC که در فرم ها و برخی از
کنترل های ویژوال بیسیک وجود دارد، شماره Handle ای است که DC آن شیء را مشخص می کند،
مثل Picture1.hDC و Form1.hDC
مفهوم ScaleMode :
واحد اصلی رسم گرافیکی در ویندوز پیکسل است اما در ویژوال بیسیک می تواند با هر واحد نسبی دیگری
هم انجام شود، مثل سانتی متر و میلی متر و ... بنا بر این قبل از اینکه بخواهید چیزی ترسیم کنید و یا
ابعاد یک تصویر را بسنجید باید واحد آنرا مشخص کنید. واحد پیشفرض در ویژوال بیسیک Twips است، هر
سانتی متر برابر با 567 Twips است.
مفهوم AutoRedraw :
اگه AutoRedraw در حالت False باشه، هر چیزی که روی فرم یا PictureBox رسم می کنید فقط و فقط
روی صفحه نمایش رسم میشه و در حافظه داخل شیء ثبت نمیشه. در نتیجه اگر پنجره ای روی شیء
حرکت کند آنچیزی که قبلا ترسیم کرده اید پاک می شود. از آن بدتر اینکه موقع ذخیره کردن تصویر
ترسیم ها ثبت نمی شوند. بنابر این AutoRedraw را به True تغییر می دهیم تا آنچه که ترسیم می شود
در حافظه Image ثبت شود. سرعت ترسیم در حالتی که AutoRedraw مقدار True دارد کندتر است
و حافظه RAM بیشتری مصرف می کند و به همین دلیل بصورت پیشفرض False می باشد.
برنامه یک PictureBox را به اندازه صفحه Desktop بزرگ می کند، سپس پنجره Desktop را پیدا می کند، و با
استفاده از DC اش هر چیزی که داخلش ترسیم شده به داخل PictureBox درون برنامه کپی می کند.
بعد محتویات PictureBox را با فرمت bmp ذخیره می کند. سپس با bmp2jpg آن فایل را به jpg تبدیل می نماید.