如何用MFC为windows添加一个用户 *** 作界面

如何用MFC为windows添加一个用户 *** 作界面,第1张

如果是在同一个工程里,那么登陆成功以后这样:

CMyWindow* cw

cw = new CMyWindow()

cw->ShowWindow() //显示窗口

OnCancel()//退出登陆界面

如果不是在同一个工程里直接运行这两个窗口就行。

ShellExecute(NULL, _T("open"), 路径, NULL, NULL, SW_SHOWNORMAL)//运行

OnCancel()//退出登陆界面

利用组件库中的Splash Screen组件生成Splash1.cpp 和Splash1.h 这两个文件(也就是基于框架类的应用程序添加启动画面的步骤)……

步骤/方法

1利用组件库中的Splash Screen组件生成Splash1.cpp 和Splash1.h 这两个文件(也就是基于框架类的应用程序添加启动画面的步骤)

(1)用Photoshop等制作启动画面图像,保存为bmp格式。

(2)用Appwizard建一个基于单文档的工程Splash。

(3)在资源中插入位图资源

打开VC++的资源编辑器,用鼠标右键单击Resources文件夹,选择Import命令,插入所制作的位图。如果位图超过256色,VC会d出一个对话框,提示位图已经插入但不能在位图编辑器中显示,确定即可。将位图ID改为IDB_SPLASH。

(4)添加Splash Screen控件

①选择菜单“project”/“Add To Project”/“Conponents and Controls”打开对话框,在列表框中双击“Visual C++ Conponents”选项,选择“Splash Screen”控件,然后单击“Insert”。

②确认或修改类名和位图资源ID,单击OK确认。

③编译、连接,漂亮的启动画面就显示出来了。

(5)如果需要改变启动画面的停留时间,就修改SetTimer()函数的第二个参数,默认是750 毫秒。该函数所在位置:

int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

...

// Set a timer to destroy the splash screen.

SetTimer(1, 2000, NULL)//修改第二个参数以调整画面停留时间

return 0

}

这样就生成了Splash1.cpp 和Splash1.h 这两个文件

2制作基于对话框的应用程序启动画面

(1)建立基于对话框的工程Cover。

(2)文件移植

①将Splash1.cpp 和Splash1.h 两个文件从步骤一建立的工程拷贝到Cover工程中,并且分别加入到Source Files和Header Files中;

②导入位图文件到工程的资源中,改ID为IDB_SPLASH。

(3)修改代码,实现启动画面的调用

①添加CCoverApp 的InitInstance() 函数代码

#include "Splash1.h" //加在Cover.cpp文件的头文件调用部位

BOOL CCoverApp::InitInstance()

{

CCommandLineInfo cmdInfo

ParseCommandLine(cmdInfo)

CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash)

...

}

②使用ClassWizard 添加OnCreate() 函数到对话框类CCoverDlg中,并修改代码#include "Splash1.h" //加在CoverDlg.cpp文件的头文件调用部位

int CCoverDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

...

CSplashWnd::ShowSplashScreen(this)//显示启动画面

...

}

3使得启动画面消失后再显示主程序

①在CCoverDlg类中添加WM­_TIMER消息响应函数

void CCoverDlg::OnTimer(UINT nIDEvent)

{

// TODO: Add your message handler code here and/or call default

this->MoveWindow(300,300,600,400)

CDialog::OnTimer(nIDEvent)

}

② 在intCCoverDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)中添加如下代码:

CSplashWnd::ShowSplashScreen(this)

this->MoveWindow(0,0,0,0)

this->SetTimer(1,2000,NULL)//注意这个2000一点要等于步骤1中的2000

return 0

③在void CCoverDlg::OnPaint()的末尾添加如下代码:

this->KillTimer(1)

BOOL CLoginApp::InitInstance()

{

//============登录===========

//在主程序窗口运行前首先d出登录对话框

while (TRUE)

{

maindlg login_Dialog

//模态对话框

int nReturn = login_Dialog.DoModal()//返回IDOK或IDCANCEL。如果返回的是IDCANCEL,则要调用WindowsCommDlgExtendedError函数来确定是否发生了一个错误。IDOK和IDCANCEL都是常量,它表明用户选择的是OK按钮还是Cancel按钮

if(nReturn == IDCANCEL){//点击取消

return FALSE

}

if (nReturn == IDOK){//点击确定

HWND login_Hwnd = GetDlgItem(login_Dialog,IDD_DIALOG1)

CString str_User = login_Dialog.m_strUser

CString str_Password = login_Dialog.m_strPassword

if(!(str_User == "admin" &&str_Password == "admin"))

{ //如果用户名密码不是admin/admin,则报错,提示重新输入,直至正确为止。

if(IDOK == MessageBox(NULL,"用户ID或密码错误!\n 请重新输入!","登录失败!",MB_OKCANCEL|MB_ICONERROR))

continue

else

return FALSE

} else

{

break

}

}

}

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.

。。。。。。。下面省略


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

原文地址: http://outofmemory.cn/bake/7932156.html

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

发表评论

登录后才能评论

评论列表(0条)

保存