当前位置: 首页 > news >正文

汕头网站建设方案推广吉林省干部网络培训学院官网

汕头网站建设方案推广,吉林省干部网络培训学院官网,有什么网站可以接设计做,网站推广app开发快速登录界面关于如何登录以及多账号列表解析以及config配置文件是如何读取 1、快速登录界面关于如何登录以及快速登录界面账号如何显示 如图所示:根据按下按钮一键登录中途会发生什么。 关于一键登录按钮皮肤skin的设置: Button nameQuickLoginOkBtn textButton nameQuickLoginOkBtn text{f 2}一键登录{/f} floattrue pos105,186,0,0 width205 height33 textcolor#ff38220c disabledtextcolor#FFA7A6AA showhtmltrue aligncenter normalimagecommon/login_n.png hotimagecommon/login_o.png pushedimagecommon/login_c.png /根据Button中的name名字来找相关Button实现逻辑: 根据m_pBtnLogin就可以找实现逻辑: void CSecureUnisignonDlg::Notify(TNotifyUI msg) {if(msg.sType _T(click)){if(m_pBtnCancel msg.pSender){this-OnClickBtnCancel();}else if(m_pBtnLogin msg.pSender){this-OnClickBtnLogin();}}else if(msg.sType _T(itemactivate)){CLoginedAccountListContainerElementUI* pElem dynamic_castCLoginedAccountListContainerElementUI*(msg.pSender);this-OnClickBtnLogin();}else if (_tcsicmp(msg.sType, _T(link)) 0){} }这段代码是一个 DuiLibDirectUI Library窗口类 CSecureUnisignonDlg 中的 Notify 函数。该函数用于处理窗口中的通知消息根据不同的消息类型执行相应的操作。下面是对这段代码的解释 这段代码是一个 DuiLibDirectUI Library窗口类 CSecureUnisignonDlg 中的 Notify 函数。该函数用于处理窗口中的通知消息根据不同的消息类型执行相应的操作。下面是对这段代码的解释 void CSecureUnisignonDlg::Notify(TNotifyUI msg) {// 判断消息类型if(msg.sType _T(click)){// 处理按钮点击事件if(m_pBtnCancel msg.pSender){this-OnClickBtnCancel();}else if(m_pBtnLogin msg.pSender){this-OnClickBtnLogin();}}else if(msg.sType _T(itemactivate)){// 处理列表项激活事件CLoginedAccountListContainerElementUI* pElem dynamic_castCLoginedAccountListContainerElementUI*(msg.pSender);this-OnClickBtnLogin();}else if (_tcsicmp(msg.sType, _T(link)) 0){// 处理链接点击事件// 暂时没有具体的处理代码} } 解释 Notify 函数是 DuiLib 中的消息通知函数用于处理窗口中各种控件的事件。通过检查 msg.sType 的值可以确定收到的是哪种类型的消息。如果消息类型是 “click”则表示按钮被点击。根据发送者的身份msg.pSender分别调用 OnClickBtnCancel 或 OnClickBtnLogin 函数以执行相应的操作。如果消息类型是 “itemactivate”则表示列表项被激活。通过 dynamic_cast 将 msg.pSender 转换为列表项类型然后调用 OnClickBtnLogin 函数执行相应的操作。如果消息类型是 “link”则表示链接被点击。目前该部分代码中没有具体的处理逻辑您可以根据需要添加相应的处理代码。 这段代码主要用于处理窗口中按钮点击、列表项激活和链接点击等事件。根据实际需求您可以在对应的事件处理函数中添加具体的业务逻辑。 然后按钮点击事件的话找到相应后续逻辑: BOOL CSecureUnisignonDlg::OnClickBtnLogin() {// 打印跟踪信息TRACET();// 检查是否已选择协议if (!((ContainerDlg*)m_pParentWindow)-GetProtocolSelected()){// 如果未选择协议显示用户提示this-ShowUserPrompt(-1, _T(请您详细阅读协议并勾选同意!));return FALSE;}// 检查账号列表是否为空if (NULL m_pAccountListUI) return TRUE;// 如果账号列表为空返回if (0 m_pAccountListUI-GetCount()) return TRUE;// 设置登录按钮为焦点并禁用if (NULL ! m_pBtnLogin){m_pBtnLogin-SetFocus();m_pBtnLogin-SetEnabled(false);}// 更新应用程序信息CSDOLApp::GetInstance()-UpdateAppInfo();// 打印日志输出账号列表项的数量TRACEI([!SL-SUD-OCBL!] Count %u\n, m_pAccountListUI-GetCount());// 检查区域选择if (this-CheckAreaSelected() false){return FALSE;}// 异步获取动态密钥CAuthenManager::GetInstance()-AsyncGetDynamicKey(this);return TRUE; } 这是一个在 CSecureUnisignonDlg 类中定义的 OnClickBtnLogin 函数。以下是对该函数的主要步骤的解释 函数首先打印跟踪信息这有助于调试和追踪程序执行流程。检查是否已选择协议如果没有选择则显示用户提示信息并返回 FALSE。检查账号列表是否为空如果为空则返回 TRUE。设置登录按钮为焦点并禁用按钮防止重复点击。更新应用程序信息可能是某些全局数据的初始化。打印日志输出账号列表项的数量。检查区域选择如果检查失败则返回 FALSE。最后通过 CAuthenManager 异步获取动态密钥该过程可能包含网络请求等异步操作。 总体而言该函数执行了一系列的前提条件检查更新了一些状态禁用了按钮然后触发了异步操作。具体操作会根据函数中调用的其他方法和类的实现而有所不同。 根据**CAuthenManager::GetInstance()-AsyncGetDynamicKey(this);**触发异步操作获取动态密钥后续实现逻辑 BOOL CAuthenManager::AsyncGetDynamicKey(void *pUserData) {// 打印跟踪信息TRACET();// 检查 SdoBase 句柄是否为空if (m_pSdoBaseHandle NULL){TRACEE(AM - ag.dk - sbh is NULL!);return FALSE;}// 记录开始时间CTimeRecorder::GetInstance()-RecordStartTime(CallInterface_GetDynamicKey, ::GetTickCount());m_nLastActionId CallInterface_GetDynamicKey;int nError 0;int nRetryTimes 3;// 循环重试获取动态密钥while (nRetryTimes-- ! 0){TRACED(%d, nRetryTimes);// 设置用户数据SdoBase_SetUserData(m_pSdoBaseHandle, pUserData);// 调用 SdoBase_GetDynamicKey 获取动态密钥nError SdoBase_GetDynamicKey(m_pSdoBaseHandle);// 如果返回错误为 ERROR_PROCESSING则取消请求并等待一段时间后重试if (nError ERROR_PROCESSING){AsyncCancelRequests(pUserData);Sleep(300);continue;}// 如果没有错误跳出循环break;}// 返回操作是否成功return (nError 0); } 解释 函数首先打印跟踪信息这有助于调试和追踪程序执行流程。检查 SdoBase 句柄是否为空如果为空则返回 FALSE。记录开始时间这可能用于计算异步操作的执行时间。初始化错误码和重试次数。进行重试循环最多重试 3 次。在每次循环中设置用户数据并调用 SdoBase_GetDynamicKey 获取动态密钥。如果返回错误为 ERROR_PROCESSING则取消异步请求并等待 300 毫秒后继续下一次循环。如果没有错误跳出循环。最后返回操作是否成功即检查最终的错误码是否为 0。 该函数的主要目的是通过 SdoBase_GetDynamicKey 异步获取动态密钥具体的异步操作可能涉及到网络请求等。循环重试部分是为了处理可能的错误情况。 然后如果 SdoBase_GetDynamicKey 调用成功的话就会执行相应回调函数: void SDOAPI CAuthenManager::onGetDynamicKeyCallback(int nResultCode, const char* szFailReason, const char* szDynamicKey, const char* guid, SdoBaseHandle* handle) {// 打印跟踪信息TRACET();// 如果结果码不为 0表示获取动态密钥失败if (nResultCode ! 0){// 对特定范围的错误码进行映射if (nResultCode -10130200 nResultCode -10130100){// 将认证组件中的错误码 [-10130200, -10130100] 映射到区间 [-10524200, -10524100]nResultCode nResultCode - 394000;}// 如果失败原因不为空打印警告信息if (szFailReason ! NULL){TRACEW(AM -- o.g.dkcb --- %d --- %s, nResultCode, szFailReason);}}else{// 获取动态密钥成功缓存动态密钥if (szDynamicKey ! NULL){sm_pAuthenManager-m_strDynamicKey StringHelper::ANSIToUnicode(szDynamicKey);}}// 记录最后一次时间差并上报sm_pAuthenManager-RecordLastTimeSpanAndReport(nResultCode);// 构造获取动态密钥结果对象SGetDynamicKeyResult result;result.m_nResult nResultCode;result.m_strFailReason StringHelper::ANSIToUnicode(szFailReason);result.m_strDynamicKey (szDynamicKey ! NULL) ? StringHelper::ANSIToUnicode(szDynamicKey) : _T();result.m_pUserData SdoBase_GetUserData(sm_pAuthenManager-m_pSdoBaseHandle);result.m_strguid StringHelper::ANSIToUnicode(guid);// 通知登录窗口发送 WM_LOGIN_GET_DYNAMICKEY 消息sm_pAuthenManager-NotifyLoginWnd(WM_LOGIN_GET_DYNAMICKEY, result, 0); } 解释 函数首先打印跟踪信息这有助于调试和追踪程序执行流程。如果结果码不为 0表示获取动态密钥失败对特定范围的错误码进行映射。如果失败原因不为空打印警告信息。如果结果码为 0表示获取动态密钥成功将动态密钥缓存在 CAuthenManager 类的成员变量中。调用 RecordLastTimeSpanAndReport 函数记录最后一次时间差并上报可能用于性能统计。构造 SGetDynamicKeyResult 对象存储获取动态密钥的结果和相关信息。通过 NotifyLoginWnd 函数通知登录窗口发送 WM_LOGIN_GET_DYNAMICKEY 消息传递获取动态密钥的结果。 然后调用**sm_pAuthenManager-NotifyLoginWnd(WM_LOGIN_GET_DYNAMICKEY, result, 0);**通知相关窗口获取动态密钥成功或者失败: void CAuthenManager::NotifyLoginWnd(int nNotifyType, void* result, void* ud) {// 打印跟踪信息TRACET();// 全部采用 PostMessage 防止阻塞认证组件中的线程// 动态分配的内存在相关窗口收到相应消息后再释放switch (nNotifyType){// 根据不同的消息类型构造消息并发送case WM_LOGIN_GET_DYNAMICKEY:{SGetDynamicKeyResult *pResult new SGetDynamicKeyResult(*(SGetDynamicKeyResult*)result);::PostMessage(this-m_hWnd, WM_LOGIN_GET_DYNAMICKEY, WPARAM(pResult), 0);}break;case WM_LOGIN_AUTHEN_RESULT:{SAuthenResult *pResult new SAuthenResult(*(SAuthenResult*)result);::PostMessage(this-m_hWnd, WM_LOGIN_AUTHEN_RESULT, WPARAM(pResult), 0);}break;// ... 其他消息类型的处理default:break;} } 这是 CAuthenManager 类中的 NotifyLoginWnd 函数该函数用于通过 PostMessage 发送消息通知登录窗口或其他窗口。该函数根据传入的消息类型nNotifyType构造相应的消息结构体并将消息通过 PostMessage 发送到窗口的消息队列中。以下是对该函数的主要步骤的解释 函数首先打印跟踪信息这有助于调试和追踪程序执行流程。根据传入的消息类型nNotifyType使用 switch 语句进行分支处理构造不同类型的消息结构体。对于每种消息类型动态分配一个新的消息结构体对象并通过 PostMessage 发送消息给窗口。WPARAM 参数用于传递指向消息结构体的指针。在动态分配的内存上述消息结构体被窗口收到相应消息后进行释放因为它是通过 new 进行的动态分配。 这样的设计允许在异步操作完成后以非阻塞的方式向窗口发送消息实现了消息的异步通知和处理。不同的消息类型对应不同的消息结构体以便在消息处理时能够根据消息类型获取相应的信息。 然后根据对应的窗口收到的WM_LOGIN_GET_DYNAMICKEY消息: LRESULT CSecureUnisignonDlg::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL bHandled) {// 打印跟踪信息TRACET();bHandled FALSE;switch( uMsg ){// 根据不同的消息类型调用相应的处理函数case WM_LOGIN_GET_DYNAMICKEY:{// 转换消息参数为相应的结构体类型SGetDynamicKeyResult *pGetDynamicKeyResult (SGetDynamicKeyResult*)wParam;// 调用处理函数处理获取动态密钥的结果this-OnGetDynamicKeyResult(pGetDynamicKeyResult);// 释放动态分配的结构体内存SAFE_DELETE(pGetDynamicKeyResult);}break;case WM_LOGIN_AUTHEN_RESULT:{SAuthenResult *pSdoMobileAuthenResult (SAuthenResult*)wParam;this-OnAuthenResult(pSdoMobileAuthenResult);SAFE_DELETE(pSdoMobileAuthenResult);}break;case WM_LOGIN_AUTHEN_CONTINUE:{SAuthenContinue* pSdoaAuthenContinue (SAuthenContinue*)wParam;this-OnAuthenContinue(pSdoaAuthenContinue);SAFE_DELETE(pSdoaAuthenContinue);}break;case WM_LOGIN_UPDATE_FCM_INFO:{SUpdateFcmInfoResult* pSUpdateFcmInfoResult (SUpdateFcmInfoResult*)wParam;this-ShowFcmDlg(pSUpdateFcmInfoResult);SAFE_DELETE(pSUpdateFcmInfoResult);}break;default:// 如果是其他消息类型则标记为未处理bHandled FALSE;}return 0; } 这是 CSecureUnisignonDlg 类中的 HandleCustomMessage 函数用于处理自定义的窗口消息。根据收到的消息类型uMsg该函数调用相应的处理函数然后标记消息已经被处理。以下是对该函数的主要步骤的解释 函数首先打印跟踪信息这有助于调试和追踪程序执行流程。使用 switch 语句根据消息类型uMsg进行分支处理。对于每个消息类型转换消息参数为相应的结构体类型。调用相应的处理函数例如 OnGetDynamicKeyResult、OnAuthenResult 等来处理消息。释放动态分配的结构体内存以避免内存泄漏。标记消息已经被处理以防止消息传递到默认的消息处理函数中。 这样的设计允许在窗口收到自定义消息时执行特定的操作根据消息类型调用相应的处理函数以实现定制的消息处理逻辑。 然后调用**this-OnGetDynamicKeyResult(pGetDynamicKeyResult);**把获取动态密钥的结果传入接口: void CSecureUnisignonDlg::OnGetDynamicKeyResult(SGetDynamicKeyResult *pGetDynamicKeyResult) {// 检查用户数据确保与当前窗口关联if (pGetDynamicKeyResult-m_pUserData ! this){return;}// 如果获取动态密钥失败if (pGetDynamicKeyResult-m_nResult ! 0){// 打印警告信息TRACEW(Get dk failed!);// 启用登录按钮m_pBtnLogin-SetEnabled(true);// 显示用户提示信息this-ShowUserPrompt(pGetDynamicKeyResult-m_nResult, pGetDynamicKeyResult-m_strFailReason);return;}// 记录收集登录数据的开始时间CTimeRecorder::GetInstance()-RecordStartTime(CollectLoginData, ::GetTickCount());// 调用 OnSSOLogin 函数进行单点登录操作BOOL bLoginResult OnSSOLogin();// 打印日志输出登录结果TRACEI([!SL-SUD-OCBL!] Result %d\n, bLoginResult);// 如果登录结果为 FALSE表示是异步操作if (!bLoginResult){// 启用登录按钮m_pBtnLogin-SetEnabled(true);// 发送自定义消息 WM_NOTIFY_SECUREUNISIGNON_RETURN 到父窗口::SendMessage(m_pParentWindow-GetHWND(), WM_NOTIFY_SECUREUNISIGNON_RETURN, 0, 0);} }
http://www.w-s-a.com/news/701291/

