主题:  填充功能的实现

idea

职务:普通成员
等级:1
金币:1.0
发贴:289
#12002/8/29 8:49:09
--winapi.u32
先画一个黑线白方块。
方块上放一热区。
按热区执行一下代码:

hdc:=GetDC( WindowHandle)
brush:=CreateSolidBrush(RGB(255,0,0))
SelectObject(hdc, brush)
c:="RGB(0,0,0)"
ExtFloodFill(hdc, CursorX, CursorY, c,0)



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
#22002/8/29 8:59:51
测试通过了吗?2000系统下?



idea

职务:普通成员
等级:1
金币:1.0
发贴:289
#32002/8/29 9:21:14
98



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
#42002/8/29 9:26:16
2K下什么反应也没有噎!



idea

职务:普通成员
等级:1
金币:1.0
发贴:289
#52002/8/29 10:26:28
2k下:
ExtFloodFill(hdc, CursorX, CursorY, c,0)
返回错误
难道2k下 ExtFloodFill有变?



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
#62002/8/29 10:29:30
是啊。。98和2K的API函数还是有区别的。。



idea

职务:普通成员
等级:1
金币:1.0
发贴:289
#72002/8/29 10:35:04
函数功能:该函数将使用当前刷子填充显示表面区域。

函数原型:BOOL ExtFloodFill(HDC hdc,int nXStart,int nYStart,COLORREF crColor,UINT fuFillType);

参数:

hdc:设备环境句柄。

nXSTart:指定要开始填充处的逻辑X轴坐标。

nYStart:指定要开始填充处的逻辑Y轴坐标。

crColor:指定要填充的边界或区域的颜色。crColor的具体解释要根据参数fuFillType的值而定。

fuFillType:指定要进行的填充操作类型。该参数必须是下列值之一,这些值的含义如下:

FLOODFILLBORDER:表示填充区域是由crColor参数指定的颜色包围起来的部分。这种形式与FloodFill函数执行的填充类型一样。

FLOODFILLSURFACE:表示填充区域是由crColor指定的颜色来定义。填充操作向四周伸展,直到遇到这种颜色为止。这种操作式样对于带有多种颜色边界的填充区域有用。

返回值:如果函数执行成功,那么返回值为非零;如果函数执行失败,那么返回值为零。若想获得更多错误信息,请调用GetLastError函数。

备注:下列原因可能引起函数执行失败:

填充无法完成。

指定的像素点有着参数crColor(如果要求FLOODFILLBORDER操作样式)指定的边界颜色(即颜色相同)。

指定的像素点没有参数crColor(如果要求FLOODFILLSURFACE操作样式)指定的颜色。

该点在剪辑区之外――也就是说在设备中不可见。

如果fuFillType参数为FLOODFILLBORDER,那么系统认为要填充的区域是完全被参数crColor指定的颜色包围起来的。该函数从参数nXStart和nYStart指定的点开始填充,向四周继续,直到遇到边界为止。

如果fuFillType是FLOODRILLSURFACE,那么系统就认为要填充的区域是单颜色的,函数从nXStart和nYStart两个参数指定的点开始填充区域,并向四周延伸,对包含参数crColor指定颜色的所有相邻区域进行填充。

只有支持光栅显示操作的设备和内存设备环境才支持ExtFloodFill函数。为了确定设备是否支持该技术,可使用函数GetDeviceCaps。

速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:wingdi.h;库文件:gdi32.lib。

大家研究研究......



davichiu

职务:普通成员
等级:1
金币:0.0
发贴:21
#82002/8/29 11:01:13
請問idea版主,

對於BOOL ExtFloodFill(HDC hdc,int nXStart,int nYStart,COLORREF crColor,UINT fuFillType)的描述如此清楚,請問你是參考那裏呢???

我看winapi.u32中的指令時
它都僅寫請參考windows SDK是何意思??



idea

职务:普通成员
等级:1
金币:1.0
发贴:289
#92002/8/29 11:10:29
winapi.u32说的不错
台湾的兄弟,你可以到www.microsoft.com
搜索关键字:ExtFloodFill
就有答案。

最新进展:ExtFloodFill用VB做在2k下用,成功。
待我仔细研究......



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
#102002/8/29 11:15:35



davichiu

职务:普通成员
等级:1
金币:0.0
发贴:21
#112002/8/30 10:24:14
謝謝