Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 21.02.2009, 11:46 Titel: WndProc für eine Art von Steuerelement ändern |
|
|
Hallo!
Ich möchte den WndProc von einer Art von Steuerelement für mein gesamtes Programm ändern, so dass z.B. alle Buttons fortan meine eigene Funktion nutzen. Wie geht das? Mit GetClassInfo und dann neu registrieren krieg ich nen Fehler, wenn ich "BUTTON" als Name nutze.
mfG Cherry |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 21.02.2009, 12:38 Titel: |
|
|
Wie das geht?
Von Hand, sowas wie eine Default overload window procedure gibt es nicht  |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 21.02.2009, 14:34 Titel: |
|
|
Dazu musst du erstmal ne function als callback definieren. anschliessend musst du per setwindowlong (wenn ich micht nicht täusche), oder wars per sethook oder so ... (lange nimmer unter win gecodet), deine funktion in die messageque eintragen, so das alle nachrichten vortan an deine funktion laufen. in deiner funktion kannst du dann per sendmessage bzw post die nachricht weiterleiten, oder die weiterleitung verhindern, sowie die events selbst auswerten.
Selbstverständlich ist es auch möglich alle ereignisse, welche von untershiedlichen clt's kommen an ein und die selbe prozedur zu schicken, da der aufbau einer windows-nachricht immer identisch ist (parametertechnisch)
Schau dich mal in der MSDN unter dem stichwort sendmessage / postmessage um. dort sind einige beispiele diesbezüglich zu finden. Alternativ bei ActiveVB.de bei den tips
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 21.02.2009, 15:19 Titel: |
|
|
Ich glaube er wollte, dass jedes Control erstmal seine Windowprocedure bekommt  |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 21.02.2009, 17:34 Titel: |
|
|
das is damit auch möglich. Wie gesagt.... MSDN .. da stehts drin.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 21.02.2009, 20:59 Titel: |
|
|
Vllt bin ich blind, aber könnte mir wer das Thema in der MSDN verlinken? Ich finde da alles mögliche zu Messages, aber nicht das  |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 21.02.2009, 21:24 Titel: |
|
|
TPM irrt sich da wohl, weil soweit ich weiss es sowas unter Windows nicht gibt... |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 21.02.2009, 22:34 Titel: |
|
|
http://msdn.microsoft.com/en-us/library/dd458658%28VS.85%29.aspx
nein .. hab mich nicht geirrt .. aber, was ich nicht erwähnt habe, was eigentlich auch nicht gefragt wurde, ist die tatsache, das du enumerieren der ctl's von hand durchführen musst. sprich, es gibt keine funktion, die dir alle vorhandenen CTL's auflistet. du musst das über die fensterhandels machen, und dort mit getwindowlong die entsprechnden typen auslesen, um herauszufinden, welches handel ein control ist.
aber, ich kann dich nur warnen. Wenn duw irklich vor hast jedes vorhandene control zu hook'en, dann kann es leicht passieren, das dein gesamtes OS hängt, und wohl nur noch ein hardware-reset möglich is.
Alternativ kannst du auch auf PSCode.com im VB bereich rumsuchen, z.B. unter Hook .. dort findest du einige progs, die per mouseover die entsprechenden HWNDs, prozessids udn threads auslesen kann. an dem prog könntest du dich orientieren um das enumerieren zu lösen.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 21.02.2009, 22:53 Titel: |
|
|
Naja TPM, mal ganz ehrlich: Das was du vorgeschlagen hast ist mehr als einfach nur dirty; Eigentlich gehört sowas verboten.  |
|
Nach oben |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 22.02.2009, 13:41 Titel: |
|
|
Ich erzähl mal, was ich damit erreichen will:
Ich will alle Buttons in meinem Programm automatisch "hooken" oder subclassen, egal (nur eben automatisch), und damit Vistas Verhalten bei BM_SETIMAGE + Text-Style imitieren (dass Icons + Text angezeigt werden), damit mein Programm unter XP auch Icons bei den Buttons hat. Ich will WM_PAINT verarbeiten und per BM_GETIMAGE das Icon auslesen und bei Bedarf anzeigen.
@MSDN-Link: Da war ich auch, aber von meiner Problematik steht da nichts. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 22.02.2009, 13:51 Titel: |
|
|
Ich würde dir empfehlen, einfach nur ein Bild mit Text anzulegen. Da swäre Platformunabhängig.,.. |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 22.02.2009, 14:21 Titel: |
|
|
ups .... da hab cich doch glatt was fehlinterpretiert @Cherry
dachte, du wolltest alle controls ... also .. wirklich alle .. hooken ..
nur für dein prog is das allerdings ähnlich zu lösen.
wenn du nur n icon drin haben willst, kannst du doch einfach ein passendes control nutzen, das sowohl icon als auch text darstellen kann. (ich weis zwar grad nimer, wie das hies, aber ich glube mich erinnenr zu können,d as ein normaler button das auch kann.
Du könntest dich mal in setwindowlong umschauen. das is die funktion , welche auch ie style-parameter der controls festlegt. dort findet sich sicher auch ein pasender picture eintrag.
Mfg
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 22.02.2009, 17:27 Titel: |
|
|
ich würde auch einfach einen button mit einem bild (ohne text) erstellen und in dem bild ist dann noch der text... mach ich auch so. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 22.02.2009, 19:57 Titel: |
|
|
Das bringt aber einige Nachteile.
Ich habe jetzt die Lösung: EnumChildWindows mit Klasse BUTTON#### und dann SubClassen. Jetzt muss ich nur noch das Icon ordentlich darstellen (an Textlänge und -ausrichtung angepasst, etc.)
EDIT: k, alles fertig! Kann geschlossen werden. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 23.02.2009, 00:08 Titel: |
|
|
Und welche nachteile? ich färbe das bild natürlich immer erst mit der buttonfarbe und der richtigen button-textfarbe ein...
und hier werden keine threads geschlossen... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|