如何让窗体全屏,总在最前面

gongyue1983 2010-07-03 11:27:10
窗口关不掉,满屏,底下的任务栏也被挡住,其他弹出窗口也不能挡在前面
...全文
334 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gunsand 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xgpaul 的回复:]
this->ShowWindow(SW_SHOWMAXIMIZED);
SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
你在屏蔽一些特殊的键,如退格,回车等键,这样就可以最大化显示,达到你要效果。。。
[/Quote]

同意 在此基础上再扩展。
Eleven 2010-07-05
  • 打赏
  • 举报
回复
可能还要屏蔽一些特殊的组合键
gz_qmc 2010-07-04
  • 打赏
  • 举报
回复
窗口设置风格为置顶
屏蔽掉ALT+ESC、ALT+SPACE、ALT+CTRL+DEL、WIN键
相关代码百度一搜一堆

要完美的还要设置鼠标活动区域
yunyun1886358 2010-07-04
  • 打赏
  • 举报
回复
全屏显示是一些应用软件程序必不可少的功能。比如在用VC++编辑工程源文件或编辑对话框等资源时,选择菜单“ViewFull Screen”,即可进入全屏显示状态,按“Esc”键后会退出全屏显示状态。
在VC++6.0中我们用AppWizard按默认方式生成单文档界面的应用程序框架。下面将先讨论点击菜单项“ViewFull Screen”实现全屏显示的方法,再讲述按“Esc”键后如何退出全屏显示状态。
1) 在CMainFrame类中,增加如下三个成员变量。
Class CMainFrame : public CFrameWnd

2)在资源编辑器中编辑菜单IDR_MAINFRAME。在“View”菜单栏下添加菜单项“Full Screen”。在其属性框中,ID设置为ID_FULL_SCREEN,Caption为“Full Screen”。还可以在工具栏中添加新的工具图标,并使之与菜单项“Full Screen”相关联,即将其ID值也设置为ID_FULL_SCREEN。
3)设计全屏显示处理函数,在CMainFrame类增加上述菜单项ID_FULL_SCREEN消息的响应函数。响应函数如下:
void CMainFrame::OnFullScreen

4)重载CMainFrame类的OnGetMinMaxInfo函数,在全屏显示时提供全屏显示的位置。Void CMainFrame::OnGetMinMaxInfo
CFrameWnd::OnGetMinMaxInfo ;
}
1)在ClassView中选中CMainFrame并单击鼠标右键,选择“Add Member Function…”,添加public类型的成员函数EndFullScreen,该函数将完成退出全屏显示的操作。Void CMainFrame::EndFullScreen
}
2)函数EndFullScreen可以退出全屏显示状态,问题是如何在“Esc”键被按下之后调用执行此函数。由于视图类可以处理键盘输入的有关消息(如WM_KEYDOWN表示用户按下了某一个键),我们将在视图类CFullScreenView中添加处理按键消息WM_KEYDOWN的响应函数OnKeyDown.判定假如按的键为“Esc”键,则调用CMainFrame类的函数EndFullScreen,便可退出全屏显示状态。Void CFullScreenView::OnKeyDown

Cview::OnKeyDown;}这样我们就实现了比较专业的全屏显示的功能,相信肯定会令你设计的软件程序增色不少。
yunyun1886358 2010-07-04
  • 打赏
  • 举报
回复

SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
xgPaul 2010-07-04
  • 打赏
  • 举报
回复
this->ShowWindow(SW_SHOWMAXIMIZED);
SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
你在屏蔽一些特殊的键,如退格,回车等键,这样就可以最大化显示,达到你要效果。。。
cattycat 2010-07-04
  • 打赏
  • 举报
回复
楼上贴了这么多代码,网上这个很多的,MFC中主要是消息的处理。
leechrockgames 2010-07-04
  • 打赏
  • 举报
回复