相关文章:

  • 建设银行网站用户名鹤岗网站seo
  • 做一元夺宝网站需要什么条件西安市做网站的公司
  • 零基础建设网站教程郑州做网站推广价格
  • 平面设计免费素材网站新开三端互通传奇网站
  • ppt模板免费下载 素材医疗seo网站优化推广怎么样
  • 课程网站怎么做wordpress文章改背景色
  • 网络营销从网站建设开始卖汽车配件怎么做网站
  • 手机商城网站制作公司济南想建设网站
  • .net 建网站网站网站做员工犯法吗
  • 电子商务网站建设说课稿棕色网站设计
  • 怎么做律所的官方网站红塔网站制作
  • 装一网装修平台官网惠州seo按天付费
  • 湖南建设监理报名网站东莞模块网站建设方案
  • 网站建设小组个人主页html源码
  • 响应式网站检测工具营销公司业务范围
  • 网站源码如何安装做游戏课程网站
  • 选服务好的网站建设亚洲砖码砖专区2022
  • 网站快速查找wordpress 悬停 图片 文字
  • 网站续费 多久想自己做网站该学些什么
  • 可以自己做网站wordpress英文写作插件
  • 国外可以做会员网站的网站怎么查百度竞价关键词价格
  • 新站网站建设亚马逊关键词
  • 电商网站前端架构设计上海市建设工程安全生产协会网站
  • 东莞企业免费模版网站建设一般网站维护要多久
  • 著名建筑设计网站常州制作网站价格
  • 食品营销型网站广东省广州市白云区
  • 如何做网站哪个站推广描述对于营销型网站建设很重要飘红效果更佳
  • 济阳做网站公司99企业邮箱888
  • 国贸做网站的公司能接做网站的活的网站
  • 淮南建设厅网站上杭县建设局网站