这是反其道而行吧?但还是可以的.前提是你一开始不能建立为对话框程序,而是选择单文档程序.然后你在你的单文档程序的初始化函数中,显示你的对话框(对系统登录对话框)用户输入了正确的密码了才放行,否则返回: 就是在你以下函数中: BOOL CXXXApp::InitInstance() { ..... //前面做好一切正常工作,如果没有这个对话框,就能直接显示单文档主窗口了.但你要先显示对话框,所以在倒数几行里加入: //此处打开登录系统对话框 CLoginDlg LoginDlg; if (LoginDlg.DoModal()==IDOK) //---------你验证密码的工作都在对话框中完成,正确了就返回IDOK,否则不管. { //这里不用代码,直接放行 -------------------- 这里不用代码 } else //没有正确登录 { return FALSE; }这样就能运行到最后二行: // The main window has been initialized, so show and update it. pFrame->ShowWindow(SW_SHOWMAXIMIZED); pFrame->UpdateWindow(); return TRUE;
To TianChong: 非常感谢你的指点。我尝试过了,你的方法是可行的。恕我经验浅薄,想再讨教一个问题: 我是按照下面的方式在对话框中动态生成单文档窗口的://…… CSingleDocTemplate* pDocTemplate = new CSingleDocTemplate ( IDR_MAINFRAME, RUNTIME_CLASS(CMyDoc), RUNTIME_CLASS(CMyFrame), RUNTIME_CLASS(CMyView) ); pDocTemplate ->OpenDocumentFile(NULL); //…… 我现在想给CMyFrame添加自定义的构造函数,期望通过构造函数在创建CMyFrame对象时添加一些外部信息。然而,通过上面的创建方式无法达到我的要求。请教TianChong以及各位大侠,是否有解决之道?谢谢
就是在你以下函数中:
BOOL CXXXApp::InitInstance()
{
.....
//前面做好一切正常工作,如果没有这个对话框,就能直接显示单文档主窗口了.但你要先显示对话框,所以在倒数几行里加入: //此处打开登录系统对话框
CLoginDlg LoginDlg;
if (LoginDlg.DoModal()==IDOK) //---------你验证密码的工作都在对话框中完成,正确了就返回IDOK,否则不管.
{
//这里不用代码,直接放行 -------------------- 这里不用代码
}
else //没有正确登录
{
return FALSE;
}这样就能运行到最后二行:
// The main window has been initialized, so show and update it.
pFrame->ShowWindow(SW_SHOWMAXIMIZED);
pFrame->UpdateWindow();
return TRUE;
非常感谢你的指点。我尝试过了,你的方法是可行的。恕我经验浅薄,想再讨教一个问题:
我是按照下面的方式在对话框中动态生成单文档窗口的://……
CSingleDocTemplate* pDocTemplate = new CSingleDocTemplate
(
IDR_MAINFRAME,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CMyFrame),
RUNTIME_CLASS(CMyView)
);
pDocTemplate ->OpenDocumentFile(NULL);
//……
我现在想给CMyFrame添加自定义的构造函数,期望通过构造函数在创建CMyFrame对象时添加一些外部信息。然而,通过上面的创建方式无法达到我的要求。请教TianChong以及各位大侠,是否有解决之道?谢谢