CPropertySheet响应系统关闭按钮

我的 class CMySheet : public CPropertySheet。CMySheet 有三页。在每页中,都可能有数据修改了。

我希望做到的是:

点击OK或Apply后保存他们各自的修改。在点击Cancel按钮时如果修改没有保存,就弹出对话框询问是否保存修改。另外当点击系统的关闭按钮时,如果修改没有保存,也要弹出对话框询问是否保存修改。在询问期间,CPropertySheet窗口是显示着的。

自己弄了很久,终于达到了我的要求。

我的做法是:

 每页添加一个BOOL m_bModified,保存此页是否发生了修改。覆盖每页的OnApply()。当点击CPropertySheet的确定或应用按钮时,框架会调用每页的OnApply()。这样每页都有机会去保存数据。

当点击CPropertySheet的取消按钮时,我当然不希望每页都弹出对话框询问我是否要保存数据,只要任意一页有更新,就弹出一次对话框询问我即可。所以不要在每页的OnCancel中询问。而是在CMySheet做。在CMySheet的消息映射项目中添加ON_BN_CLICKED(IDCANCEL, &CMySheet::OnCancel)。IDCANCEL就是CPropertySheet的取消按钮的ID。“OnCancel”这个函数名当然随自己取了。

实现如下:

  void CMySheet::OnCancel()
{
       if ( m_firstPage.m_bModified      ||
            m_secondPage.m_bModified ||
            m_thirdPage.m_bModified )
      {
               int idResult = ::MessageBox(this->m_hWnd,
                                                    TEXT("是否保存所做的更改?"),
                                                    TEXT("保存更改"),
                                                    MB_YESNOCANCEL | MB_ICONQUESTION);
               if (idResult == IDYES)
               {
                      PressButton(PSBTN_OK);
               }
               else if (idResult == IDNO)
               {
                      EndDialog(IDCANCEL);
               }
               //else if (idResult == IDCANCEL){}
       }
       else
       {
                EndDialog(IDCANCEL);
       }
}

 

最后是处理CMySheet的OnSysCommand消息:消息映射项 ON_WM_SYSCOMMAND()

 void CMySheet::OnSysCommand(UINT nID, LPARAM lParam)
{
 if (nID == SC_CLOSE)
 {
  if ( m_firstPage.m_bModified  ||
    m_secondPage.m_bModified ||
    m_thirdPage.m_bModified )
  {
   int idResult = ::MessageBox(this->m_hWnd,
          TEXT("是否保存所做的更改?"),
          TEXT("保存更改"),
          MB_YESNOCANCEL | MB_ICONQUESTION);
   if (idResult == IDYES)
   {
    PressButton(PSBTN_OK);
    return;
   }
   else if (idResult == IDCANCEL)
   {
    return;
   }
   //else if (idResult == IDNO){}
  }
 }

 CPropertySheet::OnSysCommand(nID, lParam);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值