触摸屏应用相关技术之三——定制的浏览器
以下文章详细介绍了如何对CHtmlView进行定制:
http://www.vckbase.com/document/viewdoc/?id=1486
http://support.microsoft.com/kb/236312
通过对CHtmlView的定制,可以解决以下问题。
禁止右键菜单
禁止弹出新IE窗口
禁止页面选中
禁止出现滚动条
禁止脚本错误对话框
禁止3d边框
本文不再赘述,这里着重介绍对于触摸屏应用必须解决的其他问题。
1. 实现主窗口全屏显示
参考了这篇文章:http://www.codeguru.com/forum/archive/index.php/t-363365.html
其主要思路是:
获得屏幕尺寸—〉获得标题栏、菜单栏、工具栏、边框尺寸—〉计算出当窗口客户区正好位于全屏位置时窗口的rect—〉调用MoveWindow将窗口调整至此Rect,从而使客户区充满整个屏幕。
2. 去掉主窗口标题栏
在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中
调用:ModifyStyle(WS_CAPTION,0);
3. 去掉边框、系统菜单
在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中
调用:cs.style&= ~(WS_THICKFRAME|WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_SYSMENU);
4. 去除主窗口的菜单栏
在切换到全屏状态(void CMainFrame::ToggleView())时调用
SetMenu(NULL);
5. 去除主窗口工具栏、状态栏
找到并注释CMainFrame中所有与“m_wndToolBar”,“m_wndStatusBar”的相关代码
6. 禁止主窗口改变尺寸(页面内容造成长时间100%cpu占用时,可以避免窗口被强制还原)
在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中
SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
7. 修改主窗口类名(方面在hook中调用FindWindow检查主窗口是否关闭)
在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中
WNDCLASS wndclass;
::GetClassInfo(AfxGetInstanceHandle(),cs.lpszClass,&wndclass);
wndclass.lpszClassName=CUSTOM_CLASSNAME;
VERIFY(AfxRegisterClass(&wndclass));
cs.lpszClass=wndclass.lpszClassName;
8. 访问内存中的页面
一个合格的IE容器不应当直接将404错误直接显示给访客,而应当截获此错误,并提供预先存放在程序内存中的页面,同时启动一个内部的定时器,不断重新尝试对内容的访问,在网络不稳定造成内容无法访问的情况下,这种处理显得更为友好。
CHtmlView提供了对404错误的截获,在
void CJSCallView::OnNavigateError(LPCTSTR lpszURL, LPCTSTR lpszFrame, DWORD dwError, BOOL *pbCancel)中相关处理如下:
LoadFromResource(IDR_HTML1);//调用内存中的页面
AfxGetMainWnd()->SetTimer(TIMER_RETRY,RETRY_SPAN*1000,NULL);//启动重试定时器
05-04
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交