Splitter
-
Erstmal leider habe ich es nicht geschafft.
Und ich habe noch eine Frage zu folgendem:Leite dir eine eigene Klasse von CSplitterWnd ab
Ich weiß, wie man eine Klasse hinzufügt aber dort gibt es keine Basisklasse die CSplitterWnd heisst.
Also könntet ihr mir sagen wie ich das machen kann?
Mfg Kobold
-
Vielleicht solltest du dir mal ein C++ Tutorial durchlesen, oder - noch besser - ein Buch kaufen.
Aber jetzt zu deiner Frage:
class CMySplitterWnd : public CSplitterWnd { //Deine Definitionen };
-
Das ist mir schon klar.
Aber ich muss doch eine neue Klasse hinzufügen oder soll ich sie einfach in MainFrame deklarieren?
-
Wenn de da kein CSplitterWnd Klasse zum ableiten hast, mach einfach eine von CWnd abgeleitete und änder dann alle CWnd in CSplitterWnd um...
-
Hallo
habe jetzt eine Klasse aufgenommen und dort alle CWnd nachträglich in CSplitterWnd geändert.
Doch wie mach ich das jetzt mit dem Überschreiben von OnLButtonDown und OnMouseMove.
Habe den Code für beide schon hizufügen lassen , doch wie muss ich den Code ändern, sodass man den Balken nicht mehr verschieben kann.
hier der Code:// CMySplitterWnd IMPLEMENT_DYNAMIC(CMySplitterWnd, CSplitterWnd) CMySplitterWnd::CMySplitterWnd() { } CMySplitterWnd::~CMySplitterWnd() { } BEGIN_MESSAGE_MAP(CMySplitterWnd, CSplitterWnd) ON_WM_LBUTTONDOWN() ON_WM_MOUSEMOVE() END_MESSAGE_MAP() // CMySplitterWnd-Meldungshandler void CMySplitterWnd::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard. CSplitterWnd::OnLButtonDown(nFlags, point); } void CMySplitterWnd::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard. CSplitterWnd::OnMouseMove(nFlags, point); }
Also wie mach ich das mit:
In diesen beiden Methoden rufst du dann nicht mehr CSplitterWnd als nächste Klasse auf sondern einfach direkt CWnd...
-
Versuch es mal so:
// CMySplitterWnd void CMySplitterWnd::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard. CWnd::OnLButtonDown(nFlags, point); } void CMySplitterWnd::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard. CWnd::OnMouseMove(nFlags, point); }
In den Nachrichtenbehandlungsmethoden CWnd stehen lassen.
-
Genauso habe ich mir das auch schon gedacht.
Doch leider klappt das nicht.
Ich kann dann immer noch den Balken verschieben.
-
Schade, aber so hatte Squeegee verstanden. Ich habe selber noch nie was mit SplitterWindows gemacht.
-
Hallo
ich glaube ich weiß wo das Problem liegt aber ich kann es nicht ändern.
Die Überschriebenen Funktionen werden nämlich niemals aufgerufen und somit kann sich auch nichts ändern.
Ich bin darauf gekommen weil ich ein AfxMessageBox in den Code gesetzt habe und dieses nie angezeigt wird, wenn ich über den Balken gehe bzw. drauf drücke.
Hier der Code:void CMySplitterWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.
AfxMessageBox("Moin");
CWnd::OnLButtonDown(nFlags, point);}
void CMySplitterWnd::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.
AfxMessageBox("Moin");
CWnd::OnMouseMove(nFlags, point);
}
-
Hi 123Kobold,
kann es sein, dass deine Instanz von CSplitterWnd im Header deiner MainFrm nicht von deiner neuen abgeleiteten Klasse ist?
Also stattCSplitterWnd NameDerInstanz;
muss da jetzt bei dir halt
CMySplitterWnd NameDerInstanz;
stehen
Mein Code für die beiden Methoden sieht genauso aus wie Paul_C geschrieben hat.Gruß Squeegee
-
Danke Squeegee
genau das war mein Fehler.
Ich danke auch allen andern die mir geholfen haben.
Mfg Kobold
-
Kein Problem,
kenne solche Fehler zu genüge...Grüße und schönes Woe
Squeegee
-
Hauptsache es funzt und man hat dabei was gelernt (also auch verstanden!).