ATL Childwindow -> Vollbildmodus

Shadow

Mitglied
Hallo !

ich habe eine 3d Anwendung in ATL (Directx9.0 && C++) programmiert. Meine Frage ist nun, wie ich mein window (Client), welches nur die 3d Umgebung anzeigt, in den Vollbildmodus bekomme.
Wie es im purem API ging, ist mir bekannt.....
Da das jetzt aber ein ATL Projekt ist, habe ich ein Menü, eine Statusleiste etc. und eben das Clientwindow - ich habe jeweils ein Handle...

hoffe dass ich mein problem ausreichend geschildert habe.

mfg
Shadow
 
Suche mal bei "Code Project" unter Fullscreen, da gibt es eine Reihe von Beispielen. Im Prinzip baut es darauf auf, das Desktop-Window zu ermitteln, dessen Inhalt zu speichern und dann darauf zu zeichnen.

Mfg

langer
 
Hallo !

Danke erstmal für die Antwort !
habe dort schon vergeblich gesucht - alles was ich dort gefunden habe war, wie man mit MFC ein vollbild erstellt - leider nichts entsprechendes mit ATL.

wie ermittelt man denn das "desktop window?"

mfg
 
Zuletzt bearbeitet:
Weiß leider nicht, wie ich das in ATL bewerkstellige.
http://codeguru.earthweb.com/cpp/w-d/doc_view/viewmanagement/article.php/c3351/
aber im prinzip ist dies das einzige bsp. das ich finden konnte.

Code:
void CMainFrame::FullScreenModeOn()
{
	// available only if there is an active doc
	CMDIChildWnd* pChild=MDIGetActive();
	if(!pChild) return;
	m_bToolBarWasVisible=(m_wndToolBar.IsWindowVisible()!=0);
	m_wndToolBar.ShowWindow(SW_HIDE);
	m_bStatusBarWasVisible=(m_wndStatusBar.IsWindowVisible()!=0);
	m_wndStatusBar.ShowWindow(SW_HIDE);
	// first create the new toolbar
	// this will contain the full-screen off button
	m_pwndFullScreenBar=new CToolBar;
	m_pwndFullScreenBar->Create(this);
	m_pwndFullScreenBar->LoadToolBar(IDR_FULLSCREEN);
	m_pwndFullScreenBar->SetBarStyle(m_pwndFullScreenBar->GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
	// to look better:
	m_pwndFullScreenBar->ModifyStyle(0, TBSTYLE_FLAT);
	m_pwndFullScreenBar->EnableDocking(0);
	// place the full-screen off button somewhere:
	CPoint pt(300,200);
	FloatControlBar(m_pwndFullScreenBar,pt);
	
	// now save the old positions of the main and child windows
	GetWindowRect(&m_mainRect);
	// remove the caption of the mainWnd:
	LONG style=::GetWindowLong(m_hWnd,GWL_STYLE);
	style&=~WS_CAPTION;
	::SetWindowLong(m_hWnd,GWL_STYLE,style);
	int screenx=GetSystemMetrics(SM_CXSCREEN);
	int screeny=GetSystemMetrics(SM_CYSCREEN);
	// resize:
	SetWindowPos(NULL,-4,-4,screenx+8,screeny+8,SWP_NOZORDER);
	style=::GetWindowLong(pChild->m_hWnd,GWL_STYLE);
	m_bChildMax=(style & WS_MAXIMIZE)?true:false;
	// note here: m_bMainMax is not needed since m_hWnd only
	// changed its caption...

	// and maximize the child window
	// it will remove its caption, too.
	pChild->ShowWindow(SW_SHOWMAXIMIZED);
	RecalcLayout();
	m_bFullScreenMode=true;

}

void CMainFrame::FullScreenModeOff()
{
	// You can use SaveBarState() in OnClose(),
	// so remove the newly added toolbar entirely
	// in order SaveBarState() not
	// to save its state. That is why I used dynamic
	// allocation
	delete m_pwndFullScreenBar;
	LONG style=::GetWindowLong(m_hWnd,GWL_STYLE);
	style|=WS_CAPTION;
	::SetWindowLong(m_hWnd,GWL_STYLE,style);
	if(m_bToolBarWasVisible)
		m_wndToolBar.ShowWindow(SW_SHOW);
	if(m_bStatusBarWasVisible)
		m_wndStatusBar.ShowWindow(SW_SHOW);
	MoveWindow(&m_mainRect);
	RecalcLayout();
	CMDIChildWnd* pChild=MDIGetActive();
	// pchild can be NULL if the USER closed all the
	// childs during Full Screen Mode:
	if(pChild){
		if(m_bChildMax)
			MDIMaximize(pChild);
		else MDIRestore(pChild);
	}
	m_bFullScreenMode=false;
}

mfg
 
hab einfach die äquivalenten atl funktionen verwendet (nach einiger sucherei).
wer den sourcecode braucht, kann mir gerne eine nachricht zukommen lassen.

mfg
 
Zurück