如何从一个对话框弹出单文档视图

Posted 有求必应

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从一个对话框弹出单文档视图相关的知识,希望对你有一定的参考价值。

转自:http://blog.csdn.net/clever101/article/details/768515

相信不少人进行数据库编程都有这样的问题,如何设置一个登陆框,通过登陆框来进入单文档视图。我看到很多数据库编程方面的书,都是对话框之间的相互切换。而在对话框中添加菜单不少人都不太熟悉(当然这是可以办到的)。我在想:为何不能在对话框中弹出单文档,这样添加菜单等工作就方便多了。为此我几经探索,终于实现了如何从一个对话框弹出单文档视图。

 

下面我以一个登陆对话框为例来说明如何从一个对话框弹出单文档视图。

首先新建一个对话框资源,如下图:

技术分享

熟悉MFC编程的朋友都知道初始化程序实例是由InitInstance函数完成的。因此弹出这个对话框的代码也是放在这个函数里的。

代码如下:

 

BOOL CDlgTestApp::InitInstance()
{
       AfxEnableControlContainer();
 
       // Standard initialization
       // If you are not using these features and wish to reduce the size
       //  of your final executable, you should remove from the following
       //  the specific initialization routines you do not need.
 
#ifdef _AFXDLL
       Enable3dControls();                     // Call this when using MFC in a shared DLL
#else
       Enable3dControlsStatic();      // Call this when linking to MFC statically
#endif
 
       // Change the registry key under which our settings are stored.
       // TODO: You should modify this string to be something appropriate
       // such as the name of your company or organization.
       SetRegistryKey(_T("Local AppWizard-Generated Applications"));
 
       LoadStdProfileSettings();  // Load standard INI file options (including MRU)
 
       // Register the application‘s document templates.  Document templates
       //  serve as the connection between documents, frame windows and views.
 
CLogsys  TestDlg;
if(TestDlg.DoModal()==IDOK)   // 单击Ok后就开始初始化程序实例
{
    CSingleDocTemplate* pDocTemplate;
       pDocTemplate = new CSingleDocTemplate(
              IDR_MAINFRAME,
              RUNTIME_CLASS(CDlgTestDoc),
              RUNTIME_CLASS(CMainFrame),       // main SDI frame window
              RUNTIME_CLASS(CDlgTestView));
       AddDocTemplate(pDocTemplate);
    // Parse command line for standard shell commands, DDE, file open
       CCommandLineInfo cmdInfo;
       ParseCommandLine(cmdInfo);
 
       // Dispatch commands specified on the command line
       if (!ProcessShellCommand(cmdInfo))
              return FALSE;
       // The one and only window has been initialized, so show and update it.
       m_pMainWnd->ShowWindow(SW_SHOW);
       m_pMainWnd->UpdateWindow();
    return TRUE;
}
else    // 假如单击了CANCEL按钮就直接退出
        return FALSE;
 
}

 

当然不是单击OK就可以进入单文档视图,在单击OK后还要进行检查用户名和密码。因此要在对话框的OnOK函数里添加相应的处理代码。

m_Time是全局变量,初始值为0.
void CLogsys::OnOK()
{
       // TODO: Add extra validation here
UpdateData(TRUE);  // 获取输入数据
if(m_strUser=="Admin"&&m_strPwd=="1234")
{
CDialog::OnOK();  // 假如用户名和密码正确,就关闭对话框
}
/*假如用户名或密码错误,且还未超出登陆次数,就进行提示*/
if((m_strUser!="Admin"||m_strPwd!="1234")&&(m_Time<3)) //假如密码和用户名正确
   {
AfxMessageBox("用户名或密码不正确");
m_Time++;
   }
/*假如超出登陆次数,提示并退出系统*/
if(m_Time>2)
   {
AfxMessageBox("登陆错误次数超过3次");
PostQuitMessage(0);
   }
}

当然在实际中功能还应进行扩充,比如3次登陆失败后就应限制这台电脑在一定时间内不能登陆等,还有比如如何验证多个用户名进行登陆等等。

 

 

以上是关于如何从一个对话框弹出单文档视图的主要内容,如果未能解决你的问题,请参考以下文章

viewpager 中的片段,未找到视图错误

片段对话框中的片段膨胀引发错误“片段未创建视图”

使用jetpack导航组件从一个底页导航到另一个底页时如何弹出底页对话框

从片段类中的对话框添加项目到recyclerview。

覆盖一个常见的片段帮助其他标签片段

我该如何做模态对话框片段(代码在我关闭之前不会执行)