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 |