۱۳۸۷ اسفند ۱۹, دوشنبه

bitblt

امروز میخوام یکی از توابع معروف رو براتون توضیحش رو بزارم که حال مضاعفی ببریم.توی اکثر جاها اگه بخواید آموزش این تابع رو یادبگیرید با نگاه اول به متن اون آموزش مختون سوت میکشه ولی باید بدونید که یکی از توابع ساده هستش.خب حرف بسه بریم سراغ اصل مطلب.
فرمت تابع bitblt به شکل زیر هستش.
Private Declare Function BitBlt Lib "gdi32.dll" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

البته اگه میخواید توی ماژول تعریفش کنید معمولآ باید بجای private از public استفاده کنید.
حالا به ترتیب توضیحشون میدم.
hDestDC=اچ دی سی (hdc) کنترلی که عکس به اون منتقل میشه.یعنی عکس ما توش کپی میشه.
x=نقطه ی شروع ترسیم(عکس جدید)در راستای افقی.
y=نقطه ی شروع ترسیم(عکس جدید)در راستای عمودی.
nWidth=عرض تصویر جدید.
nHeight=طول تصویر جدید.
hSrcDC=اچ دی سی (hdc) کنترلی که تصویر از اونجا کپی میشه(کنترل مبدع).
xSrc=نقطه ی شروع کپی شدن در راستای افق عکس(کنترل مبدع)
ySrc=نقطه ی شروع کپی شدن عکس در راستای عمود(کنترل مبدع)
dwRop=یک ثابت(constant)که در زیر توضیح داده شده.
تعداد زیادی ثابت وجود داره ولی ما با تابع زیر شروع میکنیم.این تابع عکس رو بدون هیچ دستکاری از کنترل مبدع به کنترل مقصد کپی میکنه.
Private Const SRCCOPY As Long = &HCC0020

در زیر یک نمونه اورده شده است.
  BitBlt Picture2.hDC, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight, Picture1.hDC, 0, 0, SRCCOPY

به ثابت روبه رو نگاه کنید.              Public Const MERGEPAINT = &HBB0226
این ثابت به رنگ پس زمینه ی کنترلی که عکس در آن کپی میشود بستگی دارد.
رنگ backcolor کنترل مقصدرو عوض کنید و بعد عکس رو کپی کنید و نتیجه رو ببینید.
ثابتت زیر رنگ عکس کپی شده رو عوض میکنه ولی با backcolor کاری نداره.
Public Const NOTSRCCOPY = &H330008
همون طور که گفتم برای این تابع ثوابت زیادی وجود داره که در زیر لیست شدن.ولی از توضیح دادن همه ی آنها معذورم.البته خودتون راحت میتونید دونه دونه امتحانش کنید.
Public Const BLACKNESS = &H42
Public Const DSTINVERT = &H550009
Public Const MERGECOPY = &HC000CA
Public Const MERGEPAINT = &HBB0226
Public Const NOTSRCCOPY = &H330008
Public Const NOTSRCERASE = &H1100A69
Public Const SRCAND = &H8800C6
Public Const SRCCOPY = &HCC0020
Public Const SRCERASE = &H440328
Public Const SRCINVERT = &H660046
Public Const SRCPAINT = &HEE0086
Public Const WHITENESS = &HFF0062


Input Output

خب خیلی جاها من دیدم که گفتن نمیشه با ویژوال بیسیک ورودی خروجی هارو کنترل کرد. در صورتی که این حرف کاملآ اشتباه هست. ویژوال بیسیک قابلیت کنت...