我的应用程序是截图制作者。用户需要选择屏幕区域来制作屏幕截图。我使用Win32 API与PureBasic,但没关系,所有都与C ++类似。 当用户运行应用程序时,全屏显示半透明无边框形式以将鼠标悬停在所有其他窗口上。在鼠标按下事件选择开始时,我将XORed区域应用于表单,在其中切出一个当前选择大小的洞。
我在每个 mousemove 事件中创建并应用新区域:
rgn1 = CreateRectRgn_(0,0,DWidth,DHeight) ; full size of desktop
rgn2 = CreateRectRgn_(sx, sy, ex, ey) ; current selection points
CombineRgn_(rgn1, rgn1, rgn2, #RGN_XOR)
SetWindowRgn_(WindowID(0), rgn1, #True); apply region
它在我的Windows XP计算机上运行良好,但在Vista的其他计算机上运行错误。我认为在每次鼠标移动时创建新的区域对象都是错误的。也许我需要创建一次然后调整大小?任何人都可以解释如何做到这一点吗?关于C ++的例子没问题。
答案 0 :(得分:0)
首先,使用 CreateRectRgn 创建区域(就像在代码中一样)。 然后它足以调用 SetRectRgn 函数来更新区域边界