tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
5889
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Kwons
    Kwons Kwons ist offline Rookie
    Registriert seit
    May 2005
    Ort
    Nsu
    Beiträge
    5


    Wie kann ich hWnd & den hDC in C#.Net abfragen bzw. festlegen ?

    -----------------------------------------------------------------------------------------------------------

    In Visual Basic 6 sieht es so aus:



    Option Explicit

    Private Sub Form_Load()

    Dim MyhWnd As Long

    MyhWnd = Form1.hWnd

    End Sub

    Private Sub Picture1_Click()

    Dim MyhWndOther As Long
    Dim MyhDc As Long

    MyhWndOther = Picture1.hWnd
    MyhDc = Picture1.hDC

    End Sub

    -----------------------------------------------------------------------------------------------------------

    Wer kann mir damit helfen ? Für manche DLL'S benötigt man es, und für die DX 9-Programmierung auch ! ( pressi@kwons.de )
     
    ___________________________________

    WEBMASTER@SENSEI-SOFT.DE

  2. #2
    Avatar von broetchen
    broetchen broetchen ist offline Mitglied Gold
    Registriert seit
    Feb 2004
    Ort
    Österreich/Wien
    Beiträge
    181
    hi

    Ich weiß zwar net wirklich, was hDC bzw. hWnd is, aber ich denk mal, dass hWnd das Handle ist.

    Code :
    1
    2
    
    Form f = new Form();
    IntPtr handle = f.Handle;

    mfg broetchen
     

  3. #3
    Avatar von Kwons
    Kwons Kwons ist offline Rookie
    Registriert seit
    May 2005
    Ort
    Nsu
    Beiträge
    5
    Habe es mal so probiert, funktioniert nicht wirklich

    Aber ich Versuche die Frage mal deutlicher zu stellen:

    private: System::Void MyButton_Click(System::Object * sender, System::EventArgs * e)
    {

    PAINTSTRUCT ps;
    HDC hDC;
    HWND hWnd;

    IntPtr handle = Form1::Handle;

    hWnd = (HWND) handle.ToInt64();

    hDC =BeginPaint (hWnd,&ps);
    SetTextColor (hDC, RGB (255,0,255));

    TextOut (hDC,50,50,"Hallo",5);
    EndPaint (hWnd,&ps);
    }


    Ich benötige ein Fenster-Handler für die GDI-Aufrufe, jedoch bietet das mit dem Net erstellte Fenster KEIN Fenster-Handler (Wie z.B. VB6 bietet), und der eine Handler von der Form (Falls das so ein Handler ist) ist NICHT kompatibel mit dem Win32-Fester-Handler ! Ich möchte blos ein roter Text über die GDI auf die Form ausgeben mit "Hallo", was mache ich da falsch ? (Möchte später gern die BitBlt-Funktion verwenden für Spiele)
     
    ___________________________________

    WEBMASTER@SENSEI-SOFT.DE

  4. #4
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Hi.

    1) Dein Beispiel Code ist kein C# Code.

    2)
    Ich benötige ein Fenster-Handler für die GDI-Aufrufe, jedoch bietet das mit dem Net erstellte Fenster KEIN Fenster-Handler
    Falsch. Klar gibts nen Fenster-Handle. -> Control.Handle Property

    3) Wenn du Zeichnen willst, benutze den System.Drawing Namespace, hole dir ein Graphics-Objekt vom Steuerelement (Control.CreateGraphics)

    MfG,
    Alex
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  5. #5
    Avatar von Kwons
    Kwons Kwons ist offline Rookie
    Registriert seit
    May 2005
    Ort
    Nsu
    Beiträge
    5
    Schön, und wie sieht nun ein Funktionierender Code dazu aus ? Mit der MSDN-Hilfe von Net komme ich nicht zurecht, da Die blos dauernd wohin verweisen, aber nicht wirklich schreiben wie das geht

    Zum dem muß ich vermerken, das ich ein C# .Net Anfänger bin und kein Wort Englisch kann.

    Ich möchte später mit C# DirectX9 Programme schreiben, und manche DLL's benötigen halt ein Fenster-Handler, z.B. für die Funktion SCARD-Server für mein Chip-Karten-Leser, weiß aber Net wie das hier geht. In Visual Basic V.6.0 kenne ich mich dagen recht gut aus, weil aber alles und jenes für C geschrieben ist, habe ich gedacht umzlernen. Ich bin aber kein Fan von Steinzeit-Programmierung ich arbeite lieber mit Form-Gesalter wie in VB6 deshalb will ich NICHT umbedingt mit Visual Studio C ++ V.6.0 arbeiten !
     
    ___________________________________

    WEBMASTER@SENSEI-SOFT.DE

  6. #6
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15

    [...] und kein Wort Englisch kann
    Wie bist Du überhaupt in die Branche gekommen? Setz Dich auf den Hosenboden wie jeder andere hier, ja. Du hast alle nötigen Infos die Du brauchst.
    Keiner wird Dir das übersetzen!
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  7. #7
    Avatar von Kwons
    Kwons Kwons ist offline Rookie
    Registriert seit
    May 2005
    Ort
    Nsu
    Beiträge
    5


    Toll, jetzt bin ich so schlau wie vorher Englisch war schon immer meine Schwäche, mit einem guten Buch, auf Deutsch kann ich auch vernüftg arbeiten Nicht nur die Leute die aus dem Gymnasium kommen, können programmieren, wenn man Dieses vernüftig auf normal deutsch, und auf normal logig erklärt :-| Wobei ich das programmieren ja ausschlieslich Hobbymähsig mache, NICHT beruflich !

    Das Problem bei der Sache ist das der Handler völlig inkompatibel ist mit dem Win32-Handler, und NICHT weiß wie ich Ihn umwandeln kann. ( Un wo ist Dieser Handler von der Form bei der C#.Net bzw. C++ )

    (Der compiler gibt blos fehler an, na ja, vieleicht sollte man das Thema wohl Eher nach C++ verschieben)

    Jede Englische Information ist für mich ziemlich Nutzlos, da ich diese Nicht verstehen kann, mit dem bißchen Schulenglisch ! (Es gibt viel zu wenig Bücher auf deutsch dazu)
     
    ___________________________________

    WEBMASTER@SENSEI-SOFT.DE

  8. #8
    Avatar von broetchen
    broetchen broetchen ist offline Mitglied Gold
    Registriert seit
    Feb 2004
    Ort
    Österreich/Wien
    Beiträge
    181
    moin

    Nimm dir ein bisschen Zeit, schnapp dir ein Wörterbuch und geh die englische Hilfe durch. Zu Managed DirectX wirst du auf deutsch im Moment nämlich eher weniger Information finden.

    Ein Buch (es ist allerdings auf englisch), das ich dir empfehlen kann, wäre:
    Managed DirectX 9 Kick Start
    Autor/in: Tom Miller
    Verlag: Sams
    Seitenzahl: 411
    Erscheinungsjahr: 2003
    Preis: 27,99 EUR
    ISBN: 0672325969


    Es ist nicht schwer geschrieben, mit ein bisschen Arbeit müsste es zu knacken sein

    Was den Handler betrifft, so bin ich mir ziemlich sicher, dass das der ist, den DirectX verlangt.

    Beispiel
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    public class Form1 : System.Windows.Forms.Form
    {
        private System.ComponentModel.Container components = null;
     
        private Device device;
     
        public Form1()
        {
            InitializeComponent();
     
            PresentParameters presentParams = new PresentParameters();
            presentParams.Windowed = true;
            presentParams.SwapEffect = SwapEffect.Discard;
     
            device = new Device(0, DeviceType.Hardware, [COLOR=Red]this.Handle[/COLOR], CreateFlags.SoftwareVertexProcessing, presentParams);
     
            device.RenderState.Lighting = false;
        }
    }

    Für dich interessant wäre hier der dritte Parameter im Device-Konstruktor, hier kann man entweder ein Control (meistens wohl das Fenster) oder ein Handle eines Controls.

    Ob und wie das Handle mit Win32 kompatibel ist, weiß ich nicht, ist in diesem Fall allerdings auch irgendwie völlig belanglos.

    mfg broetchen
     

  9. #9
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Tut mir leid, wenn ich das jetzt so offen und ehrlich sage:
    An deiner Stelle würd ich mich mal ein paar Stunden hinsetzen und die Grundzüge in Englisch durchnehmen. Englisch ist DIE IT-Sprache. Du wirst da nicht drumrum können. Und bestimmte Dokus/Tutorials/Info gibts nun mal NUR in dieser Sprache. Vor allem, wennst dich über Aktuelles informieren willst, gibt es dazu noch keine Übersetzunge. Für gewisse Dinge gibts auch nach Jahren noch keine.
    Vielleicht nimmst mal deine Scheuklappen auf und arbeitest an deinen Grundproblemen -> Englisch. Sonst kannst DirectX gleich schnell wieder vergessen.

    Es ist völlig irrelevant ob du das als Hobby betreibst oder für die Arbeit. Wenn du nicht gewillt bist, die Basis zu lernen (Englisch/Grundzüge einer Programmiersprache), dann solltest dir ein anderes Hobby suchen -> Fischen zb.

    Alle die dir hier helfen bzw. es zumindest versuchen, setzen sich mit ihren eigenen Problemen und mit denen anderer auseinander. Sie sind gewillt zu lernen und sagen nicht: "Nein, das hilft mir nicht weiter, weil mit Schulenglisch fang ich mit dieser Doku nichts an". Wenn du Schulenglisch kannst, dann sollte es doch ein leichtes sein, dir ein paar Fachvokabeln anzueigenen, um technische Texte zu verstehen -> die sind übrigens bei Gott nicht schwer, da solltest mal was Wirtschaftliches auf Englisch lesen.

    Ich will hier auch noch erwähnen, dass du es dir einfacher machst und etwas fürs Leben lernst. Englisch braucht man nicht nur beim Programmieren ...

    Wie gesagt, es ist nicht böse gemeint, sondern sollte lediglich zum Nachdenken anregen.
     

  10. #10
    Avatar von Kwons
    Kwons Kwons ist offline Rookie
    Registriert seit
    May 2005
    Ort
    Nsu
    Beiträge
    5
    (Danke)

    Würde heute in etwa so aus sehen:
    ---------------------------------------------

    using Microsoft.VisualBasic;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Data;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    public class Form1
    {
    [DllImport("user32", EntryPoint = "GetDC", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]

    // Für DC
    private static extern IntPtr GetDC(IntPtr hWnd);
    [DllImport("user32", EntryPoint = "ReleaseDC", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
    private static extern int ReleaseDC(IntPtr hWnd, IntPtr hdc);
    [DllImport("gdi32", EntryPoint = "SetTextColor", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
    // Für Text
    private static extern int SetTextColor(IntPtr hdc, int crColor);
    [DllImport("gdi32", EntryPoint = "TextOutA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
    private static extern int TextOut(IntPtr hdc, int x, int y, string lpString, int nCount);
    [DllImport("gdi32", EntryPoint = "SetBkColor", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
    private static extern int SetBkColor(IntPtr hdc, int crColor);



    private void MYBUTTON_Click(System.Object sender, System.EventArgs e)
    {
    //// Variabeln
    IntPtr hDC = default(IntPtr);
    //// Wichtig! Device Context hohlen
    hDC = GetDC(this.Handle);
    //// Farbe festlegen
    SetTextColor(hDC, Information.RGB(255, 0, 0));
    SetBkColor(hDC, Information.RGB(0, 0, 0));
    //// Einfacher Text ausgeben
    TextOut(hDC, 20, 20, "Hallo", Strings.Len("Hallo"));
    //// Wichtig! Device Context wieder freigeben
    ReleaseDC(this.Handle, hDC);

    }
    }


    //// Int32 I = this.Handle.ToInt32; ' Würde scheins auch gehen, nicht ... ToInt64


    Ich habe dann damals was in Visual Basic .Net gefunden, und habe nun einen Converter von heute, jetzt dazu benutzt. Mittlerweile, kahm dann damals auch auch ein Buch in Visual Basic .Net für DirecktX 9 raus. Noch ne Alternatieve das heutige XNA-Game Studio ... ( Wenn man gerne Shader schreibt )
     
    ___________________________________

    WEBMASTER@SENSEI-SOFT.DE

Ähnliche Themen

  1. DllImport C# und HWND
    Von Rawukal im Forum .NET Windows Forms
    Antworten: 3
    Letzter Beitrag: 09.03.10, 13:18
  2. PID aus HWND bestimmen
    Von Kaiser206 im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 17.07.08, 20:37
  3. Was ist hWnd?
    Von bigb702 im Forum .NET Windows Forms
    Antworten: 1
    Letzter Beitrag: 04.04.08, 14:55
  4. CWnd und HWND
    Von SCIPIO-AEMILIANUS im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 15.06.07, 13:52
  5. string to HWND
    Von Thomasio im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 25.05.07, 23:00