Benutzer mit den meisten Antworten
CDockingManager überlisten

Frage
-
Ich habe in meinem Programm die Möglichkeit, die Locale umzuschalten. Das wird wirksam beim nächsten Programmstart und funktioniert auch, aaaber : ich habe 3 Andockfenster (CDockablePane) und deren Namen hängen von der Locale ab. Leider schreibt der DockingManager bei Programmende nicht nur das Layout, sondern auch die Namen der Panes in die Registry unter
HKCU\<MyApp>\Workspace\DockingManager-128\DockingPaneAndDividers
Die Panes werden zwar mit den richtigen Namen erzeugt, aber wenn der DM in der Registry was findet, überschreibt er das. Nach meinen Recherchen und eigenen Experimenten, lässt sich das nicht verhindern, ich habe schon alles Mögliche probiert. Ich habe genau den Effekt wie hier beschrieben:
http://stackoverflow.com/questions/2312841/how-to-change-the-cdockablepane-caption
Kennt da jemand einen genialen Trick? Im englischsprachigen Forum habe ich meine bisherigen Ansätze etwas genauer beschrieben. Direkt in der Registry was zu manipulieren halte ich für unsauber. Außerdem wollte ich die ganzen anderen Settings behalten. Ich halte das ganze Konzept, die Namen der Panes mit abzuspeichern für flasch, aber was will man machen ...
Hajü
Antworten
-
Dann wird diesen Änderung zwangsläufig auch in der Registry abgelegt, denn wenn die Anwednung "neu startet" will der "User" (nicht der Programmierer) alles sehen, wie er es verlassen hat.
In meinem Fall ist es etwas komplizierter, ich versuche es mal zu umreißen: Ich habe eine Chimäre aus MDI und SDI. Im Wesentlichen MDI und der SDI Teil wohnt als Doc/View Gespann in so einer CDockablePane. Die MDI Dockumente werden automatisch erzeugt, nach den Wünschen des Users, sind darüber hinaus aber für ihn uninteressant. Er kann jetzt aus den verschiedenen MDI Fenstern einzelne Objekte per Drag/Drop in die Pane ziehen und *das* is das Dokument, was für ihn von Bedeutung ist. Der Name der Pane ist der Dokumentname und da soll beim nächsten Start natürlich *nicht* der Name seines letzten Dokuments stehen, aber mit leerem Inhalt. Das mit dem Locale umschalten spielt da nur am Rande mit rein. Aber mit der Timer Krücke komme ich ja erstmal über die Runden.
- Als Antwort markiert Hans-J. Ude Samstag, 9. April 2011 10:16
Alle Antworten
-
Nein!
Ich arbeite mit der BCG-Lib und da ist das selbe Problem. DU hast es auch mit Menüpunkten...Da das Umschalten der Sprache für einen Benutzer "in der Regel einmal" geschieht lösche ich einfach die gespeicherten Infos.
Für unsere User ist das OK.
Ansonsten starte ich die Software in der Sprache in der das OS eingeschaltet ist, oder wenn ich diese Sprache nicht unterstütze in Englisch. D.h. in 99% aller Fälle hat der Benutzer mit der Auswahl einer Sprache gar nichts zu tun...
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de -
Am 13.03.2011 12:49, schrieb Martin Richter [MVP]:
Ich arbeite mit der BCG-Lib und da ist das selbe Problem. DU hast es auch mit
Menüpunkten...Nach allem was ich gehört habe, hat MS den ganzen Kram von BCG aufgekauft. Ich kenne BCG nicht, kann mir aber vorstellen, daß alles was jetzt CMFCyxz heißt mal CBCGxyz hieß.
void CMainFrame::OnBtnTest()
{
m_wndPropertiesPane.UndockPane(FALSE);
// m_wndPropertiesPane.DockPane(...);
}Mir ist aufgefallen, daß der ungewünschte Effekt nur auftritt, wenn die Pane in einer Tab-Gruppe beheimatet ist. Dockt man sie ab, dann sind die Namen wie erwartet. Eigentlich ein krasser Widerspruch in dem kranken Konzept, aber in dem Fall gut so.
Da dachte ich mir man dockt sie an passender Stelle per Programmbefehl ab und gleich wieder an. Leider bewirkt der Code oben gar nichts. Weiß jemand eine Lösung?
Hajü
-
- Würde ich mich auf das Verhalten nicht verlassen. Wenn Du Dir die gespeicherten Daten ansiehst wirst Du feststellen, dass weitaus mehr Daten "im Klartext" gespeichert werden.
- Rührt dieses (Deiner Meinung nach "krankes" Konzept, daher, dass "Tabs" unbenannt werden dürfen und der Name damit in der Tab-Klasse gespeichert wird.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de -
Nein, Tabs, resp. die Namen der Panes müssen sogar umbenannt werden dürfen. Aber das liegt in der Verantwortung des Programmierers und nicht des Frameworks. Außerdem ist es ein Widerspruch, daß das Verhalten unterschiedlich ist wenn die Pane in einer Tab-Gruppe, solo unter dem Manframe oder "free floating" ist.
Ich habe das erstmal mit dem schmutzigsten aller Workarounds glatt gezogen: einem Timer der ein einziges Mal getriggert wird, 1 Sekunde nachdem der Mainframe und alle Panes erzeugt wurden und die Namen so setzt wie sie seien sollen. Ala
str.LoadString(IDS_PROPERTIES_PANE);
m_wndPropertiesPane.SetWindowText(str);Hajü
PS: Hoffentlich funktioniert der NNTP service bald wieder.
-
Du hast nicht verstanden was ich meine. Nehmen wir mal an Fenster werden gedraggt und vershcben und gedockt wie "der User" (nicht der Programmierer) es will. Er benennt nun Panes um. Was er evtl. darf.
Dann wird diesen Änderung zwangsläufig auch in der Registry abgelegt, denn wenn die Anwednung "neu startet" will der "User" (nicht der Programmierer) alles sehen, wie er es verlassen hat.
Ich weiß. An der internen Logik in dem BCG Zeugs hakt es da an einigen Stellen.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de -
Dann wird diesen Änderung zwangsläufig auch in der Registry abgelegt, denn wenn die Anwednung "neu startet" will der "User" (nicht der Programmierer) alles sehen, wie er es verlassen hat.
In meinem Fall ist es etwas komplizierter, ich versuche es mal zu umreißen: Ich habe eine Chimäre aus MDI und SDI. Im Wesentlichen MDI und der SDI Teil wohnt als Doc/View Gespann in so einer CDockablePane. Die MDI Dockumente werden automatisch erzeugt, nach den Wünschen des Users, sind darüber hinaus aber für ihn uninteressant. Er kann jetzt aus den verschiedenen MDI Fenstern einzelne Objekte per Drag/Drop in die Pane ziehen und *das* is das Dokument, was für ihn von Bedeutung ist. Der Name der Pane ist der Dokumentname und da soll beim nächsten Start natürlich *nicht* der Name seines letzten Dokuments stehen, aber mit leerem Inhalt. Das mit dem Locale umschalten spielt da nur am Rande mit rein. Aber mit der Timer Krücke komme ich ja erstmal über die Runden.
- Als Antwort markiert Hans-J. Ude Samstag, 9. April 2011 10:16