上一次看金山开源到现在已有一两个月了。期间看到QQ群里大家对它很是热情。
最近有时间想看看金山的主界面工程KSafeMain,自己水平有限,总结的东西浅显。但还是愿意拿来与大家分享。希望对大家有帮助。
欢迎大家提出问题讨论。

上图中红色标注的地方就是超链接的地方。
它的实现是在dlgfile_header.xml文件中。

eg:
求助这个按钮:
<link class="linktext5" pos="-238,6" href="?fr=client" crtext="FFFFFF">求助</link>
标红色的部分表此控制的类型为 linktext5,它是定义在def_style.xml文件中.
通过cursor节点的属性实现放上去有手的开关的功能。
那么是哪里调用了此文件中呢?
在bkwinres.rc2中有

即,我们把此文件定义为509了。
而在dlg_main.xml中对调用了ID为509的XML文件


首先绑定dlg_main.xml里的 <tabctrl id="136"
在bkwinres.h中有
#define IDC_TAB_MAIN 136
在beikesafemaindlg.h中有
BK_NOTIFY_MAP(IDC_RICHVIEW_WIN)
//BK_NOTIFY_ID_COMMAND(IDCANCEL, OnBkBtnClose)
BK_NOTIFY_ID_COMMAND(IDC_BTN_SYS_CLOSE, OnBkBtnClose)
BK_NOTIFY_ID_COMMAND(IDC_BTN_SYS_MAX, OnBkBtnMax)
BK_NOTIFY_ID_COMMAND(IDC_BTN_SYS_MIN, OnBkBtnMin)
BK_NOTIFY_TAB_SELCHANGE(IDC_TAB_MAIN, OnBkTabMainSelChange)
BK_NOTIFY_MAP_END()
BOOL CBeikeSafeMainDlg::OnBkTabMainSelChange(int nTabItemIDOld, int nTabItemIDNew)
{
DEBUG_TRACE(L"Tab Change %d, %d\r\n", nTabItemIDOld, nTabItemIDNew);
BOOL bRet = FALSE;
if (m_bFirstPageChange)
{
if (0 != nTabItemIDNew)
{
PostMessage(MSG_APP_DELAY_EXAM, FALSE);
}
m_bFirstPageChange = FALSE;
}
bRet = TRUE;
switch (nTabItemIDNew)
{
case 0:
if (m_bPage0NeverShowed)
{
PostMessage(MSG_APP_DELAY_NIGATE_IE);
PostMessage(MSG_APP_DELAY_EXAM, TRUE);
m_bPage0NeverShowed = FALSE;
}
break;
case 1:
break;
case 2:
break;
case 3: // 修复漏洞
m_viewVulfix.ShowWindow(SW_SHOW);
if(!m_bVulfixInited || m_bVulfixRescanRequired)
{
BOOL toRescan = TRUE;
if(m_bVulfixRescanRequired && theEngine && theEngine->m_isRepairing)
{
toRescan = FALSE;
}
m_bVulfixInited = TRUE;
m_bVulfixRescanRequired = FALSE;
if(toRescan)
m_viewVulfix.m_viewSoftVul.InitEnv();
}
break;
case 4://系统优化
case 5://清理
case 6://网盾
case 8:// 打开软件管理
default:
break;
}
return TRUE;
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-38143-1.html
拿出切实可行的措施
恶狗情怀透视
没人敢惹吧
去年买个表