if(m_game->GAParameterOb->ParInt[69]==0)//窗口调试无鼠标
{
//是否显示鼠标
ENIGameOb_static->ENd3dOb->ENInputOb->ENsetMouseVisible(false);
ShowWindow( hWnd, SW_SHOWNORMAL );
}
else if(m_game->GAParameterOb->ParInt[69]==1)//窗口调试有鼠标模式
{
//是否显示鼠标
ENIGameOb_static->ENd3dOb->ENInputOb->ENsetMouseVisible(true);
ShowWindow( hWnd, SW_SHOWNORMAL );
}
else if(m_game->GAParameterOb->ParInt[69]==2)//全屏无鼠标
{
//是否显示鼠标
ENIGameOb_static->ENd3dOb->ENInputOb->ENsetMouseVisible(false);
ShowWindow(hWnd,SW_SHOWMAXIMIZED);//(窗口最大化)
}
else if(m_game->GAParameterOb->ParInt[69]==3)//全屏有鼠标
{
//是否显示鼠标
ENIGameOb_static->ENd3dOb->ENInputOb->ENsetMouseVisible(true);
ShowWindow(hWnd,SW_SHOWMAXIMIZED);//(窗口最大化)
}
else if(m_game->GAParameterOb->ParInt[69]==4)//全屏无鼠标/最顶显示
{
//是否显示鼠标
ENIGameOb_static->ENd3dOb->ENtoolOb->LHxxSET_WINISTOP();
ENIGameOb_static->ENd3dOb->ENInputOb->ENsetMouseVisible(false);
ShowWindow(hWnd,SW_SHOWMAXIMIZED);//(窗口最大化)
}









