View Full Version : سوال: در مورد scroll های افقی و عمودی کنترل لیست باکس در mfc
feri88
شنبه 10 اسفند 1387, 21:06 عصر
سلام
من توی mfc یه دیالوگ ایجاد کردم و یک کنترل ListBox بهش اضافه کردم
توی خاصیت های مربوط به این کنترل 2 تا بخش هست به اسم Horizontal Scroll و Vertical Scroll که من هر دو اونها رو فعال کردم
حالا وقتی با دستور Addstring بهش رشته اضافه می کنم، وقتی محتویات اون به طور عمودی زیاد میشه ، Scroll عمودی فعال میشه و می تونم توی لیست باکس بالا و پایین برم ولی وقتی عرض یه رشته زیاد میشه، Scroll افقی فعال نمیشه تا بتونم به صورت افقی توی کادر لیست باکس حرکت کنم و ادامه اون رشته رو ببینم و فقط تا جایی که عرض خود لیست باکس هست، رشته رو نشون میده و ادامه رشته رو نمی تونم ببینم
به نظرتون چرا این مشکل پیش میاد؟
راستی این مشکلو توی ویژوال استودیو 2008 دارم
بعد یه چیز دیگه: توی لیست باکس میشه یه تنظیماتی انجام داد که اگه طول یه رشته که قراره توی لیست باکس نوشته بشه زیاد شد، اونو به صورت چند خطی نشون بده
یعنی ادامه رشته رو تو چند خط به عرض کنترل لیست باکس نشون بده تا بشه کامل اونو دید؟
مرسی
Nima_NF
شنبه 10 اسفند 1387, 23:59 عصر
horizontal scroll باید توسط کدنویسی کنترل شود، یعنی هر وقت که چیزی به listbox اضافه شد باید طول آن محاسبه شود و سپس تابع SetHorizontalExtent فراخوانی شود تا این scroll کار کند.
برای اطلاعات بیشتر از مقالات زیر استفاده کنید:
http://www.flounder.com/hscroll.htm
http://www.codeguru.com/cpp/controls/listbox/article.php/c4759
در مورد سوال دوم شما، فکر نمی کنم در حالت عادی بتوان چنین کاری کرد. در هر حال شما می توانید یک listbox از نوع Owner Draw تعریف کنید و خودتان تعیین کنید که محتویات داخلش چطور نمایش داده شود. برای نمونه لینک زیر را مطالعه کنید:
http://www.codeguru.com/cpp/controls/controls/lists,treesandcombos/article.php/c2291
feri88
چهارشنبه 14 اسفند 1387, 18:39 عصر
سلام
مرسی
اون مثالهای Scroll افقی درست درست کار کرد.
ولی من اون مثال MultiLineListBox رو اجرا کردم یعنی تو یه پروژه دیگه از هدر و سورسش استفاده کردم و محتوای دو تا از متن ها رو زیاد کردم که ببینم میره خطهای بعدی یا نه، به این صورت:
m_ctrList.AddEntry( L"Text 2:\r\nThis text is simply just one long line of text that is broken down into several lines by the CColorListBox Class.kkjhgfdsssvvnnkkk,lkjgffddsssaaaSDFGHKLLKKJJ HGFFDDSFGHJHGJGJHGJJJJJJJJJJJJJJJGHGJHGJHGJHGJHGJH GJHGJHG", RGB(255,255,255), 1 );
m_ctrList.AddEntry( L"Text 3:\r\nThe background colors of each item can be set when you first place in the text.GHJGJHGJHGJHGHGJGHGJHHHHHHHHGJHGJHHHHHHHHHHHH HHHHHHHGJHGJHGJHJKHJJHJJJJJJJJJJJJJJJJJJHJHJJHHHHH HHHHHHHHHHHHHHHHHHHHHHHHHHHJJJJJJJJJJJJJJJJ", RGB(255,255,255), 2 );
ولی خروجیش این جوری شد:
http://tinypic.info/files/cypuqtspp0bdehcu0pwq.jpg
چرا اون کاراکترهایی که من اضافه کردم رو درست نشون نمی ده؟
توی Text2 که اصلا خط سوم رو درست نشون نمی ده، توی Text3 هم بقیه کاراکترها رو اصلا نشون نمیده، یعنی نمیاره تو یه خط جدید.
آخه اون رشته ای که من می خوام تو برنامه ام اضافه کنم، حدود 5-6 خطه ولی این برنامه درست جواب نداد
می خواستم این سوالو اون جا بپرسم ولی چون مقاله اش مال خیلی وقت پیش بود، گفتم شاید جواب ندن به خاطر همین از شما پرسیدم.
اشکال این برنامه کجاست؟
عملکردشم دیدم که طول رشته و مشخصات مستطیلو میگیره و طول مستطیل رو دوباره حساب می کنه تا رشته چند خطی بشه، پس چرا اینجا جواب نداد؟
Nima_NF
چهارشنبه 14 اسفند 1387, 21:24 عصر
در برنامه اصلی در همان سایت به درستی ارتفاع نوشته برای سایر نوشته ها با طول ها مختلف در MeasureItem اندازه گرفته می شود و به درستی نمایش داده می شود.
در برنامه از فلگ DT_WORDBREAK استفاده می شود و خودکار لغات را می شکند، اما کدهای شما اصلا space یا فضای خالی بین لغات ندارد و همه کارکترهایی پشت سر هم هستند و DrawText اتومات نمی تواند کد شما را به درستی بشکند. پس در محاسبه اشتباه می کند.
راهکار این است که به جای نوشتن صد تا X پشت سر هم، لغت های زیاد با فضای خالی بنویسید.
در صورتی که می خواهید همچنان برای مواردی مانند این هم جواب داشته باشید خودتان شیوه ای دیگر بنویسید و مثلا تعداد کارکتر ها را بشمرید و مشخص کنید در هر خط چند کارکتر مجاز هست و به این شکل تعداد خط یا طول را بدست آورید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.