以模态的形式显示应用到文档/视图框架结构实例

本文介绍如何在MFC应用程序中创建并使用模态子文档/视图框架。通过继承CFrameWnd类创建CSubModeFrame,并实现了DoModal()与EndModal()函数,使窗口能够以模态方式显示。

        (1)新建一工程文件:ModeFrame,选取MFC AppWizard(exe)。

  (2)第二步选取Single document(单文档)。

  (3)其余几步均为缺省值。

  (4)用ClassWizard添加一新类CSubModeFrame,以CFrameWnd为基类。
//在CsubModeFrame中添加的实现函数DoModal()

int CSubModeFrame::DoModal()
{
 HWND hWndParent = AfxGetApp()->m_pMainWnd->m_hWnd;
 CRect rc(0,0,400,400);
 CWnd *pParent = CWnd::FromHandle(hWndParent);
 DWORD dwStyle = WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_POPUP|WS_THICKFRAME|WS_VISIBLE|WS_SYSMENU|WS_CAPTION;
 if(!Create(NULL,"模态文档/试图框架 ",dwStyle,rc,pParent,NULL))
  return FALSE;
 BOOL bEnableParent = FALSE;
 if (hWndParent != NULL && ::IsWindowEnabled(hWndParent))
 {
  ::EnableWindow(hWndParent,FALSE);
  ::EnableWindow(m_hWnd,TRUE);
  bEnableParent = TRUE;
 }
 CenterWindow();
 TRY
 {
  // enter modal loop
  DWORD dwFlags = MLF_SHOWONIDLE;
  if (GetStyle() & DS_NOIDLEMSG)
   dwFlags |= MLF_NOIDLEMSG;
  VERIFY(RunModalLoop(dwFlags) == m_nModalResult);
 }
 CATCH_ALL(e)
 {
  //DELETE_EXCEPTION(e);
  m_nModalResult = -1;
 }
 END_CATCH_ALL
  if (bEnableParent)
   ::EnableWindow(hWndParent, TRUE);
  if (hWndParent != NULL && ::GetActiveWindow() == m_hWnd)
   ::SetActiveWindow(hWndParent);
  // destroy modal window
  DestroyWindow();
  return m_nModalResult;
}

//在CsubModeFrame中添加的实现函数EndModal()
void CSubModeFrame::EndModal()
{
 ASSERT(::IsWindow(m_hWnd));
 if(m_nFlags & (WF_MODALLOOP|WF_CONTINUEMODAL))
 {
  EndModalLoop(1);
 }
}

//添加CModeFrameView的实现函数OnLButtonDblClk()
void CModeFrameView::OnView()
{
 // TODO: Add your command handler code here
 CSubModeFrame SubModeFrame;
 if(SubModeFrame.DoModal())
 {
  MessageBox("Mode Ok");
 }

//编译运行工程,双击视图,就会弹出模态的子文档/视图框架结构

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值