PDA

View Full Version : ScrollBar



quack
شنبه 19 شهریور 1384, 07:44 صبح
سلام
برای کار کردن با ScrollBar غیر از SetScrollRang چه کاری باید انجام داد . چون موقع اجرا نمی تونم با موس اونو حرکت بدم

C++Lover
دوشنبه 21 شهریور 1384, 13:04 عصر
سلام شما باید window message های WM_HSCROLL و WM_VSCROLL را برای parent window کنترلتان handle کنید.
اگر موفق نشدید بگویید اطلاعات بیشتری بدهم.

quack
دوشنبه 21 شهریور 1384, 16:44 عصر
اگه بیشتر توضیح بدید ممنون میشم

C++Lover
سه شنبه 22 شهریور 1384, 00:52 صبح
وقتی که کاربر عملی را روی یک Scroll bar انجام می دهد یک window message بصورت WM_HSCROLL یا WM_VSCROLL بسته به کنترل به parent window ی کنترل فرستاده می شود.
که در اینجا WM_VSCROLL را به اختصار توضیح می دهم.
WPARAM و LPARAM به صورت زیر می باشد.

WPARAM:
کلمه پایین این پارامتر شامل :
SB_ENDSCROLL عمل Scroll تمام شده. معمولا وقتی که کاربر کلید mouse را رها می کند.

SB_LINEDOWN وقتی که کاربر روی دگمه پایینی کنترل کلیک می کند.

SB_LINEUP وقتی که کاربر روی دگمه بالایی کنترل کلیک می کند.

SB_PAGEDOWN وقتی که کاربر در فضای خالی پایین دگمه متحرک کنترل کلیک می کند.

SB_PAGEUP وقتی که کاربر در فضای خالی بالای دگمه متحرک کنترل کلیک می کند.

SB_THUMBPOSITION وقتی که کاربر دگمه متحرک کنترل را گرفته و جابجا می کند و سپس دگمه mouse را رها می کند. در اینصورت کلمه بالایی WPARAM شامل محل جدید دگمه متحرک می باشد.

SB_THUMBTRACK همزمان با گرفتن دگمه متحرک توسط کاربر و حرکت دادن آن این پیغام فرستاده میشود یعنی هر حرکت دگمه متحرک فرستاده می شود بر خلاف SB_THUMBPOSITION که فقط زمانی فرستاده می شود که کاربر کلید mouse را رها کند SB_THUMBTRACK قبل از رها کردن کلید mouse نیز به طور مداوم فرستاده می شود. در این حالت نیز کلمه بالای WPARAM شامل محل جدید دگمه متحرک می باشد.

SB_BOTTOM کاربر یک عمل scroll رو به پایین انجام داده است. مثلا وقتی روی کنترل کلیک راست میکند و Bottom را از منو انتخاب می کند.

SB_TOP کاربر یک عمل scroll رو به بالا انجام داده است. مثلا وقتی روی کنترل کلیک راست میکند و Top را از منو انتخاب می کند.

همان طور که در بالا ذکر شد فقط در صورت THUMBPOSITION یا SB_THUMBTRACK کلمه بالایی WPARAM شامل محل جدید دگمه متحرک می باشد. در این صورت شما می توانید با استفاده از SetScrollPos محل جدید را بروز رسانی کنید و اعمال دیگر مورد نیاز را انجام دهید که این مشکلی که شما ذکر کردید را حل می کند.

LPARAM:
این پارامتر فقط در صورتی که کنترل فرستنده Message یک کنترل باشد که روی dialog قرار داده اید نه ScrollBar داخلی یک پنجره ، شامل Handle کنترل می باشد.
نکته این که LPARAM در صورتی که Message توسط یک ScrollBar داخلی پنجره باشد دارای مقدار NULL میباشد. بنابراین همیشه قبل از استفاده از آن مقدار آن را چک کنید.

امیدوارم توانسته باشم کمک کنم.
موفق باشی.

quack
پنج شنبه 24 شهریور 1384, 06:35 صبح
یعنی قسمت متحرک را خومون باکد باید حرکت بدیم . MFC هیچ کاری انجام نمیده ؟؟ !!!!