[C++ / MFC] PropertySheet/Page: Hilfe Button ausblenden

S

Spacy

Gast
Hallo. Ich habe es leider nur erreichen können, den Hilfe-Button in einem Property Sheet zu deaktivieren, ist es auch möglich, ihn ganz auszublenden?
 
Zuletzt bearbeitet:
GetDlgItem(ID des HilfeButton)->ModifyStyle( WS_VISIBLE,0,0);

sollte gehen.

MfG

Arnd
 
Der Ansatz ist schonmal gut, jedoch müsste ich noch die ID wissen. IDHELP funktionoert nicht, obwohl die andern beiden Buttons IDOK und IDCANCEL heißen.
 
Ein Blick in die Headerfiles hilft da (die sind festdefiniert und es gibt auch defines dafür), oder mit Spy++ nachschauen.

MfG

Arnd
 
Nun mal ganz locker Arnd! Hier will niemand jemanden ausspionieren!
@Spacy: versuch es doch mal hier.

Hoffe geholfen zu haben.
 
@Teropet:
Den Post hättest du dir ersparen können. Spy++ spioniert nicht JEMANDEN sondern ETWAS aus. Außerdem zeigt dein Link auf eine C/C++ Referenz, kein Wort von MFC.


Ich habe mal in einem Testprojekt folgendes gemacht:

Im PropertySheet Konstruktor:
this->m_psh.dwflags ^= PSH_HASHELP
hierdurch wird er Hilfe-Button deaktiviert.
mit dem selben bei einer Property Page wurde der Hilfe-Knopf ausgeblendet, jedoch funktioniert das irgendwie nur in meinem Testprojekt, aber nciht in meinem richtigen Projekt...
 
Hallo,

wie bereits gesagt ist Spy++ ein Visual Studio Hilfprogramm mit dem man die Fensterhierarchie des eigenen Rechners inspizieren kann.

Insbesondere lassen sich alle Eigenschaften eines Fenster erfragen.
Wie z.B. die ID eines Buttons oder der Fensterkoordinaten.

Eine weitere nützliche Funktion ist das beobachten der Nachrichten die ein Fenster empfängt.

Das mit dem locker bleiben überhöre ich jetzt einfach mal :-).

Jedenfalls kann man damit problemlos die ID des Buttons herausfinden.
Bei mir ist es die ID 9 und die sollte es bei spacey auch sein.
D.h. mit:

Code:
  CWnd* lpHelpButton = GetDlgItem(9);

  if( lpHelpButton && IsWindow( lpHelpButton->m_hWnd ) )
  {
      lpHelpButton->ModifyStyle( WS_VISIBLE, 0, 0 );
  }

wird der Button unsichtbar. Damit das auch sofort sichtbar wird, sollte man noch das Rechteck des Buttons in dessen Parent auf invalid setzen.
Code:
  CWnd* lpHelpButton = GetDlgItem(9);

  if( lpHelpButton && IsWindow( lpHelpButton->m_hWnd ) )
  {
      CRect lRect(0,0,0,0);
 
      lpHelpButton->GetWindowRect( &lRect );
      ScreenToClient(&lRect);
      InvalidateRect( &lRect, TRUE );
  }


MfG

Arnd
 
Zuletzt bearbeitet:
Diese Methode funktioniert nicht, weil GetDlgItem keinen gültigen Pointer zurückgibt, ID9 ist IDHELP.

Ich komm' mir schon blöd vor, aber auf einmal ist der Help Button weg, wenn ich ncihts mit der Hilfe-Button anstelle o.o

also Problem hat sich erledigt.
 
Hallp Spacy,

falls das Problem doch wieder auftritt. GetDlgItem liefert schon einen gültigen Wert, wenn man folgende Punkte beachtet:

- Der Hilfe Button ist das Child eines Fensters.
- GetDlgItem liefert natürlich nur Zeiger auf Childs seines eigenen Fensters
- D.h. Der Aufruf muss lauten <PropertySheet>->GetDlgItem(9)
- Wenn Du das aus dem View heraus aufrufst kommt natürlich 0 zurück.
- Ausserdem muss das Sheet auch bereits created sein.

Schmeiss mal den Spy++ an, dann wird es klarer. Ich habe das Beispiel nicht ausprobiert sondern nur runtergeschrieben.
Deswegen ja auch der Hinweis auf den Spy++.

MfG

Arnd
 
Zurück
Oben