BOOL CLoginScene::_InitUI() {
// Encontrar el formulario de la ruta del logo y ocultarlo si existe
frmPathLogo = CFormMgr::s_Mgr.Find("frmPathLogo");
if (!frmPathLogo) return false;
frmPathLogo->SetIsShow(false);
// Encontrar el formulario de la cuenta y ocultarlo si existe, también asignar el manejador de eventos
frmAccount = CFormMgr::s_Mgr.Find("frmAccount");
if (!frmAccount) return false;
frmAccount->SetIsShow(false);
frmAccount->evtEntrustMouseEvent = _evtLoginFrm;
// Encontrar el checkbox de guardar cuenta y configurar su estado
chkID = dynamic_cast<CCheckBox*>(frmAccount->Find("chkID"));
m_bSaveAccount = false;
if (chkID) {
ifstream inCheck("user\\SavedAccounts\\checkid.dat");
if (inCheck.is_open()) {
char szChkID[128] = { 0 };
while (inCheck.getline(szChkID, 128)) {
m_bSaveAccount = (Str2Int(szChkID) == 1);
chkID->SetIsChecked(m_bSaveAccount);
}
} else {
m_bSaveAccount = false;
chkID->SetIsChecked(m_bSaveAccount);
}
}
// Encontrar los campos de ID y contraseña y salir si alguno de ellos no existe
edtID = dynamic_cast<CEdit*>(frmAccount->Find("edtID"));
edtPassword = dynamic_cast<CEdit*>(frmAccount->Find("edtPassword"));
if (!edtID || !edtPassword) return false;
// Inicializar la cadena de la cuenta guardada
m_sSaveAccount = "";
// Leer la cuenta guardada desde el archivo
ifstream in("user\\SavedAccounts\\accounts.dat");
if (in.is_open()) {
string line;
if (getline(in, line)) {
// Extraer la cuenta guardada y configurar el campo de ID si existe
istringstream iss(line);
getline(iss, m_sSaveAccount, ':');
if (edtID) {
edtID->SetCaption(m_sSaveAccount.c_str());
edtID->evtEnter = _evtEnter;
edtID->SetIsWrap(true);
}
// Configurar el campo de contraseña si existe
if (edtPassword) {
size_t pos = line.find_first_of(":");
if (pos != string::npos) {
string encryptedPassword = line.substr(pos + 1);
string key = "myencryptionkey";
string decryptedPassword = EncryptionUtils::EncryptDecrypt(encryptedPassword, key);
edtPassword->SetIsPassWord(false);
edtPassword->SetIsWrap(true);
edtPassword->evtEnter = _evtEnter;
m_sPassword = decryptedPassword;
edtPassword->SetCaption(m_sPassword.c_str());
}
}
}
in.close();
} else {
// Manejar caso en el que no se puede leer el archivo de cuenta
ofstream outUsername("user\\SavedAccounts\\accounts.dat");
if (outUsername.is_open()) {
outUsername << "";
outUsername.close();
}
}
// Encontrar el formulario del teclado virtual y ocultarlo si existe
frmKeyboard = CFormMgr::s_Mgr.Find("frmKeyboard");
if (!frmKeyboard) return false;
frmKeyboard->Hide();
// Encontrar el checkbox de cambio de mayúsculas del teclado virtual
CCheckBox* chkShift = dynamic_cast<CCheckBox*>(frmKeyboard->Find("chkShift"));
if (!chkShift) return false;
// Configurar el manejador de eventos de clic del ratón en el teclado virtual
frmKeyboard->evtEntrustMouseEvent = _evtKeyboardFromMouseEvent;
// Configurar los manejadores de eventos de activación para los campos de ID y contraseña
if (edtID) edtID->evtActive = _evtAccountFocus;
if (edtPassword) edtPassword->evtActive = _evtAccountFocus;
// Encontrar las imágenes de logotipo en el formulario de la cuenta
imgLogo1 = dynamic_cast<CImage*>(frmAccount->Find("imgLogo1"));
imgLogo2 = dynamic_cast<CImage*>(frmAccount->Find("imgLogo2"));
return true;
}
Quiero agradecer a todos por su ayuda. Gracias a sus sugerencias y colaboración, pude resolver el problema simplificando y eliminando partes innecesarias del código. La optimización ha mejorado significativamente la legibilidad y eficiencia de la implementación. Estoy muy agradecido por su apoyo y orientación. ¡Muchas gracias de nuevo a todos!
I want to thank everyone for their help. Thanks to your suggestions and collaboration, I was able to solve the problem by simplifying and removing unnecessary parts of the code. The optimization has significantly improved the readability and efficiency of the implementation. I am very grateful for your support and guidance. Thanks again to all!