SonicUI在MFC中的使用
SonicUI是一个GUI引擎,提供了一些简单的UI组件实现高效率的UI效果,例如:自绘按钮、异形窗体、动画、超链接和图像操作方法。此项目作者开源到CodeProject,地址为:http://www.codeproject.com/KB/GDI/SonicUI.aspx。下载源代码编译动态库版本和静态库版本,在此我以Visual Studio 2008 SP1编译,也打包到下面的下载地址里面。下面介绍下SonicUI在MFC中的使用,如果有错误之处,还请指出。
1.新建一个基于对话框、使用Unicode库的工程,工程名称SonicUITest;
2.复制ISonicUI.h文件到工程目录下,添加此文件进工程;
3.复制SonicUIUd.dll、SonicUIUd_Dll.lib和SonicUIU.lib到工程目录下(这些是自己编译出来的);
4.在stdafx.h文件,添加以下代码:
1 2 3 4 5 6 |
|
#include "ISonicUI.h" #ifdef _DEBUG #pragma comment(lib,"SonicUIUd_Dll") //调试时用Debug动态库 #endif #pragma comment(lib,"SonicUIU") //发布时用Release静态库(目录下还需其他支持库) using namespace sonic_ui; |
5.在对话框头文件,添加以下代码:
1 2 3 4 |
|
]; //以关键字格式化字符串 void OnClose(ISonicString * pStr, LPVOID); //委托关闭 |
6.在对话框构造函数,添加以下代码:
1 2 3 |
|
g_pEffect = NULL; g_pText[] = NULL; g_pText[] = NULL; |
7.在对话框OnInitDialog初始化函数里,添加以下代码:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
BOOL CSonicUITestDlg::OnInitDialog() { CDialog::OnInitDialog(); ,,)); ] = GetSonicUI()->CreateString(); g_pText[] = GetSonicUI()->CreateString(); ]->Format(_T(]->Format(_T(, , )); return TRUE; } |
8.添加窗体变换后的委托事件代码:
1 2 3 4 |
|
void CSonicUITestDlg::OnClose(ISonicString * pStr, LPVOID) { ::DestroyWindow(g_pEffect->GetSafeHwnd()); } |
9.窗体上添加3个按钮,事件分别如下:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 |
|
, ); } , , ), , LWA_COLORKEY); } , CRect(, , , ), ); } |
10.在对话框OnPaint()函数里面绘制文字,添加以下代码:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 |
|
]->TextOut(hdc, , , m_hWnd); g_pText[]->TextOut(hdc, , , m_hWnd); ::EndPaint(m_hWnd, &ps); CDialog::OnPaint(); } } |
11.编译、运行程序,截图如下:
SonicUI对异形窗体,自绘按钮等的支持。
1.首先准备素材文件,一张PNG背景图和一张PNG按钮图片,导入到上面工程的资源里面,VS2008会自动分辨为“PNG”资源类型名。
再加入一张动态GIF头像,加入到新建“IMAGE”资源类型,ID号为GIF_USERHEAD。再从“资源视图”打开IDD_ABOUTBOX对话框,删除默认控件,添加两个EDIT控件,设置其属性Border为False、Multiline为True、Want Return为True。
2.在对话框的实现文件,类CAboutDlg里面添加以下代码:
1 2 3 4 5 6 7 |
|
protected: ISonicString* g_pButton; //自绘按钮 ISonicImage* g_pImgButton; //自绘按钮图片 ISonicImage* g_pImgBG; //背景图片 ISonicImage* g_pImgUserHead; //头像图片 ISonicAnimation* g_pUserHead; //头像图片动画 void OnClose(ISonicString* pStr, LPVOID); //委托关闭事件 |
3.重载CAboutDlg的WM_PAINT消息函数,剩下的代码如下:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
|
BOOL CAboutDlg::OnInitDialog() { CDialog::OnInitDialog(); ,,)); a_pEffect->SetLayeredAttributes(RGB(, , ), , LWA_COLORKEY); a_pEffect->EnableWholeDrag(TRUE); , , g_pImgBG->GetWidth(), g_pImgBG->GetHeight(), SWP_NOMOVE); ::SetWindowPos(GetDlgItem(IDC_EDIT1)->m_hWnd, NULL, , , , , SWP_NOZORDER); ::SetWindowPos(GetDlgItem(IDC_EDIT2)->m_hWnd, NULL, , , , , SWP_NOZORDER); , , pGif->GetWidth(), pGif->GetHeight()); g_pUserHead->AddObject(pGif->GetObjectId()); , , m_hWnd); ::EndPaint(m_hWnd, &ps); } void CAboutDlg::OnClose(ISonicString * pStr, LPVOID) { OnOK(); } |
4.编译、运行程序,截图如下:
下载地址:http://download.csdn.net/source/3561699
参考资料:
1.SonicUI - A Convenient GUI Engine You've Never Seen http://www.codeproject.com/KB/GDI/SonicUI.aspx
2.让UI开发轻松而快乐,用SonicUI引擎实现常见UI效果 http://blog.csdn.net/zskof/article/details/3496343
3.SonicUI运行机制的粗略分析 http://blog.csdn.net/alien75/article/details/5940210
最新文章
- 《Entity Framework 6 Recipes》中文翻译系列 (46) ------ 第八章 POCO之领域对象测试和仓储测试
- html经验汇总
- Fiddler-007-修改HTTP请求响应数据
- 我的Android最佳实践之—— ImageView中图片拉伸显示
- MVC datetime? &; datetime 设置格式
- Oracle 创建和使用视图
- Bootstrap_排版_表格
- QT最简单的程序执行过程分析(内含C++基础知识)
- offsetWidth,offsetHeight到底该如何理解?
- 架构师入门:搭建双注册中心的高可用Eureka架构(基于项目实战)
- fail2ban防止SSH暴力破解
- windows之如何把文件夹转换成iso文件
- Revit二次开发 推荐
- c#UDP协议
- go byte 和 string 类型之间转换
- C#日期转换(转载)
- cf C. Finite or not? 数论
- Bootstrap面板
- centos多版本python安装pip
- 利用正则表达式去除所有html标签,只保留文字
热门文章
- USB接口的SmartCard Class协议标准:ICCD and CCID
- 我在北京找工作(二):java实现算法<;1>; 冒泡排序+直接选择排序
- Python: 在Unicode和普通字符串之间转换
- poj 1731 Orders(暴力)
- H264解码的一个測试程序
- 字符相等(E - 暴力求解、DFS)
- [Swust OJ 763]--校门外的树 Plus(暴力枚举)
- CPU满格的元凶,这回是由于QTimer引起的(默认interval是0,太猛)
- c# 数据库编程(通过SqlCommand 执行数据库查询)
- 从陌陌上市看BAT的移动保卫战(转)