2011-10-26 13 views
5

के बिना सी # में ग्राफिक्स कैसे आकर्षित करूं, मेरे पास वर्तमान में एक कंसोल एप्लिकेशन है। मैं फॉर्म के बिना स्क्रीन पर ग्राफिक्स कैसे आकर्षित करूं।मैं बिना किसी फॉर्म

+1

क्यों आप एक फॉर्म नहीं बनाते हैं और इसे द्वितीयक धागे में चलाते हैं? –

+0

क्योंकि जो कुछ मैं कर रहा हूं उसके लिए कोई रूप नहीं है। –

+0

एक फॉर्म एक खिड़की के लिए सिर्फ एक अमूर्त है। आप इस तथ्य को छोड़ सकते हैं कि यह एक रूप है और इसे एक सामान्य विंडो के रूप में उपयोग करें। आप Windows api CreateWindowEx का उपयोग भी कर सकते हैं Windows.Form dll के उपयोग को छोड़कर, लेकिन आपको बहुत सारे काम करने की आवश्यकता होगी क्योंकि आपके पास उस मामले में कोई भी जीडीआई फ़ंक्शन नहीं है। –

उत्तर

7

EDIT - CuddleBunny की टिप्पणी के आधार पर, मैंने एक कक्षा बनाई है जो मूल रूप से "स्क्रीन पर ग्राफिक्स खींचेंगी।"

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Drawing; 
using System.Windows.Forms; 
namespace WindowsFormsApplication4 
{ 
    class test : Form 
    { 
     public test() : base() 
     { 
      this.TopMost = true; 
      this.DoubleBuffered = true; 
      this.ShowInTaskbar = false; 
      this.FormBorderStyle = FormBorderStyle.None; 
      this.WindowState = FormWindowState.Maximized; 
      this.BackColor = Color.Purple; 
      this.TransparencyKey = Color.Purple; 
     } 
     protected override void OnPaint(PaintEventArgs e) 
     { 
      e.Graphics.DrawRectangle(Pens.Black, 0, 0, 200, 200); 
      this.Invalidate(); //cause repaint 
     } 
     public static void Main(String[] args) 
     { 
      Application.Run(new test()); 
     } 
    } 
} 

उम्मीद है कि यह मदद करता है।

वर्ष दोषपूर्ण जवाब


आप किसी अन्य विंडो के hwnd हो और उस पर आकर्षित कर सकते हैं। मुझे यकीन नहीं है कि पूरी स्क्रीन पर कैसे आकर्षित किया जाए, हालांकि, मैंने हमेशा खुद को आश्चर्यचकित कर दिया है।

एक साधारण उदाहरण:

  Process p = Process.GetProcessById(0); //id of the process or some other method that can get the desired process 
     using (Graphics g = Graphics.FromHwnd(p.MainWindowHandle)) 
     { 
      g.DrawRectangle(Pens.Black, 0, 0, 100, 100); 
     } 
2

आप ग्राफिक्स के लिए आकर्षित करने के लिए किसी तरह के एक खिड़की बनाना होगा। आप सीधे स्क्रीन पर नहीं आ सकते हैं।

+0

मुझे पूरी तरह से यकीन नहीं है, लेकिन इस एप्लिकेशन को पुश कहा जाता है (जो आपको स्क्रीनशॉट अपलोड करने देता है) http://puush.me/ आपको कैप्चर करने के लिए स्क्रीन के क्षेत्र का चयन करने के लिए एक आयत स्क्रीन पर खींचता है, और ऐसा प्रतीत होता है किसी भी खिड़की की जरूरत नहीं है। विज्ञापन नहीं, लेकिन मैंने हमेशा सोचा है कि यह कैसे करता है। – Zhanger

+4

मुझे यकीन है कि यह एक "विंडो" का उपयोग करता है लेकिन जिस विंडो में यह चित्रित हो रहा है उसके पास कोई क्रोम नहीं है। आप फॉर्म प्रपत्र बनाकर, विंडो की शैली को "none" और पारदर्शी पृष्ठभूमि में सेट करके इस प्रभाव को फिर से बना सकते हैं। इसके बाद उपयोगकर्ता केवल उन्हीं चीज़ों को देखेगा जो आप फ़ॉर्म में जोड़ते हैं। puush.me के मामले में, मुझे यकीन है कि यह एक पारदर्शी पृष्ठभूमि के साथ एक पूर्णस्क्रीन विंडो बनाता है। – CuddleBunny

+0

CuddleBunny, जो एक स्टैंडअलोन उत्तर के योग्य है (विशेष रूप से यदि आप इसे कुछ नंगे हड्डियों के कोड के साथ रस देते हैं)। –

1

यदि आप एक पूर्ण स्क्रीन directdrawsurface बनाते हैं तो आप डायरेक्टएक्स का उपयोग कर खिड़की के बिना पूरी स्क्रीन पर खींच सकते हैं। स्क्रीन सब तुम्हारा है (बिल्कुल विंडोज़ डेस्कटॉप नहीं)।

संबंधित मुद्दे