首先编写了CMainFrame::FullScreen()函数,
里面用SetWindowPos设置最前端显示,用SetWindowPlacement设置为全屏显示
void CMainFrame::FullScreen()
{
RECT rectDesktop;
WINDOWPLACEMENT wpNew;
WINDOWPLACEMENT wpPrev;
if (!m_bFullScreen)
{
// We'll need these to restore the original state.
GetWindowPlacement (&wpPrev);
wpPrev.length = sizeof wpPrev;
//Adjust RECT to new size of window
::GetWindowRect ( ::GetDesktopWindow(), &rectDesktop );
::AdjustWindowRectEx(&rectDesktop, GetStyle(), TRUE, GetExStyle());
// Remember this for OnGetMinMaxInfo()
m_rctFullScreenWindow = rectDesktop;
wpNew = wpPrev;
wpNew.showCmd = SW_SHOWNORMAL;
wpNew.rcNormalPosition = rectDesktop;
m_bFullScreen=TRUE;
}
else
{
m_bFullScreen=FALSE;
GetWindowPlacement (&wpPrev);
wpNew = wpPrev;
}
SetWindowPlacement ( &wpNew );
}然后再void CMainFrame::ActivateFrame(int nCmdShow)函数中初,调用FullScreen()函数但是由于我在View类中使用了DirectDraw的双缓冲方式,编写了下面的创建双缓冲内存的函数
void CMyView::CreateDoubleBuff()
{ if(FAILED(CoInitialize(NULL)))
AfxMessageBox("初始化COM对象失败!");//return false;
HRESULT hr=CoCreateInstance(CLSID_DirectDraw,NULL,CLSCTX_INPROC_SERVER,IID_IDirectDraw2,(void**)&m_plDraw); if(!(FAILED(hr)))
{
hr=m_plDraw->Initialize((GUID*)NULL);
if(hr!=DD_OK)
AfxMessageBox("创建DirectDraw对象失败!");//return FALSE;
}
// 如果你用MFC,CWnd的m_hWnd成员变量指明了CWnd对象对应的窗口句柄
hr=m_plDraw->SetCooperativeLevel(m_mywhnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN|DDSCL_ALLOWREBOOT);//AfxGetMainWnd()->GetSafeHwnd(),必须是应用程序窗口句柄
//设置合作等级后,将现出整个程序窗口
((CMainFrame*)GetParent())->m_bFullScreen=FALSE;
((CMainFrame*)GetParent())->FullScreen(); if(FAILED(hr))
AfxMessageBox("设置合作等级出错!"); memset(&DrawSurfaceDesc,0,sizeof(DrawSurfaceDesc));//先初始化该结构中的所有参数为0,然后再细化;
DrawSurfaceDesc.dwSize =sizeof(DrawSurfaceDesc);
DrawSurfaceDesc.dwFlags = DDSD_CAPS|DDSD_BACKBUFFERCOUNT;
DrawSurfaceDesc.ddsCaps.dwCaps= DDSCAPS_COMPLEX|DDSCAPS_FLIP|DDSCAPS_PRIMARYSURFACE;//表面的性能描述
DrawSurfaceDesc.dwBackBufferCount = 1; hr=m_plDraw->CreateSurface(&DrawSurfaceDesc,(IDirectDrawSurface**)&m_plMainSurface,NULL);//创建前台缓冲区
if(FAILED(hr))
AfxMessageBox("创建后台缓冲区出错!");//return false;
DrawSurfaceDesc.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
hr=m_plMainSurface->GetAttachedSurface(&DrawSurfaceDesc.ddsCaps,&m_plBackSurface);//获得后台缓冲区地址
}这样我的程序就没有最前端显示的功能了!
怎么回事呢?
谢谢!!
如果在程序中不调用void CMyView::CreateDoubleBuff()就可以使用程序在最前端显示了~
解决方案 »
- c window 图形编程 窗口最小化后,再激活, 出现异常:如之前在窗口中所画的图形发生改变, 题目栏不能全部显示, 请教各位
- 向FTP上传3个文件,每个文件分别开启一个新线程,无法上传,用异步委托调用也不行。
- 请问在DLL里面如何得到当前窗口的句柄!(HWND类型)
- 请问标准程序员都需要些什么东西?
- pdm.dll有什么用啊?
- 内存泄漏问题
- 进来看看吧:) 有惊喜无处不在!
- 哪位高手能帮我用opengl写个程序,以八个顶点12条线画一个立方体,有消隐和不消隐两种效果?
- 我想开发一个hex文件编辑器,就象vc那样能打开二进制文件。怎么弄?不会是把hex转为文本再显示把?
- 如何得到当前点击的文件名?
- listview LVS_SMALLICON风格的问题
- 位图切换
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法