-
-
[旧帖] (邀请码已发)[原创][原创]MFC中使用BCG构造仿"360漏洞扫描"的界面(申请邀请码) 0.00雪花
-
发表于: 2010-9-1 22:34 2153
-
最近学习界面设计,研究了下BCG,和大家分享下。见笑了。本来可以直接创建BCG的工程,就可实现。前段时间曾看到有人在问MFC的工程中使用BCG的问题。遂有此文。
360漏洞扫描界面,补丁的展示
![](upload/attach/201009/305134_e8r63woffuqq6er.png)
QQ医生(现已升级为QQ电脑管家)中漏洞扫描结果展示
![](upload/attach/201009/305134_9faj3doklbbkxrw.png)
我们想要实现这种效果,怎样做呢。最直接想到的是自绘listctrl,codeproject上有份源码CListCtrl and Grouping Rows,实现了类似的功能。但是它在win7,winxp,win2000的界面是不一样的。listctrl的分组只有在winxp以后才有。codeproject上的这个例子在win2000系统下世不支持分组的。QQ和360在win2K到win7的环境下都是同样的界面。都做的很好。
我这里利用BCG来做,顺便说下BCG在MFC中的应用。BCGControlBarPro-V12.00可以到csdn上下载,这里就不上传了。为了使用BCG库,首先要编译出下载的BCG库。
首先建立一个单文档程序
第二步:工具---->选项----->项目和解决方案----->VC++----->包含文件(将BCG头文件所在目录包含进来)
第三步:在stdfax.h中包含头文件
#include <BCGCBProInc.h>
第四步,复制已经编译好的dll和lib文件到建立好的工程目录下,在stdfax.h中先引入
#pragma comment(lib, "BCGCBPRO1200d90.lib")
第五步,使用BCG的类编程。
下面是在MFC中使用BCG实现的效果
![](upload/attach/201009/305134_x5g5euou5rkhgl0.png)
实现步骤:
在BCGTestView.h中声明:
public:
BOOL AddMail (
LPCTSTR types,
LPCTSTR strnames,
LPCTSTR descrs ,
LPCTSTR times,
LPCTSTR states);
public:
CBCGPReportCtrl m_wndGrid;
第二步:在BCGTestView.cpp中实现
BOOL CBcgTestView::AddMail (
LPCTSTR types,
LPCTSTR strnames,
LPCTSTR descrs ,
LPCTSTR times,
LPCTSTR states)
{
CBCGPGridRow* pRow = m_wndGrid.CreateRow (m_wndGrid.GetColumnCount ());
pRow->GetItem(0)->SetValue(types,FALSE);
pRow->GetItem (1)->SetValue (strnames, FALSE);
pRow->GetItem (2)->SetValue (descrs, FALSE);
pRow->GetItem(3)->SetValue(times,FALSE);
pRow->GetItem(4)->SetValue(states,FALSE);
m_wndGrid.AddRow (pRow, FALSE);
return TRUE;
}
inline int Rand (int nMax)
{
int nRes = rand () % nMax;
return min (nRes, nMax - 1);
}
void CBcgTestView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: 在此添加专用代码和/或调用基类
//ASSERT_VALID (m_wndGrid);
m_wndGrid.SetScrollBarsStyle (CBCGPScrollBar::BCGP_SBSTYLE_VISUAL_MANAGER);
CRect rectGrid(0,0,0,0);
GetClientRect(&rectGrid);
//rectGrid.top-=2;
// Create the Windows control and attach it to the Grid object
m_wndGrid.Create (WS_CHILD | WS_VISIBLE | WS_BORDER, rectGrid, this, IDC_GRDID);
// Insert columns:
m_wndGrid.InsertColumn (0, _T("类型"), 100);
m_wndGrid.InsertColumn (1, _T("补丁名称"), 100);
m_wndGrid.InsertColumn (2, _T("描述"), 100);
m_wndGrid.InsertColumn (3, _T("发布日期"), 100);
m_wndGrid.InsertColumn (4, _T("状态"), 100);
m_wndGrid.EnableColumnAutoSize (TRUE);
const int nColumns = m_wndGrid.GetColumnCount ();
#define TYPE_NUM 3
LPCTSTR arTypes[TYPE_NUM] =
{
_T("可选"),
_T("重要"),
_T("紧急"),
};
#define TIME_NUM 3
LPCTSTR arTime[TIME_NUM] =
{
_T("2010-06-22"),
_T("2010-05-15"),
_T("2009-06-08"),
};
#define NAMES_NUM 3
LPCTSTR arNames [NAMES_NUM] =
{
_T("KB982312"),
_T("KB123456"),
_T("KB956957"),
};
#define DESCR_NUM 3
LPCTSTR arDescrs [DESCR_NUM] =
{
_T("windows系统安全更新程序"),
_T("win7更新程序"),
_T("windows可选补丁"),
};
#define STATE_NUM 3
LPCTSTR arState [DESCR_NUM] =
{
_T("未修复"),
_T("已修复"),
_T("立即修复"),
};
for (int i = 0; i <20; i++)
{
AddMail (
arTypes [Rand (TYPE_NUM)],
arNames [Rand (NAMES_NUM)],
arDescrs [Rand (DESCR_NUM)],
arTime[Rand(TIME_NUM)],
arState[Rand(STATE_NUM)]);
}
m_wndGrid.InsertGroupColumn(0,0);
CBCGPVisualManager2007::SetStyle (CBCGPVisualManager2007::VS2007_LunaBlue);
CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManager2007));
m_wndGrid.AdjustLayout ();
}
注意事项:
编译的BCG库类型要和新建的文档类型相匹配。也即
BCG 编译的库
Debug版本(多字节/UNICODE/共享DLL中使用MFC)
Release(多字节/UNICODE /共享DLL中使用MFC)
MFC
DEBUG版本(多字节/UNICODE/共享DLL中使用MFC )
Release(多字节/UNICODE /共享DLL中使用MFC)
一定要对应,否则出错。
附:我建BCGTest工程中包含了BCG编译的静态库,限于上传大小限制,就不上传了。
360漏洞扫描界面,补丁的展示
![](upload/attach/201009/305134_e8r63woffuqq6er.png)
QQ医生(现已升级为QQ电脑管家)中漏洞扫描结果展示
![](upload/attach/201009/305134_9faj3doklbbkxrw.png)
我们想要实现这种效果,怎样做呢。最直接想到的是自绘listctrl,codeproject上有份源码CListCtrl and Grouping Rows,实现了类似的功能。但是它在win7,winxp,win2000的界面是不一样的。listctrl的分组只有在winxp以后才有。codeproject上的这个例子在win2000系统下世不支持分组的。QQ和360在win2K到win7的环境下都是同样的界面。都做的很好。
我这里利用BCG来做,顺便说下BCG在MFC中的应用。BCGControlBarPro-V12.00可以到csdn上下载,这里就不上传了。为了使用BCG库,首先要编译出下载的BCG库。
首先建立一个单文档程序
第二步:工具---->选项----->项目和解决方案----->VC++----->包含文件(将BCG头文件所在目录包含进来)
第三步:在stdfax.h中包含头文件
#include <BCGCBProInc.h>
第四步,复制已经编译好的dll和lib文件到建立好的工程目录下,在stdfax.h中先引入
#pragma comment(lib, "BCGCBPRO1200d90.lib")
第五步,使用BCG的类编程。
下面是在MFC中使用BCG实现的效果
![](upload/attach/201009/305134_x5g5euou5rkhgl0.png)
实现步骤:
在BCGTestView.h中声明:
public:
BOOL AddMail (
LPCTSTR types,
LPCTSTR strnames,
LPCTSTR descrs ,
LPCTSTR times,
LPCTSTR states);
public:
CBCGPReportCtrl m_wndGrid;
第二步:在BCGTestView.cpp中实现
BOOL CBcgTestView::AddMail (
LPCTSTR types,
LPCTSTR strnames,
LPCTSTR descrs ,
LPCTSTR times,
LPCTSTR states)
{
CBCGPGridRow* pRow = m_wndGrid.CreateRow (m_wndGrid.GetColumnCount ());
pRow->GetItem(0)->SetValue(types,FALSE);
pRow->GetItem (1)->SetValue (strnames, FALSE);
pRow->GetItem (2)->SetValue (descrs, FALSE);
pRow->GetItem(3)->SetValue(times,FALSE);
pRow->GetItem(4)->SetValue(states,FALSE);
m_wndGrid.AddRow (pRow, FALSE);
return TRUE;
}
inline int Rand (int nMax)
{
int nRes = rand () % nMax;
return min (nRes, nMax - 1);
}
void CBcgTestView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: 在此添加专用代码和/或调用基类
//ASSERT_VALID (m_wndGrid);
m_wndGrid.SetScrollBarsStyle (CBCGPScrollBar::BCGP_SBSTYLE_VISUAL_MANAGER);
CRect rectGrid(0,0,0,0);
GetClientRect(&rectGrid);
//rectGrid.top-=2;
// Create the Windows control and attach it to the Grid object
m_wndGrid.Create (WS_CHILD | WS_VISIBLE | WS_BORDER, rectGrid, this, IDC_GRDID);
// Insert columns:
m_wndGrid.InsertColumn (0, _T("类型"), 100);
m_wndGrid.InsertColumn (1, _T("补丁名称"), 100);
m_wndGrid.InsertColumn (2, _T("描述"), 100);
m_wndGrid.InsertColumn (3, _T("发布日期"), 100);
m_wndGrid.InsertColumn (4, _T("状态"), 100);
m_wndGrid.EnableColumnAutoSize (TRUE);
const int nColumns = m_wndGrid.GetColumnCount ();
#define TYPE_NUM 3
LPCTSTR arTypes[TYPE_NUM] =
{
_T("可选"),
_T("重要"),
_T("紧急"),
};
#define TIME_NUM 3
LPCTSTR arTime[TIME_NUM] =
{
_T("2010-06-22"),
_T("2010-05-15"),
_T("2009-06-08"),
};
#define NAMES_NUM 3
LPCTSTR arNames [NAMES_NUM] =
{
_T("KB982312"),
_T("KB123456"),
_T("KB956957"),
};
#define DESCR_NUM 3
LPCTSTR arDescrs [DESCR_NUM] =
{
_T("windows系统安全更新程序"),
_T("win7更新程序"),
_T("windows可选补丁"),
};
#define STATE_NUM 3
LPCTSTR arState [DESCR_NUM] =
{
_T("未修复"),
_T("已修复"),
_T("立即修复"),
};
for (int i = 0; i <20; i++)
{
AddMail (
arTypes [Rand (TYPE_NUM)],
arNames [Rand (NAMES_NUM)],
arDescrs [Rand (DESCR_NUM)],
arTime[Rand(TIME_NUM)],
arState[Rand(STATE_NUM)]);
}
m_wndGrid.InsertGroupColumn(0,0);
CBCGPVisualManager2007::SetStyle (CBCGPVisualManager2007::VS2007_LunaBlue);
CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManager2007));
m_wndGrid.AdjustLayout ();
}
注意事项:
编译的BCG库类型要和新建的文档类型相匹配。也即
BCG 编译的库
Debug版本(多字节/UNICODE/共享DLL中使用MFC)
Release(多字节/UNICODE /共享DLL中使用MFC)
MFC
DEBUG版本(多字节/UNICODE/共享DLL中使用MFC )
Release(多字节/UNICODE /共享DLL中使用MFC)
一定要对应,否则出错。
附:我建BCGTest工程中包含了BCG编译的静态库,限于上传大小限制,就不上传了。
赞赏
他的文章
谁下载
aqtata
xIkUg
ldljlzw
rainbow
zhongk
gx_sz
bbinn
yusjck
lingyu
mowenli
muyen
bluecode
allkilled
diaowubin
hacknr
后街男孩
zyxisbg
火心
exile
pandaforum
xiejienet
neineit
wpclub
ouyangxx
CCDeath
tfzxyinhao
huangkez
jesterjy
noisc
JohnsonGuo
苏打
zhchchqihu
叶xiang
伢学编程
雪妖
pinkboy
HelloCrack
renminbi
魔之幻灵
majinxin
moonife
DuoLaMMeng
mszjk
zphdebug
flysouding
longsec
zhuangbx
叁毛
qilinjiang
红叶疯了
keyword
tokiii
笔雪
野仔与狗
ltvictory
hoholove
cxthl
joeyye
王刚wanxg
Nermor
logitech
踏雪流云
LoveVc
xiaocaih
HisanCN
hblqzj
咪···WC
Love琼
wsxb
newbeecyq
zjgsrh
净土净土
xinxinms
ErrorKit
MaYil
nvtester
静寞
ZzhBy
citizenlq
谁下载
aqtata
xIkUg
ldljlzw
rainbow
zhongk
gx_sz
bbinn
yusjck
lingyu
mowenli
muyen
bluecode
allkilled
diaowubin
hacknr
后街男孩
zyxisbg
火心
exile
pandaforum
xiejienet
neineit
wpclub
ouyangxx
CCDeath
tfzxyinhao
huangkez
jesterjy
noisc
JohnsonGuo
苏打
zhchchqihu
叶xiang
伢学编程
雪妖
pinkboy
HelloCrack
renminbi
魔之幻灵
majinxin
moonife
DuoLaMMeng
mszjk
zphdebug
flysouding
longsec
zhuangbx
叁毛
qilinjiang
红叶疯了
keyword
tokiii
笔雪
野仔与狗
ltvictory
hoholove
cxthl
joeyye
王刚wanxg
Nermor
logitech
踏雪流云
LoveVc
xiaocaih
HisanCN
hblqzj
咪···WC
Love琼
wsxb
newbeecyq
zjgsrh
净土净土
xinxinms
ErrorKit
MaYil
nvtester
静寞
ZzhBy
citizenlq
谁下载
aqtata
xIkUg
ldljlzw
rainbow
zhongk
gx_sz
bbinn
yusjck
lingyu
mowenli
muyen
bluecode
allkilled
diaowubin
hacknr
后街男孩
zyxisbg
火心
exile
pandaforum
xiejienet
neineit
wpclub
ouyangxx
CCDeath
tfzxyinhao
huangkez
jesterjy
noisc
JohnsonGuo
苏打
zhchchqihu
叶xiang
伢学编程
雪妖
pinkboy
HelloCrack
renminbi
魔之幻灵
majinxin
moonife
DuoLaMMeng
zphdebug
flysouding
longsec
zhuangbx
叁毛
qilinjiang
红叶疯了
keyword
tokiii
笔雪
野仔与狗
ltvictory
hoholove
cxthl
joeyye
王刚wanxg
mengwuji
Nermor
logitech
踏雪流云
LoveVc
xiaocaih
HisanCN
hblqzj
咪···WC
Love琼
wsxb
newbeecyq
zjgsrh
净土净土
xinxinms
ErrorKit
awqqli
MaYil
nvtester
静寞
ZzhBy
citizenlq
赞赏
雪币:
留言: