本软件是一个录波的查看分析软件,是在2008年6、7月份用VC++2003开发的,能分析公司所有的录波格式,能打开标准comtrade文本格式录波文件,能把打开的录波文件保存为comtrade格式。之前也做过一个类似的程序,但是没有这个功能多,兼容性好。下面是打开多个文件后的程序界面。

它是个多文档程序,包括两部分,一个是MDI框架 (打开文件),编译成了exe;一个是MDI子窗口 (显示波形),编译成了dll,两个放到一起才能执行。因为历史和现实原因,波形文件的格式各不相同,在打开文件的时候,把它们统一成程序内部可操作的格式,然后分派给MDI子窗口显示。注意程序下方的窗口切换栏,是模仿EditPlus制作的。

//窗口切换栏的部分代码
void CMdiTabBar::AddButton(CString& caption, HWND wnd)
{
TBtnInfo new_btn;
int size = (int)m_BtnInfos.GetSize();
CDC* pdc = GetDC();
CSize tsize; //文字占的地方大小
//文字宽度
pdc->SelectStockObject(DEFAULT_GUI_FONT);
tsize = pdc->GetTextExtent(caption);
if(size > 0)
{
for(int i=0; i < size; i++)
m_BtnInfos[i].IsFocus = false;
}
new_btn.Caption = caption;
new_btn.ChildWnd = wnd;
new_btn.IsFocus = true;
new_btn.CaptionWidth = tsize.cx;
m_BtnInfos.Add(new_btn);
Relayout();
Invalidate();
}
显示和隐藏

拖放比较,放大缩小

水平参考线,垂直参考线,设置界面颜色和波形颜色

蜂窝状的颜色选择框也是我的得意之作,模仿Office中的颜色选择,Office中蜂窝外围颜色很不规则,我把它都做成规则的了。下面就是颜色处理的部分代码。

// 功能: 颜色变换 HSL -> RGB
// 参数: H - 色相(0.0 - 1.0)
// S - 饱和度(0.0 - 1.0)
// L - 亮度(0.0 - 1.0)
COLORREF CColorPickerCtrl::HslToRgb(double H, double S, double L)
{
int R, G, B;
double v1, v2;
if(S <= 0.0001) //灰色
{
R = G = B = int(L * 255 + 0.5);
}
else
{
if(L < 0.5)
v2 = L * (1.0 + S);
else
v2 = L + S - S * L;
v1 = 2 * L - v2;
R = int(255 * HueToRgb(v1, v2, H + 1.0 / 3.0) + 0.5);
G = int(255 * HueToRgb(v1, v2, H) + 0.5);
B = int(255 * HueToRgb(v1, v2, H - 1.0 / 3.0) + 0.5);
}
return RGB(R, G, B);
}
查看文件属性

波形的合成计算

计算结果如下

导出为comtrade通用格式

打印预览,必须要先安装打印机

程序中使用了双向链表模板,是因为学习微软的链表类也学不好,也不喜欢用STL,才自己写的。
作者:杨志朋
文章日期:2010年1月5日
邮箱:misssir@126.com
QQ:13633292