单文档(基类CHtmlView)程序的问题

wangdeqie 2009-02-18 09:53:10
我想做个全屏显示网页的功能,下面的代码我在单文档(基类CView)下实现了功能,代码移植到单文档(基类CHtmlView)的程序,就不好使了,这是怎么回事?

下面是主要部分代码,代码我是照着微软的例子改的(其实基本没改。。。)

class CMainFrame : public CFrameWnd
{

protected: // create from serialization only
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)

// Implementation
public:
CToolBar * m_pwndFullScrnBar;
BOOL IsFullScreen();
WINDOWPLACEMENT m_wpPrev;
CRect m_FullScreenWindowRect;

// Generated message map functions
protected:
BOOL m_bFullScreen;
//{{AFX_MSG(CMainFrame)
afx_msg void OnViewFullscreen();
afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};


CMainFrame::CMainFrame()
{
m_bFullScreen=FALSE;
}
void CMainFrame::OnViewFullscreen()
{
RECT rectDesktop;
WINDOWPLACEMENT wpNew;

if (!IsFullScreen())
{
// need to hide all status bars
m_wndStatusBar.ShowWindow(SW_HIDE);
m_wndToolBar.ShowWindow(SW_HIDE);

// We'll need these to restore the original state.
GetWindowPlacement (&m_wpPrev);

m_wpPrev.length = sizeof m_wpPrev;

//Adjust RECT to new size of window
::GetWindowRect ( ::GetDesktopWindow(), &rectDesktop );
::AdjustWindowRectEx(&rectDesktop, GetStyle(), TRUE, GetExStyle());

// Remember this for OnGetMinMaxInfo()
m_FullScreenWindowRect = rectDesktop;

wpNew = m_wpPrev;
wpNew.showCmd = SW_SHOWNORMAL;
wpNew.rcNormalPosition = rectDesktop;

m_pwndFullScrnBar=new CToolBar;

if (!m_pwndFullScrnBar->Create(this,CBRS_SIZE_DYNAMIC|CBRS_FLOATING) ||
!m_pwndFullScrnBar->LoadToolBar(IDR_FULLSCREEN))
{
TRACE0("Failed to create toolbar\n");
return; // fail to create
}

//don't allow the toolbar to dock
m_pwndFullScrnBar->EnableDocking(0);
m_pwndFullScrnBar->SetWindowPos(0, 100,100, 0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_SHOWWINDOW);
m_pwndFullScrnBar->SetWindowText(_T("Full Screen"));
//FloatControlBar(m_pwndFullScrnBar, CPoint(100,100));
m_bFullScreen=TRUE;
}
else
{
m_pwndFullScrnBar->DestroyWindow();
delete m_pwndFullScrnBar;

m_bFullScreen=FALSE;

m_wndStatusBar.ShowWindow(SW_SHOWNORMAL);
m_wndToolBar.ShowWindow(SW_SHOWNORMAL);
wpNew = m_wpPrev;
}

SetWindowPlacement ( &wpNew );
}
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
if (IsFullScreen())
{
lpMMI->ptMaxSize.y = m_FullScreenWindowRect.Height();
lpMMI->ptMaxTrackSize.y = lpMMI->ptMaxSize.y;
lpMMI->ptMaxSize.x = m_FullScreenWindowRect.Width();
lpMMI->ptMaxTrackSize.x = lpMMI->ptMaxSize.x;
}

}

BOOL CMainFrame::IsFullScreen()
{
return m_bFullScreen;
}

...全文
214 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xu_bufei 2009-02-19
  • 打赏
  • 举报
回复
我测试了,可以的呀
cnzdgs 2009-02-18
  • 打赏
  • 举报
回复
把上面的“int i = 0;”换成你要执行的代码。
oyljerry 2009-02-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wangdeqie 的回复:]
引用 10 楼 oyljerry 的回复:
按键消息会被Web Browser控件等处理,你应该用PreTranslateMessage来拦截处理比较好

我VC非常菜,该怎么写呢?谢谢!
[/Quote]
CMainFrame::PreTranslateMessage(MSG* pMsg) 中处理
wangdeqie 2009-02-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 oyljerry 的回复:]
按键消息会被Web Browser控件等处理,你应该用PreTranslateMessage来拦截处理比较好
[/Quote]
我VC非常菜,该怎么写呢?谢谢!
wangdeqie 2009-02-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cnzdgs 的回复:]
重载PreTranslateMessage函数:
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
{
int i = 0;
}
因为浏览控件可能会处理键盘输入,这样WindowProc不会收到WM_KEYDOWN消息,自然也无法响应。
[/Quote]

