2
시스템 커서를 강조 표시하는 방법? 많은 스크린 레코딩 응용 프로그램처럼. 이상적으로, 나는 그 주위에 후광을 보여주고 싶다. 감사합니다C# 커서 강조/팔로워
시스템 커서를 강조 표시하는 방법? 많은 스크린 레코딩 응용 프로그램처럼. 이상적으로, 나는 그 주위에 후광을 보여주고 싶다. 감사합니다C# 커서 강조/팔로워
순수하게 관리되는 솔루션의 경우 다음 코드는 바탕 화면에 현재 마우스 커서 위치에 타원을 그립니다.
Point pt = Cursor.Position; // Get the mouse cursor in screen coordinates
using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
{
g.DrawEllipse(Pens.Black, pt.X - 10, pt.Y - 10, 20, 20);
}
타이머를 사용하면 예를 들어 20ms마다 마우스 위치를 업데이트하고 새로운 hallow (타원)을 그릴 수 있습니다.
내가 생각할 수있는 다른보다 효율적인 방법이 있지만 시스템 후크를 사용하여 코드 변환되지 않은 코드가 필요합니다. 이것에 대한 자세한 정보는 SetWindowsHookEx를보십시오.
업데이트 : 여기 내 의견에 설명 된 해결책의 샘플이 있습니다. 테스트하기 쉽고 간단합니다.
public partial class Form1 : Form
{
private HalloForm _hallo;
private Timer _timer;
public Form1()
{
InitializeComponent();
_hallo = new HalloForm();
_timer = new Timer() { Interval = 20, Enabled = true };
_timer.Tick += new EventHandler(Timer_Tick);
}
void Timer_Tick(object sender, EventArgs e)
{
Point pt = Cursor.Position;
pt.Offset(-(_hallo.Width/2), -(_hallo.Height/2));
_hallo.Location = pt;
if (!_hallo.Visible)
{
_hallo.Show();
}
}
}
public class HalloForm : Form
{
public HalloForm()
{
TopMost = true;
ShowInTaskbar = false;
FormBorderStyle = FormBorderStyle.None;
BackColor = Color.LightGreen;
TransparencyKey = Color.LightGreen;
Width = 100;
Height = 100;
Paint += new PaintEventHandler(HalloForm_Paint);
}
void HalloForm_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawEllipse(Pens.Black, (Width - 25)/2, (Height - 25)/2, 25, 25);
}
}
감사합니다 크리스, 나는 후크와 Graphics.FromHwnd를 사용하여 반투명 후광을 그렸습니다. 그러나 이전에 그린 서클을 지우는 데 문제가 있습니다. InvalidateRect가 IntPtr.Zero 또는 GetDesktopWindow에서 올바르게 작동하지 않는 것 같습니다. 어떤 아이디어? – SharpAffair
안녕하세요, John 님, 데스크톱 복원 문제를 생각하고 있었는데 다음과 같은 아이디어가있었습니다. 처음에 제안한 것처럼 바탕 화면에 직접 그리는 대신 지금 양식을 사용해야하는 이유는 무엇입니까? 따라서 Form, Hallow Form을 새로 만들고 FormBorderStyle = None, BackColor = LightGreen, TransparencyKey = LightGreen, TopMost = true, ShowInTaskBar = false, Width = 100, Height = 100으로 설정하십시오. 이렇게하면 표시되지 않는 양식이 표시되지만 PaintEvent에서 양식에 그리는 모든 항목이 표시됩니다. 그런 다음 초기 응답에서 타이머 이벤트에서 마우스를 추적 할 창 위치를 업데이트하십시오. 빠른 테스트에서 괜찮아 보였습니다. –
내가 생각할 수있는 명백한 문제는 다른 창문이 창문보다 맨 위에 오게되면이 창문이이 창문 위에 나타나지 않는다는 것입니다. –