Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Cdialogbar - Titelzeile

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.10.2002, 15:31 Uhr
Tommix



Hallo,
ich bin auf ein merkwürdiges Problem gestoßen:
Ich habe eine von CDialogBar abgeleitete Klasse CLegend, die im Moment noch nichts weiter enthält. Ich möchte nun, daß, wenn die DialogBar nicht angedockt ist, ein Text in der Titelzeile zu sehen ist. Ich erzeuge die Instanz so:


C++:
int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
        return -1;
    
    // TODO: Speziellen Erstellungscode hier einfügen

    m_pLegend = new CLegend;    
    m_pLegend->Create(this, IDD_LEGEND1, CBRS_NOALIGN, ID_LEGEND1);
    m_pLegend->EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM);
    EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM);
    DockControlBar(m_pLegend, AFX_IDW_DOCKBAR_TOP);
    
    return 0;
}



Das funktioniert auch, die Leiste ist im Childwindow einer MDI-Anwendung oben angedockt. In der Klasse selbst mache ich dann:

C++:
BEGIN_MESSAGE_MAP(CLegend, CDialogBar)
    //{{AFX_MSG_MAP(CLegend)
    ON_WM_WINDOWPOSCHANGING()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen für Nachrichten CLegend

void CLegend::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
    CDialogBar::OnWindowPosChanging(lpwndpos);
    
    if(IsFloating())
    {
        TRACE("Floating.\n");
        SetWindowText("Title");    
    }
    else
    {
        TRACE("Docked.\n");
    }
}


Jetzt wird es für mich unverständlich:
1.) Ich ziehe die DialogBar irgenwohin. Der Status wechselt zu "Floating" (das TRACE-Makro zeigt das an) aber die Titelzeile bleibt leer.
2.) Ich docke die DialogBar wieder an.
3.) Ich ziehe das Ding nochmal raus und jetzt steht "Title" in der Titelleiste.

Wieso nicht gleich beim ersten mal?

Compiler ist VC++ 6.0.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.10.2002, 21:35 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo Tommix,
ja, ist sehr seltsam. Sieht so aus als ob IsFloating dafür verantworlich ist.

C++:
if(IsFloating()){
   TRACE("Floating.\n");
   //SetWindowText(_T("Titel"));
  SendMessage(WM_SETTEXT,0,(LPARAM)(LPCTSTR)"Titel");
}

verhält sich genau so, seltsam.
Hingegen:

C++:
SendMessage(WM_SETTEXT,0,(LPARAM)(LPCTSTR)"Titel");
if(IsFloating()){
  TRACE("Floating.\n");
  //SetWindowText(_T("Titel"));
//SendMessage(WM_SETTEXT,0,(LPARAM)(LPCTSTR)"Titel");
}

Funzt tadellos. Bleibt noch die Möglichkeit über Deinen Pointer
(m_pLegend->SetWindowText()); sofort den Titel festzulegen und danach in if(){} den Titel zur Laufzeit zu ändern.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.10.2002, 07:14 Uhr
Tommix



Hallo Uwe,


Zitat:
Uwe postete
Bleibt noch die Möglichkeit über Deinen Pointer
(m_pLegend->SetWindowText()); sofort den Titel festzulegen und danach in if(){} den Titel zur Laufzeit zu ändern.



Das ist die für mich beste Variante, vielen Dank!

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: