这个问题便得制造出笔的Mask图,与Invert的Mask图,该Mask图长像是:背景颜色(本例是蓝色)变成白色,其他颜色变成黑色,而Inver的Mask图则反之。
本范例使用GetMaskPic()来取得Mask图的Handle of Memory DC (hMaskDC),用
GetInvertMaskPic()来取得Invert Mask图的Handle of Memory DC(hInvertMaskDC),事实上,如果想要二者同时取得实在没有必要分成两个函式来做,只要一个就好了,
这里只是一个范例,告诉大家如果想要个别取得时该如何做啦。
我将这原理简单的说明一下:
1.hdcMono = CreateCompatibleDC(0)
产生一个Memory DC(与目前萤幕hDC相容),此时该MemoryDC绘的大小只有一个单色pixel
2.hbmpMono = CreateCompatibleBitmap(hdcMono, dx, dy)
产生一个大小是dx*dy 的Bitmap,而它的第一个叁数是Memory DC所以是单色的BitMap
3.hbmpOld = SelectObject(hdcMono, hbmpMono)
这个动作一做,该hdcMono的绘图区就变成hbmpMono了,也就是说可以想像hdcMono有一个大小是dx*dy(by pixels)的绘图区,在其上的画图会反映到hBmpMono之上
4.picBack.AutoRedraw = True
设定picBack.hDc指的是memory中的那份背景图
5.picBack.BackColor = RGB(255, 255, 255)
设picBack的背景是白色,如此也会同时也使Window background Color变成白色,这边要提出说明的是,vb的BackColor指的是什麽大家都知道,但Window中的BackGround Color
却不太相同,Window的 BackGround Color指的是在其上画线条或Print文字时,填充於线条 或文字外面的颜色,vb中一律使用Form/pictureBox的BackColor来填充,也就是说当BackColor变了时,同时也是让Window中所谓Background Color变,可以用以下程式一试
便知: