2015-12-19 16 views
6

Chcę utworzyć aplikację SS. Ale mam problem na ten temat. Chcę, aby użytkownik mógł wybrać specjalny obszar do zrobienia zrzutu ekranu. Chcę również, aby pulpit był podświetlany, gdy użytkownik wybiera obszar. Na przykład użytkownik chce wziąć SS z określonej ramki wideo. Użytkownik musi być w stanie to zrobić podczas odtwarzania wideo. Próbowałem tego, używając rysunku bezpośrednio na pulpicie. Ale migocze tak bardzo. Jak mogę to naprawić lub czy istnieje alternatywny sposób?Jak zrobić wybór obszaru ekranu, rysując na pulpicie, aby wykonać zrzut ekranu?

Mój kod:

[DllImport("User32.dll")] 
    static extern IntPtr GetDC(IntPtr hwnd); 

    [DllImport("user32.dll")] 
    static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase); 

    public Form1() 
    { 
     InitializeComponent(); 
     this.Load += Form1_Load; 
    } 

    void Form1_Load(object sender, EventArgs e) 
    { 
     Start(); 
    } 

    IntPtr handle; 
    Graphics grp; 

    void Start() 
    { 
     handle = GetDC(IntPtr.Zero); 
     grp = Graphics.FromHdc(handle); 
     grp.SmoothingMode = SmoothingMode.HighQuality; 
     timer2.Start(); 
    } 
    private void timer2_Tick(object sender, EventArgs e) 
    { 

     grp.DrawLine(Pens.Red, 0, Cursor.Position.Y, Screen.PrimaryScreen.Bounds.Width, Cursor.Position.Y); 
     InvalidateRect(IntPtr.Zero, IntPtr.Zero, false); 
    } 
+3

FYI - [Greenshot] (http://getgreenshot.org/) robi to i jest darmowy i open source. NET code. Możesz po prostu "zerknąć" na ich kod. – ja72

Odpowiedz

5

Tworzenie formularza z półprzezroczystym (lub całkowicie przezroczysty) tła, które jest zawsze na wierzchu, obramowania i rozmiaru pulpitu. Wykonaj dowolną grafikę wyboru prostokątnego ekranu (na przykład wybrany prostokąt + linie pomocnicze + lupa, całkowicie nieprzezroczysty) w tym formularzu. Po dokonaniu wyboru przez użytkownika ukryj formularz i zrób zrzut ekranu.

+1

Jeśli nie zrozumiałem źle, rysowanie na półprzezroczyste jest znowu przezroczyste tak samo jak formularz. Kiedy ustawię przezroczystość formularza na 0.1, prostokąt wyboru nie wydaje się być żywy. Z drugiej strony nie udało mi się osiągnąć rysunku w całkowicie przejrzystej formie. Czy możesz podać przykład kodu? –

+1

@AliTor - Wiem, uprościłem to w moim oryginalnym wyjaśnieniu. Półprzezroczysta forma działałaby tak, jak mówisz, ale lepszym podejściem jest nieprzezroczysta forma z przezroczystym tłem - więc tylko jej elementy sterujące (np. Wskazówki lub ramka wyboru) pozostaną nieprzezroczyste. Możesz rzucić okiem na niektóre istniejące narzędzia, które z powodzeniem stosują to podejście, np. SnagIt. – miroxlav

+1

OK, zrobiłem to. Myliłem się na punkcie różnicy między ustawianiem nieprzezroczystości a ustawianiem przezroczystości dla przejrzystości. Zrobiłem to ustawiając backcolor formularza jako wartość klucza przejrzystości. Dzięki @miroxlav. –