2014-04-10 42 views
0

我使用C++ Builder和尝试使用DrawFocusRect功能:如何更改DrawFocusRect笔的宽度?

DrawRect.left = X; 
DrawRect.top = Y; 
DrawRect.right = X; 
DrawRect.bottom = Y; 
Canvas->DrawFocusRect(DrawRect); 

的问题是,这个矩形是隐约可见。我试过这个:

Canvas->Pen->Width = 2; 

但是没有成功。是否有可能改变焦点矩形的宽度,还是有其他方法可以使用?

回答

1

此方法映射到Windows API函数DrawFocusRect。该文档它说:

Windows XP中:焦点矩形现在可以比1个像素厚,所以它更可见于高分辨率,高密度显示和访问需求。这由SystemParametersInfo中的SPI_SETFOCUSBORDERWIDTHSPI_SETFOCUSBORDERHEIGHT来处理。

所以你确实可以控制宽度。但是,您所做的修改适用于当前桌面上的所有程序。我很确定这不是你想要的。所以我的建议是你不使用DrawFocusRect,而是手动绘制这个矩形。这很容易做到。它只是交替黑白像素,可以用BitBlt高效地绘制。很可能还有其他更简单的方法。

+0

当使用简单的矩形时,在绘制第二个矩形之前删除矩形时出现问题。它看起来很乱。 – Tracer

+0

那么,这与问题中提出的问题有些不同。这种问题的常见原因是你在错误的时间画画。通常你会响应'WM_PAINT'(在VCL中翻译为覆盖'Paint'方法或'OnPaint'事件处理程序)。如果你在那段时间以外画画,那么你可能遇到这样的问题。 –

+0

我做到了。实际上,它非常简单 - 只需将笔的颜色更改为白色,然后重绘旧矩形(这会导致它看起来像不可见),然后在绘制新矩形之前将笔颜色更改为黑色。谢谢! – Tracer