关于DLL封装登陆对话框的问题 大家好,我现在想把一个登陆对话框封入一个DLL中,但是遇到一个问题,希望大家给点注意,谢谢!在我的想法里面是输入用户名和密码,然后点击登陆按扭,验证之后要弹出一个对话框,弹出的对话框不在DLL中,是在调用DLL的新的工程中,那么DLL中怎么处理登陆这个按扭的消息响应函数?怎么留接口?是用回掉函数吗?具体怎么实现,拜谢大家!最好能给出关键部分的代码,急用!!!!!!!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个对话框你想怎么调用呢?不就是通过类声明对象然后DoModule么那把所有东西都写在dll里然后通过DoModule的返回值判断不就行了么怎么又是回调函数又是接口的 // 简单写一下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();} If your dll is not writen by C++. you can use call back function.Otherwise you can export your Dialog Class. 3楼的想法是正确的。自己创建一个对话框,创建上面的控件,让用户填写用户名和密码。输出一个函数,返回真或假,因为对话框的DoModle,函数会阻塞住,根据用户的输入情况,返回真或假,控制你的程序流程。 Bitmap 和Metafile文件new后需要释放吗 头文件的包含问题引起的错误 求wav转midi的VC代码! DIRECTX LPD3DXSPRITE的问题 一个关于内存映射文件的问题 createprocess创建了一个子进程后有些对话框不能弹出来 VB中调用VC写的COM组件怎么得到的返回值老是为Nothing 如何用已有的磁盘扇区读写函数实现WINDOWS下的虚拟磁盘? PE病毒特征码从哪儿取?是从代码段中取吗? 交流:这个论坛上有多少计算机专业的研究生? Winsock程序中出线的内存读写问题 数组的运用
不就是通过类声明对象然后DoModule么
那把所有东西都写在dll里
然后通过DoModule的返回值判断不就行了么
怎么又是回调函数又是接口的
// 简单写一下
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();
}
Otherwise you can export your Dialog Class.