1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 窗体全屏 隐藏任务栏与菜单栏

窗体全屏 隐藏任务栏与菜单栏

时间:2018-10-04 16:16:51

相关推荐

窗体全屏 隐藏任务栏与菜单栏

在WIN MOBILE中,常常要全屏显示某个窗体,但是如果通过"SHFullScreen"方法,最大只能扩大到工作区,任务栏与菜单栏依旧还在,需要隐藏这两个栏。处理方法是先Find再Hide,如要恢复则Find再Show,在每次操作后,均需要MoveWindow调整工作窗体。

MS_SIPBUTTON:下方中间的拼字那个窗口

menu_worker:下方的带颜色的长条,不算中间的拼字

HHTaskBar:上方的任务条

[DllImport("CoreDll.dll", SetLastError = true)]

public static extern IntPtr FindWindow(string className, string WindowsName);

[DllImport("coredll.dll", EntryPoint = "EnableWindow")]

public static extern bool EnableWindow(IntPtr hwnd, bool bEnable);

[DllImport("coredll.dll", EntryPoint = "ShowWindow")]

public static extern bool ShowWindow(IntPtr hwnd, bool bEnable);

[DllImport("coredll.dll")]

private static extern IntPtr ShowWindow(IntPtr hWnd, int _value);

[DllImport("aygshell.dll")]

public static extern bool SHFullScreen(IntPtr hWnd, uint dwState);

[DllImport("coredll.dll", SetLastError = true)]

public static extern bool EnumWindows(IntPtr lpEnumFunc, uint lParam);

[DllImport("coredll.dll")]

public static extern void GetClassName(IntPtr hwnd,StringBuilder s, int nMaxCount);

public const int SW_SHOW = 5; //显示窗口常量

public const int SW_HIDE = 0; //隐藏窗口常量

1. 先使用FindWindow找到某窗体的句柄,然后使用ShowWindow来控制窗体的显示与隐藏。只能控制一个窗体

2. 先使用EnumWindows枚举所有的窗体句柄,然后使用GetClassName获取某一个句柄对应窗体的名字,再使用ShowWindow来控制窗体的显示与隐藏。可以控制所有窗体

隐藏任务栏

1. 使用FindWindw+ShowWindow

2. SHFullScreen

CRect rc;

SetRect( &rc, 0, 0, GetSystemMetrics( SM_CXSCREEN ), GetSystemMetrics( SM_CYSCREEN ) );

MoveWindow( rc );

隐藏菜单栏

使用FindWindw+ShowWindow

在很多时候,我们仅需要隐藏任务栏,而对下方的输入法栏并不需要隐藏,如手机QQ的做法.但是在这个时候,弹出输入法软键盘的时候,屏幕上窗口将会自动向下收缩并露出上方被隐藏任务栏的区域.解决方法是在主窗口里响应 WM_WININICHANGE 消息即可,不需要在里面添加自定义代码,如下:

// 按动输入法时不自动弹出任务栏

void CMainFrame::OnWinIniChange(LPCTSTR lpszSection)

{

CFrameWnd::OnWinIniChange(lpszSection);

// TODO: 在此处添加消息处理程序代码

}

SHFullScreen的使用

public static bool FullScreen(IntPtr hWnd, bool isFull)

{

uint dwState = 0;

if (isFull)

{

dwState = SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON;

}

else

{

dwState = SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON | SHFS_SHOWSTARTICON;

}

return SHFullScreen(hWnd, dwState);

}

const uint SHFS_SHOWTASKBAR = 0x1;//任务栏

const uint SHFS_HIDETASKBAR = 0x2;

const uint SHFS_SHOWSIPBUTTON = 0x4;//输入法

const uint SHFS_HIDESIPBUTTON = 0x8;

const uint SHFS_SHOWSTARTICON = 0x10;//开始菜单栏

const uint SHFS_HIDESTARTICON = 0x20;

这种方法隐藏任务栏,在程序退出的时候不需要做什么特殊处理.但是在对 CWnd, CFrameWnd 一类的窗口做处理的时候一定要先 SetForegroundWindow 一次,而 CDialog 类型的窗口则不需要这一步.

另外在对 CWnd, CFrameWnd 类型窗口做处理的时候,还必须响应 WM_ACTIVATE 消息,在其中做同样的处理才能做到完全的隐藏任务栏效果.

由于此消息在程序退出及窗口切换的时候也被调用,因此直接在其中响应消息,会导致程序退出之后任务栏的刷新问题,及程序窗口无法切出.解决办法是设置成员变量判断程序是否退出,并检测此消息的参数来判断是否切换窗口.相关代码如下:

void CMainFrame::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)

{

CFrameWnd::OnActivate(nState, pWndOther, bMinimized);

if( !nState && !pWndOther )

return;

if( !m_bExit )

{

// 全屏窗口

SetForegroundWindow();

DWORD dwState = ( SHFS_HIDETASKBAR | SHFS_HIDESTARTICON | SHFS_HIDESIPBUTTON );

::SHFullScreen( m_hWnd, dwState );

CRect rc;

SetRect( &rc, 0, 0, GetSystemMetrics( SM_CXSCREEN ), GetSystemMetrics( SM_CYSCREEN ) );

MoveWindow( rc );

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。