jafar_hoggt
07-04-2006, 16:38
تغيير وضوح صفحه نمايش از طريق برنامه
بر گرفته از سايت مجله كامپيوتر و ارتباطات
تغيير وضوح نمايش معمولا در برنامه هايی كه به طور تمام صفحه اجرا میشوند كاربرد دارد. در اين برنامهها برنامهنويس تمايل دارد كه برنامه تمام صفحه را بپوشاند در حالی كه تغيير اندازه گرافيك و مختصات اشياء متناسب با وضوح جاری ويندوز كاری دشوار و گاهی اوقات غير ممكن است. به همين دليل بهترين راه اين است كه برنامهنويس برنامه اش را برای يك وضوح خاص مثلا ٦٤٠x٤٨٠بنويسد و در زمان اجرا اگر وضوح ويندوز چيزی غير از اين بود برنامه وضوح نمايش را بصورت خودكار روی ٦٤٠x٤٨٠ قرار دهد. از برنامههايی كه بطور تمام صفحه اجرا میشوند میتوان به برنامههای چند رسانهای اشاره كرد.
استفاده از Direct X میتواند يك راه حل باشد اما برای خيلی از برنامهنويسان كه مايلند به دلايل مختلف برنامهشان فقط از امكانات GDI ويندوز و محيط برنامه نويسی مورد علاقه شان استفاده كند راه حل مناسبی نيست.
در API ويندوز تابعی وجود دارد به نام ChangeDisplaySettings كه وظيفه آن اعمال تغييرات و تنظيم ابزار نمايشی اعم از صفحه نمايش يا چاپگر میباشد. حال به توضيح مختصر در مورد نحوه استفاده از اين تابع برای تغيير وضوح صفحه نمايش میپردازيم.
; ( LONG ChangeDisplaySettings ( LPDEVMODE lpDevMode , DWORD Flags
پارامتر اول اشاره گر به ساختاری است كه توسط آن وضوح افقی و عمودی و عمق رنگ مورد نظر و حتی فركانس جاروب صفحه را میتوان تعيين كرد. پارامتر دوم تعيين كننده رفتار تابع هنگام تغيير وضوح است كه به عنوان مثال وضوح مورد درخواست ابتدا آزمايش شود يا مستقيما و بدون آزمايش تغيير وضوح اعمال گردد.
ساختار DEVMODE شامل اعضای مهم زير است :
وضوح افقی بر حسب پيكسل dmPelsWidth
وضوح عمودی بر حسب پيكسل dmPelsHeight
عمق رنگی صفحه ( بيت بر پيكسل ) dmBitsPerPel
تعيين كننده معتبر بودن مقدار هر يك از عضوهای صاختار dmDisplayFlags
حال فرض كنيد میخواهيم توسط برنامه وضوح صفحه نمايش را روی 480x640 پيكسل با عمق رنگ 16 بيتی (65536 رنگ) تنظيم كنيم. برای اين كار مراحل زير را انجام میدهيم.
; DEVMODE dm
; ( ( memset ( &dm , 0 , sizeof ( DEVMODE
; ( dm.dmSize = sizeof ( DEVMODE
كاری كه سه خط بالا انجام میدهد فقط مقدار دهی اوليه ساختار DEVMODE است.
; dm.dmPelsWidth = 640
; dm.dmPelsHeight = 480
; dm.BitsPerPel = 16
اين سه خط برنامه هم مشخصات وضوح مورد نظر ما را در ساختار DEVMODE ذخيره میكند.
; dm.DisplayFlags = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL
خط فوق هم در واقع تعيين میكند كه كدام عضوها در ساختار DEVMODE معتبر هستند و در هنگام اجرای تابع بايد به آنها ترتيب اثر داده شود.
پس از انجام مراحل بالا میتوانيم تابع ChangeDisplaySettings را به صورت زير فراخوانی كنيم :
; ( ChangeDisplaySettings ( &dm , 0
فرستادن مقدار صفر به پارامتر دوم بيانگر اين است كه ما میخواهيم تغيير وضوح بلافاصله و بدون آزمايش اعمال گردد. پس از اجرای اين تابع وضوح صفحه نمايش به 640x480 پيكسل با عمق رنگی ١٦ بيت تغيير خواهد كرد و اين تغييرات تا هنگام شروع مجدد ويندوز يا اعمال تغيير وضوح بعدی باقی خواهد ماند. البته وضوح مورد درخواست شما بايد توسط كارت گرافيكی و مونيتور پشتيبانی شود در غير اينصورت هيچ تغييری در وضوح صفحه نمايش ايجاد نخواهد شد.
براي بر داشتن سورس كامل مقاله به آدرس وب سايت مجله مراجعه كنيد
برگرفته از سایت برنامه نویس
بر گرفته از سايت مجله كامپيوتر و ارتباطات
تغيير وضوح نمايش معمولا در برنامه هايی كه به طور تمام صفحه اجرا میشوند كاربرد دارد. در اين برنامهها برنامهنويس تمايل دارد كه برنامه تمام صفحه را بپوشاند در حالی كه تغيير اندازه گرافيك و مختصات اشياء متناسب با وضوح جاری ويندوز كاری دشوار و گاهی اوقات غير ممكن است. به همين دليل بهترين راه اين است كه برنامهنويس برنامه اش را برای يك وضوح خاص مثلا ٦٤٠x٤٨٠بنويسد و در زمان اجرا اگر وضوح ويندوز چيزی غير از اين بود برنامه وضوح نمايش را بصورت خودكار روی ٦٤٠x٤٨٠ قرار دهد. از برنامههايی كه بطور تمام صفحه اجرا میشوند میتوان به برنامههای چند رسانهای اشاره كرد.
استفاده از Direct X میتواند يك راه حل باشد اما برای خيلی از برنامهنويسان كه مايلند به دلايل مختلف برنامهشان فقط از امكانات GDI ويندوز و محيط برنامه نويسی مورد علاقه شان استفاده كند راه حل مناسبی نيست.
در API ويندوز تابعی وجود دارد به نام ChangeDisplaySettings كه وظيفه آن اعمال تغييرات و تنظيم ابزار نمايشی اعم از صفحه نمايش يا چاپگر میباشد. حال به توضيح مختصر در مورد نحوه استفاده از اين تابع برای تغيير وضوح صفحه نمايش میپردازيم.
; ( LONG ChangeDisplaySettings ( LPDEVMODE lpDevMode , DWORD Flags
پارامتر اول اشاره گر به ساختاری است كه توسط آن وضوح افقی و عمودی و عمق رنگ مورد نظر و حتی فركانس جاروب صفحه را میتوان تعيين كرد. پارامتر دوم تعيين كننده رفتار تابع هنگام تغيير وضوح است كه به عنوان مثال وضوح مورد درخواست ابتدا آزمايش شود يا مستقيما و بدون آزمايش تغيير وضوح اعمال گردد.
ساختار DEVMODE شامل اعضای مهم زير است :
وضوح افقی بر حسب پيكسل dmPelsWidth
وضوح عمودی بر حسب پيكسل dmPelsHeight
عمق رنگی صفحه ( بيت بر پيكسل ) dmBitsPerPel
تعيين كننده معتبر بودن مقدار هر يك از عضوهای صاختار dmDisplayFlags
حال فرض كنيد میخواهيم توسط برنامه وضوح صفحه نمايش را روی 480x640 پيكسل با عمق رنگ 16 بيتی (65536 رنگ) تنظيم كنيم. برای اين كار مراحل زير را انجام میدهيم.
; DEVMODE dm
; ( ( memset ( &dm , 0 , sizeof ( DEVMODE
; ( dm.dmSize = sizeof ( DEVMODE
كاری كه سه خط بالا انجام میدهد فقط مقدار دهی اوليه ساختار DEVMODE است.
; dm.dmPelsWidth = 640
; dm.dmPelsHeight = 480
; dm.BitsPerPel = 16
اين سه خط برنامه هم مشخصات وضوح مورد نظر ما را در ساختار DEVMODE ذخيره میكند.
; dm.DisplayFlags = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL
خط فوق هم در واقع تعيين میكند كه كدام عضوها در ساختار DEVMODE معتبر هستند و در هنگام اجرای تابع بايد به آنها ترتيب اثر داده شود.
پس از انجام مراحل بالا میتوانيم تابع ChangeDisplaySettings را به صورت زير فراخوانی كنيم :
; ( ChangeDisplaySettings ( &dm , 0
فرستادن مقدار صفر به پارامتر دوم بيانگر اين است كه ما میخواهيم تغيير وضوح بلافاصله و بدون آزمايش اعمال گردد. پس از اجرای اين تابع وضوح صفحه نمايش به 640x480 پيكسل با عمق رنگی ١٦ بيت تغيير خواهد كرد و اين تغييرات تا هنگام شروع مجدد ويندوز يا اعمال تغيير وضوح بعدی باقی خواهد ماند. البته وضوح مورد درخواست شما بايد توسط كارت گرافيكی و مونيتور پشتيبانی شود در غير اينصورت هيچ تغييری در وضوح صفحه نمايش ايجاد نخواهد شد.
براي بر داشتن سورس كامل مقاله به آدرس وب سايت مجله مراجعه كنيد
برگرفته از سایت برنامه نویس