好的,基本的答案就是使用:
Cursor.Clip = new Rectangle(x1, y1, x2, y2);
Run Code Online (Sandbox Code Playgroud)
但我的问题有点复杂.
我需要它做的是正确地将自己映射到特定的窗口边界,以便触摸输入将被限制到该窗口,但是将正确地剪切到窗口,以便当我触摸左上角或右下角时触摸屏的一角,它将光标放在窗口的左上角或右下角.使用Cursor.Clip
不会那样做,我在触摸屏上触摸的那个剪切区域之外的东西只会映射到它触摸的窗口的最近边缘.
有什么东西可以让我预先过滤鼠标位置,这样我就能正确调整它的界限吗?
或者,我可以尝试找到一些代码,将鼠标输入转换为TUIO输入并以此方式将其提供给应用程序,但我希望我不必这样做.因此,如果有人知道如何做到这一点,那么如果我的原始请求不可行,那将会有所帮助.
如果您需要确切知道我为什么这样做,我基本上是尝试将视频输入的触摸屏中的鼠标事件提供给可以接收触摸输入(通过正常鼠标事件或TUIO)的3D应用程序该视频,但没有办法最大化到屏幕的全分辨率,因为它只会渲染设置为输出的大小.
精简版:
目标: C#中无边界WinForm中的深色,黑暗,Windows 7阴影
已知的现有解决方案1:使用CreateParams的简单XP风格的阴影.
问题:太弱,太轻,太难看.
已知的现有解决方案2:用位图替换形式的GDI.
问题:失去使用控件的功能,仅作为启动画面使用.
这篇文章的目标:找到这个问题的中位数解决方案,或者更好地解决这个问题.
...
长版:
(编辑:我指的是沿着任何窗体边界的阴影,如果不清楚的话.)我知道有一种方法可以在C#中使用以下方法制作XP风格的阴影:
C#Code 1 - 简单的XP风格的阴影(问题:点亮,变弱,变丑)
// Define the CS_DROPSHADOW constant
private const int CS_DROPSHADOW = 0x00020000;
// Override the CreateParams property
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ClassStyle |= CS_DROPSHADOW;
return cp;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我试图弄清楚如何使它们看起来像Windows 7中的做(更深和更大的阴影),并且无法找出最佳方法.
我有一个现在创建的方法,让我覆盖整个表格GDI,看起来像一个启动画面(信不信任):
C#代码2:用位图替换表单GDI(问题:不能使用表单控件,难以维护GUI)
public void SetBitmap(Bitmap bitmap, byte opacity)
{
if (bitmap.PixelFormat != PixelFormat.Format32bppArgb)
throw new ApplicationException("The bitmap must be 32ppp with alpha-channel.");
// …
Run Code Online (Sandbox Code Playgroud) 问题:在循环中使用此代码3322次(使用底部方法1246次)后,GetHIcon()抛出了一个通用的GDI +异常.
示例项目: http ://dl.dropbox.com/u/18919663/TestGDICursorDrawing.zip
我正在尝试做的事情:从循环中的位图绘制一个新光标来做一个简单的聚焦动画.
我已经检查过的内容:我确保所有位图和图形都被处理并监视内存泄漏以确保.还确保没有其他过程有明显的泄漏.试图确保正确使用位图的替代方法和方法.
谷歌告诉我的: GDI +似乎有一个错误,没有人提供解决方案.一个人试图创建自己的Bitmap to Icon转换器,但它不够灵活,不能做非通用的图像尺寸.
public static Cursor CreateCursor(Bitmap bmp, int xHotSpot, int yHotSpot)
{
//Shows me exactly when the error occurs.
counter++;
Console.WriteLine(counter + " GetHicon() calls");
//GetHicon() is the trouble maker.
var newCur = new Cursor(bmp.GetHicon());
bmp.Dispose();
bmp = null;
return newCur;
}
Run Code Online (Sandbox Code Playgroud)
我试过的其他方法:
public static Cursor CreateCursor(Bitmap bmp, int xHotSpot, int yHotSpot)
{
//Tried this method too, but this method results in an error with even …
Run Code Online (Sandbox Code Playgroud)