15,471
社区成员
发帖
与我相关
我的任务
分享
// 简单写一下
class ILoginNotifier
{
public:
virtual ~ILoginNotifier() {}
// 回调接口可以修改,根据用户名和密码的校验,当然还可以根据回调结果判断登录对话框是否可以关闭什么的
virtual void OnNotifyLoginResult(BOOL bLogin, const CString& strUserName, const CString& strPassword) = 0;
};
// dll登录类
class CLoginDialog : public CDialog
{
public:
CLoginDialog(CWnd* pParent = NULL)
: CDialog(IDD, pParent)
, m_pNotifier(NULL)
, m_strUsername(_T(""))
, m_strPassword(_T(""))
{
}
CLoginDialog(ILoginNotifier* pNotifier, CWnd* pParent = NULL)
: CDialog(IDD, pParent)
, m_pNotifier(pNotifier)
, m_strUsername(_T(""))
, m_strPassword(_T(""))
{
}
virtual OnOK()
{
ASSERT(m_pNotifier && !m_strUsername.IsEmpty() && !m_strPassword.IsEmpty());
if ( m_pNotifier )
{
m_pNotifier->OnNotifyLoginResult(TRUE, m_strUsername, m_strPassword);
}
CDialog::OnOK();
}
virtual OnCancel()
{
ASSERT(m_pNotifier);
if ( m_pNotifier )
{
m_pNotifier->OnNotifyLoginResult(FALSE, CString(), CString());
}
CDialog::OnCancel();
}
enum { IDD = IDD_LOGINDIALOG };
protected:
ILoginNotifier* m_pNotifier;
CString m_strUsername;
CString m_strPassword;
};
// dll导出函数
void ShowLoginDlg(ILoginNotifier* pNotifier)
{
CLoginDialog _loginDlg(pNotifier);
_loginDlg.DoModal();
}