2011-01-02 6 views
-1

ich die Grafik erhalten vonkann ich die Schriftinformationen aus Graphics System.Drawing.Graphics in C# erhalten

Graphics g = System.Drawing.Graphics.FromHwnd (button1.Handle);

kann ich die Schriftinformationen von diesem Graphics

war ich versuchen, eine Schriftart zu erhalten, indem GetTextFace api-Funktion, aber es zurückgeben „System“ es Standardschriftart in O

bedeuten und ich war versuchen Verwenden von SendMessage (button1.Handle, WM_GETFONT, 0, 0); bu es mir 0 zurückgeben auch ist es Standard-Schriftart in OS

meine ich die Ursache des Problems bekannt sind, ist es aufgrund Flatstyle-Eigenschaft

Siehe diesen Link

http://www.siao2.com/2008/09/26/8965526.aspx

dank

+0

Es ist nicht klar, was Sie letztlich erreichen wollen. Sie haben immer wieder gefragt, wie Sie ein Zwischenziel erreichen können, aber ich denke, Sie bellen den falschen Baum auf. Was Windows betrifft, ist diese Schriftart die Standardsystemschriftart - und das ist alles, was Sie bekommen, um es Ihnen zu sagen. Wenn Sie erklären, was alles erreicht werden soll, können wir möglicherweise eine Lösung anbieten, die funktioniert. –

+0

Ich versuche, Google übersetzen jede Ware, so dass ich das Wort unter der Maus bekommen möchte Ich konnte das mit Textbox und Richtextbox tun, aber nicht mit anderen Steuerelement i Tray, um diese Kontrolle als Richtextbox oder Textfeld nach Größe, Ort zu simulieren und font von diesem Steuerelement dann rufen Sie ScreenToClient, so dass die andere Kontrolle FlatStyle mein System oder Standard sein Wie Sie eine professionelle Person sind und ich bin ein Neuling, was denkst du in meinen Schritten? Gibt es einen besseren Weg und wie löst man dieses Problem? – bebo

+0

Wort unter Maus ist mein Ziel – bebo

Antwort

0

Sie können Graphics.GetHDC verwenden und dann die HDC verwenden, um die Schriftart-Informationen über einen PInvoke-Aufruf an native Win API zu erhalten.

EDIT

Suchen Sie nach GetCurrentObject: http://msdn.microsoft.com/en-us/library/dd144869(VS.85).aspx dieser Funktion können Sie eine HFONT vom HDC erhalten lassen. Dann können Sie Font.FromHfont verwenden, um das .NET Font Objekt zu erhalten.

Wenn das Objekt Graphics eine Schriftart hat, können Sie es über diese API erhalten. Beachten Sie, dass Sie nicht verwaltete Ressourcen freigeben müssen, die Sie zuweisen würden (HDC und HFONT).

+0

helfen, was ist die Funktion, die ich die Schrift von HDC zu erhalten, ohne geting „System“ verwenden kann ???? – bebo

+0

Bitte lesen Sie diesen Link zu wissen, was das Problem ist http://blogs.msdn.com/b/michkap/archive/2008/09/26/8965526.aspx – bebo

1

Was Sie werfen zusammen, wie im letzten Kommentar beschrieben, scheint ein wenig wie ein riesiger, chaotisch Hack. Aber ich weiß nicht wirklich, ob ich gut genug verstehe, um ein besseres Design zu bieten.

Da Sie scheinbar etwas Erfahrung mit der Windows-API haben, können Sie sich Raymond Chens Blog-Post unter How to retrieve text under the cursor (mouse pointer) ansehen, da es sich ziemlich logisch anhört, was Sie erreichen möchten. Das bereitgestellte Codebeispiel befindet sich nicht in C#, aber es sollte nicht zu schwierig sein, der Logik (speziell von RecalcText) zu folgen, um es unter Verwendung der gleichen API-Aufrufe in Ihrem bevorzugten C# neu zu implementieren. Im Wesentlichen führt er Sie durch die Nutzung der Microsoft Active Accessibility Technologie, die entwickelt wurde, um Informationen über die Objekte auf dem Bildschirm für das Lesen von Geräten und andere ähnliche Technologie zu offenbaren, anstatt zu versuchen, das Rad selbst neu zu erfinden.


Ansonsten, auf dem Pfad, den Sie bereits begonnen haben, weiter zu gehen, es klingt für mich, als ob Sie auf der GetTextExtentPoint32 function nachlesen müssen. Sobald Sie die Nachricht WM_GETTEXT wie oben vorgeschlagen gesendet haben, um den Text zu erhalten, der auf dem Steuerelement angezeigt wird, können Sie die Position der Maus relativ zum Steuerelement ermitteln (mit einer Kombination aus GetCursorPos und WindowFromPoint) Breite und Höhe der Textzeichenfolge, die von GetTextExtentPoint32 zurückgegeben wird.


Schließlich die Frage zu beantworten, die Sie ausdrücklich gefragt darüber, wie in Verwendung, welche Schriftart zu bestimmen, ist ein angegebenes Steuerelement zu zeichnen, müssen Sie das Wissen von my previous answer in Bezug auf die Standardsystemschrift zu entnehmen wieder zu verwenden. Wie Sie herausgefunden haben, wird Ihnen ein Steuerelement entweder mitteilen, welche Schriftart es verwendet, um seinen Text zu zeichnen, oder es wird Ihnen sagen, dass es die Standardsystemschriftart verwendet. Die einfache Frage lautet dann: Woher weiß ich, welche Schriftart die Standardsystemschriftart ist?

Das ist eine ziemlich einfache Frage zu beantworten, und die Windows-API bietet Funktionen, um genau dies zu tun. Insbesondere müssen Sie die SystemParametersInfo function anrufen und die SPI_GETNONCLIENTMETRICS Flag übergeben. Dies bewirkt, dass die Funktion eine NONCLIENTMETRICS structure ausfüllt, die Ihnen unter anderem sagt, welche Schriftart als Standardsystemschrift verwendet wird. Insbesondere interessiert Sie das Element lfMessageFont der Struktur, das ein Zeiger auf eine Struktur LOGFONT ist, die die Attribute der Schriftart definiert, die für Nachrichtenfelder und Steuerelemente verwandt werden.

Erneut finden Sie unter a post on Raymond Chen's blog Erklärung der Geschichte von SYSTEM_FONT, und seinen Vorschlag, die Funktion zu verwenden, um Informationen über die tatsächliche Schriftart im Einsatz zu erhalten.

Verwandte Themen