MFC如何在单文档中添加对话框

MFC如何在单文档中添加对话框,第1张

首先新建一个对话框资源,初始化程序实例是由InitInstance函数完成的。因此d出这个对话框的代码也是放在这个函数里的。

代码如下:

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函数里添加相应的处理代码。

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次登陆失败后就应限制这台电脑在一定时间内不能登陆等,还有比如如何验证多个用户名进行登陆等等。

那要看你具体怎么定义这些视图关系了。如果是一个静态切分窗口,(就像资源管理器)一边显示视图1(左边树形视图),一边显示视图2(右边显示列表视图),那就在OnCreateClient中加载这两个视图。

如果你是想VS一样,左边一个停靠栏,停靠栏里有个tab视图,右边放你的第二个视图,那就需要在停靠栏里面建立视图。

如果你想象3DMAX一样,显示一个视图,有可以随意切换另一个视图,那就需要在主框架中创建视图,然后还要处理切换时的一些事情。

如果你要。。。。。。。。。。。。。。。。。。。。

CDialogBar(老版本VC)或者CDockablePane,东西基本是版本更新了,意思一样,就是像做对话框一样做工具条。上面就是一个CComboBox,一个CTabCtrl,一个CEdit,一个CList,一个按钮,没了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11593205.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存