启动MDI/SDI程序时,跳出一个登陆对话框窗口,要求输入用户与密码。
用户名将显示在StatusBar上,这个如何实现?比如说,
建立了一个CUsrLogin类,继承CDialog的。CString m_szUsrName用来保存用户名。
如何将m_szUsrName显示在MainFrame的StatusBar上?
===
用户名将显示在StatusBar上,这个如何实现?比如说,
建立了一个CUsrLogin类,继承CDialog的。CString m_szUsrName用来保存用户名。
如何将m_szUsrName显示在MainFrame的StatusBar上?
===
ON_UPDATE_COMMAND_UI(ID_INDICATOR_XXXX, &CMainFrame::OnUpdatePane) // ID_INDICATOR_XXXX为pane的ID实现OnUpdatePane
void CMainFrame::OnUpdatePane(CCmdUI* pCmdUI)
{
pCmdUI->Enable();
}
你可以在CDialog声明一个变量保存用户名称
当执行过domodle()后你这个CDialog对象并没有被销毁只不过是HWND销毁而已所以可以得到缓存的用户名称
也可以通过WM_COPYDATA来实现
也可以通过命名管道,邮槽,剪贴板,共享内存,实在不行还有dde,rpc
很多很多中方法,如果上述方法你都不知道那么请用socket
{
CString szUsrName = "User:";
szUsrName += m_wndUsrLogin.m_szUsrName;
pCmdUI->SetText(szUsrName);
}
可以将信息显示在StatusBar的某pane中。其中m_wndUsrLogin为CMainFrame的CUsrLogin类成员。不过,在菜单的点击事件处理函数中调用m_wndUsrLogin.DoModal(),仍未实现szUsrName向StatusBar的传送。
貌似ON_UPDATE_COMMAND_UI只能由key event触发?
m_wndStatusBar.SetPaneText(0, m_wndUsrLogin.m_szUsrName, TRUE);
由菜单的点击事件处理函数内,可以了将Dialog窗口的UserName字符串显示在StatusBar上了...而,这样子,将CUsrLogin类成员m_wndUsrLogin放在CMainFrame类内了,
造成了在SDI/MDI程序启动之前,无法弹出登陆对话框窗口。这如何解决呢?
{
if (AfxGetApp() != NULL && AfxGetApp()->m_pMainWnd != NULL)
{
char buffer[256];
CStatusBar* pStatus = (CStatusBar*)
AfxGetApp()->m_pMainWnd->GetDescendantWindow(AFX_IDW_STATUS_BAR);
va_list argptr;
va_start(argptr, fmt);
vsprintf(buffer, fmt, argptr);
va_end(argptr);
if (pStatus != NULL)
{
pStatus->SetPaneText(0, buffer);
pStatus->UpdateWindow();
}
}
}
在App的InitInstance中添加
m_wndUsrLogin.DoModal();
m_cUsrName = (char *)(LPCTSTR)m_wndUsrLogin.m_szUsrName;
StatusBarMessage(m_cUsrName);实现,OK!
谢谢各位~~~