让UI开发轻松而快乐,用SonicUI引擎实现常见UI效果
2009-01-17 19:39:14 来源:WEB开发网ISonicImage * pImg = GetSonicUI()->CreateImage();
这样就可以像写网页一样在你的界面上进行文字和图片的混合排版输出了。
pImg->Load("C:1.png");
ISonicString * pStr = GetSonicUI()->CreateString();
pStr->Format("/c=%x/你好吗,朋友/p=%d, a='http://hi.csdn.net/zskof'/", RGB(0, 0, 255), pImg->GetObjectId());
3.自绘按钮
自绘按钮恐怕是UI编写中最常见也是重复度最高的工作,通常是继承自CButton然后ownerdraw出来。我的实现是不使用窗体的纯自绘。其实超链接也可以理解为按钮的一种,所以我自绘按钮的使用方式跟超链接也大同小异。
void WINAPI OnMove(ISonicString * pStr, LPVOID)
同样的,格式化好后的ISonicString在OnPaint的时候输出即可,这样你就拥有一个具有三态变换的漂亮按钮,其中'p'关键字代表normal态,'ph'代表hover态,'pc'代表click态。如果从美工那里得到的源图是一张图片三态平铺的也不要紧,只需要将ph,pc都指向同一张img即可,内部会自动进行源区域裁剪。另外用过QQ2009的人可能会发现,2009的很多按钮三态变换是渐变的,体验很好,ISonicString一样可以做,只需要格式化时稍稍修改一下,
{
g_pEffect->MoveGently(0, 0);
}
// 加载三态图片资源
ISonicImage * pImgNormal = GetSonicUI()->CreateImage();
pImgNormal->Load(BMP_NORMAL);
pImgNormal->SetColorKey(RGB(255, 0, 255));
ISonicImage * pImgHover = GetSonicUI()->CreateImage();
pImgHover->Load(BMP_HOVER);
pImgHover->SetColorKey(RGB(255, 0, 255));
ISonicImage * pImgClick = GetSonicUI()->CreateImage();
pImgClick->Load(BMP_CLICK);
pImgClick->SetColorKey(RGB(255, 0, 255));
// ISonicString * g_pTest[10]
g_pTest[10]->Format("/a, p=%d, ph=%d, pc=%d, linkt='点我移动'/", pImgNormal->GetObjectId(), pImgHover->GetObjectId(),
pImgClick->GetObjectId());
g_pTest[10]->Delegate(DELEGATE_EVENT_CLICK, NULL, NULL, OnMove);g_pTest[10]->Format("/a, p=%d, ph=%d, pc=%d, linkt='点我移动', animation=40/", pImgNormal->GetObjectId(),
增加一个'animation=40'的控制符(40是渐变速度),就可以得到一个QQ2009一样漂亮的三态渐变按钮了。按钮的点击响应是用“委托”的方式,你需要向按钮委托一个形如void WINAPI Func(ISonicBase *, LPVOID)的全局函数或类的成员函数,以供引擎在按钮被点击时回调。
pImgHover->GetObjectId(), pImgClick->GetObjectId());
更多精彩
赞助商链接