触摸屏应用相关技术之三——定制的浏览器

触摸屏应用相关技术之三——定制的浏览器
以下文章详细介绍了如何对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);//启动重试定时器

你可能感兴趣的:(技术,浏览器,VC,触摸屏,定制)