#include"ENtool.h"
#include "ENd3d.h"
//图形
bool ENtool::LHxxDISPLAY_SAVEBMP( char* FileName,int x,int y,int w,int h )
{
/*
HDC hDC = ::GetDC(NULL); //获取屏幕DC
COLORREF clr = ::GetPixel(hDC, 200, 200); //获取当前鼠标点像素值

D3dCom.tp1.x=GetRValue(clr);
D3dCom.tp1.y=GetGValue(clr); //分解出绿色值
D3dCom.tp1.z=GetBValue(clr); //分解出蓝色值
::ReleaseDC(NULL, hDC); //释放屏幕DC
*/
HBITMAP hBitmap;
RECT rect;
//获得屏幕分辩率
rect.left=x;
rect.top=y;
rect.right=w+rect.left;
rect.bottom=h+rect.top;
// rect.right=GetSystemMetrics(SM_CXSCREEN);
// rect.bottom=GetSystemMetrics(SM_CYSCREEN);
//调用截屏函数
hBitmap=(HBITMAP)GetScreen(&rect);
//设备描述表
HDC hDC;
//当前分辨率下每象素所占字节数
int iBits;
//位图中每象素所占字节数
WORD wBitCount;
//定义调色板大小, 位图中像素字节大小 ,位图文件大小 , 写入文件字节数
DWORD dwPaletteSize=0, dwBmBitsSize=0, dwDIBSize=0, dwWritten=0;
//位图属性结构
BITMAP Bitmap;
//位图文件头结构
BITMAPFILEHEADER bmfHdr;
//位图信息头结构
BITMAPINFOHEADER bi;
//指向位图信息头结构
LPBITMAPINFOHEADER lpbi;
//定义文件,分配内存句柄,调色板句柄
HANDLE fh, hDib, hPal,hOldPal=NULL;
//计算位图文件每个像素所占字节数
hDC = CreateDC("DISPLAY", NULL, NULL, NULL);
iBits = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES);
DeleteDC(hDC);
if (iBits <= 1) wBitCount = 1;
else if (iBits <= 4) wBitCount = 4;
else if (iBits <= 8) wBitCount = 8;
else wBitCount = 24;
GetObject(hBitmap, sizeof(Bitmap), (LPSTR)&Bitmap);
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = Bitmap.bmWidth;
bi.biHeight = Bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = wBitCount;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrImportant = 0;
bi.biClrUsed = 0;
dwBmBitsSize = ((Bitmap.bmWidth * wBitCount + 31) / 32) * 4 * Bitmap.bmHeight;
//为位图内容分配内存
hDib = GlobalAlloc(GHND,dwBmBitsSize + dwPaletteSize + sizeof(BITMAPINFOHEADER));
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi = bi;
// 处理调色板
hPal = GetStockObject(DEFAULT_PALETTE);
if (hPal)
{
hDC = ::GetDC(NULL);
hOldPal = ::SelectPalette(hDC, (HPALETTE)hPal, FALSE);
RealizePalette(hDC);
}
// 获取该调色板下新的像素值
GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight, (LPSTR)lpbi + sizeof(BITMAPINFOHEADER)
+dwPaletteSize, (BITMAPINFO *)lpbi, DIB_RGB_COLORS);
//恢复调色板
if (hOldPal)
{
::SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);
RealizePalette(hDC);
::ReleaseDC(NULL, hDC);
}
//创建位图文件
fh = CreateFile(FileName, GENERIC_WRITE,0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (fh == INVALID_HANDLE_VALUE) return FALSE;
// 设置位图文件头
bmfHdr.bfType = 0x4D42; // "BM"
dwDIBSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwPaletteSize + dwBmBitsSize;
bmfHdr.bfSize = dwDIBSize;
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER) + dwPaletteSize;
// 写入位图文件头
WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
// 写入位图文件其余内容
WriteFile(fh, (LPSTR)lpbi, dwDIBSize, &dwWritten, NULL);
//清除
GlobalUnlock(hDib);
GlobalFree(hDib);
CloseHandle(fh);
DeleteObject(hBitmap);
return TRUE;
}
//调用截屏函数
HANDLE ENtool::GetScreen(LPRECT lpRect)
{
//定义屏幕的DC和内存DC
HDC hScrDC,hMemDC;
//定义Bitmap设备
HANDLE hBitmap,hOldBitmap;
//定义屏幕坐标变量
unsigned int nX,nY,nX2,nY2;
unsigned int nWidth,nHeight;
//定义屏幕分辩率变量
unsigned int xScrn,yScrn;
//确保屏幕矩形不为空
if(IsRectEmpty(lpRect))
return NULL;
//创建屏幕的DC
hScrDC=CreateDC("DISPLAY",NULL,NULL,NULL);
//创建的内存DC
hMemDC=CreateCompatibleDC(hScrDC);
//将屏幕矩形坐标付给坐标变量
nX=lpRect->left;
nY=lpRect->top ;
nX2=lpRect->right ;
nY2=lpRect->bottom ;
//获得屏幕分辩率
xScrn=GetDeviceCaps(hScrDC,HORZRES);
yScrn=GetDeviceCaps(hScrDC,VERTRES);
if(nX<0)
nX=0;
if(nY<0)
nY=0;
if(nX2>xScrn)
nX2=xScrn;
if(nY2>yScrn)
nY2=yScrn;
//获得屏幕宽度与长度
nWidth=nX2-nX;
nHeight=nY2-nY;
//获得屏幕图像并付给一个Bitmap设备
hBitmap=CreateCompatibleBitmap(hScrDC,nWidth,nHeight);
hOldBitmap=(HBITMAP)SelectObject(hMemDC,hBitmap);
BitBlt(hMemDC,0,0,nWidth,nHeight,hScrDC,nX,nY,SRCCOPY);
hBitmap=(HBITMAP)SelectObject(hMemDC,hOldBitmap);
//清除设备
DeleteDC(hScrDC);
DeleteDC(hMemDC);
return hBitmap;
}
void ENtool::LHxxSetPixel(COLORREF color,int w,int h,int x,int y,int count)
{
HDC hdc;
hdc = GetDC(hWnd);
for(int i=0;i<count;i++)
{
int x=rand()%w;
int y=rand()%h;
SetPixel(hdc,x,y,color);
}
}
//设窗口为最前
void ENtool::LHxxSET_WINISTOP()
{
SetWindowPos( hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
//设置窗口位置(居中)(最大化/无窗框)
void ENtool::LHxxSET_WINNOMOVE(int Scrw,int Scrh )//case WM_MOVE:用
{
SetWindowPos(hWnd, NULL,(GetSystemMetrics(SM_CXFULLSCREEN)-Scrw)/2,
(GetSystemMetrics(SM_CYFULLSCREEN)-Scrh)/2,
Scrw, Scrh,0);
//参数2取-1表示在最顶层显示窗口,取1表示在最底层显示;最后一个参数若取1,表示窗口大小保持不变,取2表示保持位置不变,因此,取3(=1+2)表示大小和位置均保持不变,取0表示将窗口的大小和位置改变为指定值。
//+GetSystemMetrics(SM_CYBORDER)
// D3dCom.tp2.x = LOWORD(lParam);
// D3dCom.tp2.y = HIWORD(lParam);
/*
◎ IDABORT:“Abort”按钮被选择。
  ◎ IDCANCEL:“Cancel”按钮被选择。
  ◎ IDIGNORE:“Ignore”按钮被选择。
  ◎ IDNO:“No”按钮被选择。
  ◎ IDOK:“OK”按钮被选择。
  ◎ IDRETRY:“Retry”按钮被选择。
  ◎ IDYES:“Yes”按钮被选择。
  以上说了这么多,我几乎都忘了我们原来的话题了。总之,当收到WM_CLOSE消息,你可以做两件事儿。一件是你接受默认的处理返回一个值,你若这样做了,应用程序或窗口按照计划关闭;再者,你返回0,应用程序或窗口将保持原样。以下是代码的基本部分:
MB_OK The message box contains one pushbutton: OK.
MB_OKCANCEL The message box contains two pushbuttons: OK and Cancel.
MB_RETRYCANCEL The message box contains two pushbuttons: Retry and Cancel.
MB_YESNO The message box contains two pushbuttons: Yes and No.
MB_YESNOCANCEL
*/
//if (MessageBox(hMainWindow, "Are you sure want to quit?", "Notice", MB_YESNO | MB_ICONEXCLAMATION) == IDNO)
//return(0);
}
//最大化
void ENtool::LHxxSHOW_WINMAX()
{
ShowWindow( hWnd, SW_SHOWMAXIMIZED );
UpdateWindow( hWnd );
}
//打开EXE程序
void ENtool::LHxxOPEN_EXE(char *name)
{
LPShellExecute pShellExecute = NULL;
HINSTANCE hInstShell32 = LoadLibrary(TEXT("shell32.dll"));//动态加载连接载
if (hInstShell32 != NULL)
{
//显式链接到 DLL 的进程调用 GetProcAddress 来获取 DLL 导出函数的地址
pShellExecute = (LPShellExecute)GetProcAddress(hInstShell32, _TWINCE("ShellExecuteA"));
if( pShellExecute != NULL )
{
if(pShellExecute( hWnd, TEXT("open"), name, NULL, NULL, SW_SHOW ) > (HINSTANCE) 32 ){}
}
FreeLibrary(hInstShell32);
hInstShell32=NULL;
}
}
//检测游戏窗口状态;
void ENtool::setActivateState(int off)
{
bActivate=off;
}
int ENtool::getActivateState()
{
return bActivate;
}
//生成随机种子
void ENtool::RandomIni()
{
srand(GetTickCount());
}
//创建文件夹
//0:创建失败; 1:文件夹存在; 2:创建文件夹; 3:不存在,不创建
int ENtool::CreateFolder(char *strDir,int off)
{
//检测是否存在
if(off==1)
{
if(::_chdir(strDir)!=0) //不存在不创建
{
return 3;
}
else //文件夹存在
{
return 1;
}
}
//不存在就创建
else if(off==2)
{
if(::_chdir(strDir)!=0) //不存在则创建
{
if(::_mkdir(strDir)==0) //创建成功
{
return 2;
}
else //创建失败
{
return 0;
}
}
else //文件夹存在
{
return 1;
}
}
}

djjlove_2008 2010-07-03
  • 打赏
  • 举报
回复
或者按键盘上的winKey(CTRL旁的那个, 也称windows徽标)键,使之退出来。
djjlove_2008 2010-07-03
  • 打赏
  • 举报
回复
使用任务管理器杀掉吧,呵呵。或者使之在后台运行。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