WinApi:如何在MouseMove事件上正确调整窗口区域的大小?

WinApi:如何在MouseMove事件上正确调整窗口区域的大小?,winapi,regions,Winapi,Regions,我的应用程序是ScreenshotMaker。用户需要选择屏幕区域来制作屏幕截图。我用Win32 API和PURBASIC,但没关系,所有的都与C++类似。 当用户运行应用程序时,半透明的无边框窗体将全屏显示,以便将鼠标挂在所有其他窗口上。鼠标按下时,事件选择开始,我将XORed区域应用于窗体,以在窗体上按当前选择的大小剪切一个孔 我在每个mousemove事件上创建并应用一个新区域: rgn1 = CreateRectRgn_(0,0,DWidth,DHeight) ; full size o

我的应用程序是ScreenshotMaker。用户需要选择屏幕区域来制作屏幕截图。我用Win32 API和PURBASIC,但没关系,所有的都与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++的例子是可以的。

在开始创建区域时,使用<强> CuraReTrggn>强(如在代码中)。 然后调用SetRectRgn函数来更新区域边界就足够了