//是加上这部分代码吗?还是没有捕获Esc按键。。。
BOOL CTest1View::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
{
int i = 0;
}
return CHtmlView::PreTranslateMessage(pMsg);
}


//下面的代码在基于(CView)好使,在基于(CHtmlView)的就不好使,都是单文档的
void CMainFrame::EndFullScreen()
{
if(IsFullScreen())
{
//退出全屏显示, 恢复原窗口显示
ShowWindow(SW_HIDE);
SetWindowPlacement(&m_wpPrev);
}
m_bFullScreen=FALSE;
}
void CTest1View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar==VK_ESCAPE) //如果按的键为Esc键
{//获取主框架窗口的指针
CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
//调用主窗口类的自定义函数 EndFullScreen ,便可退出全屏显示状态
pFrame->EndFullScreen();
}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
oyljerry 2009-02-18
  • 打赏
  • 举报
回复
按键消息会被Web Browser控件等处理,你应该用PreTranslateMessage来拦截处理比较好
wangdeqie 2009-02-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 oyljerry 的回复:]
你看按了Esc,有没有进入退出函数,感觉没有响应
[/Quote]
没有响应,我在CMy1View::OnKeyDown写了个MessageBox()没反应
cnzdgs 2009-02-18
  • 打赏
  • 举报
回复
重载PreTranslateMessage函数:
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
{
int i = 0;
}
因为浏览控件可能会处理键盘输入,这样WindowProc不会收到WM_KEYDOWN消息,自然也无法响应。
oyljerry 2009-02-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangdeqie 的回复:]
引用 4 楼 oyljerry 的回复:
PreTranslateMessage中获取ESC按键信息...

我看微软一个例子,里面没用PreTranslateMessage,这个例子是单文档的(应该是基于CView),全屏和按Esc退出全屏都好使;

我的是基于(CHtmlView),其他都一样,用写这个函数?

我要实现的功能:单文档的白色空白区域显示网页,点击按钮就全屏显示(已实现),按Esc就退出全屏(按Esc没反应)
[/Quote]
你看按了Esc,有没有进入退出函数,感觉没有响应
用户 昵称 2009-02-18
  • 打赏
  • 举报
回复
f4
wangdeqie 2009-02-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 oyljerry 的回复:]
PreTranslateMessage中获取ESC按键信息...
[/Quote]
我看微软一个例子,里面没用PreTranslateMessage,这个例子是单文档的(应该是基于CView),全屏和按Esc退出全屏都好使;

我的是基于(CHtmlView),其他都一样,用写这个函数?

我要实现的功能:单文档的白色空白区域显示网页,点击按钮就全屏显示(已实现),按Esc就退出全屏(按Esc没反应)
oyljerry 2009-02-18
  • 打赏
  • 举报
回复
PreTranslateMessage中获取ESC按键信息...
wangdeqie 2009-02-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 oyljerry 的回复:]
问题是什么?
[/Quote]
我新建一个单文档(基于CHtmlView),网页全屏显示我实现了,但是点击Esc退出全屏没起作用

//这是实现退出全屏的代码(没起作用),显示全屏的代码见上面(这个我已实现了)
void CMy1View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar==VK_ESCAPE) //如果按的键为Esc键
{//获取主框架窗口的指针
CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
//调用主窗口类的自定义函数 EndFullScreen ,便可退出全屏显示状态
pFrame->EndFullScreen();
MessageBox("SDF");
}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CMainFrame::EndFullScreen()
{
if(IsFullScreen())
{
//退出全屏显示, 恢复原窗口显示
ShowWindow(SW_HIDE);
SetWindowPlacement(&m_wpPrev);
}
m_bFullScreen=FALSE;
}
oyljerry 2009-02-18
  • 打赏
  • 举报
回复
问题是什么?
wangdeqie 2009-02-18
  • 打赏
  • 举报
回复
m_pwndFullScrnBar这个变量我没用,和它相关的代码可以忽略

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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