帐号
注册
密码
登录
关闭
安全选项
找回密码
记住我
我的中心
登录或注册新用户,开通自己的个人中心
切换到窄版
论坛
标签
搜索
帮助
快速搜索
帖子标题
作者
版块
迷你5207专属论坛
»
技术带动变革
»
手机开发综合
»
M8SDK学习之SetTimer和UiPicture的简单使用方法
技术带动变革
U880/V880/N880
Android交流
手机开发综合
Mini开发技术综合区
快乐的旅程
Mini大嘴巴
返回列表
查看:
2215
|
回复:
5
[魅族M8]
M8SDK学习之SetTimer和UiPicture的简单使用方法
[复制链接]
发送短消息
UID
1
精华
77
5207.com@163.com
89387228
查看公共资料
搜索主题
搜索帖子
5207
组别
皇帝
生日
1983-12-1
帖子
1542
积分
2020
生命值
93
钱
3909.8 M
性别
发表者
字体大小:
t
T
发表于
2009-12-02 11:13
|
只看楼主
银光图片
一、
SetTimer
经常我们会利用系统时针来进行一些定时处理,比如显示时间、
M8Dock
的动画处理效果、包括
UiList
的滚动效果,可见用处非常的大。我在写一个进度窗口时就用到了
Timer
事件,原理很简单,就是让一个滚动条不断的在滚动,如下图:
图片1.jpg
(3.73 K)
2009-12-2 11:12:46
就是让一个这个方块在这个槽里面来回滚动,我的方法便是用窗口的
OnTimer
事件里进行处理。当然这仅仅是简单的实现了一个动画。
要在窗口里使用
OnTimer
事件,就必须调用
SetTimer
来设置时钟消息,这样
OnTimer
就会定时的响应消息了。代码如下:
user32.dllSetTimer UINT_PTR SetTimer(
HWND hWnd,
UINT_PTR nIDEvent,
UINT uElapse,
TIMERPROC lpTimerFunc);
复制代码
这是函数原型,有四个参数,含义如下:
1、HWND hWnd
这个参数是用于传入需要定制定时器的窗口句柄,必须设置这个句柄,系统在发送消息时才能到达。
2、UINT_PTR nIDEvent
这个参数用于设置一个定时器事件的
ID
,如果有多个定时器时通过这个
ID
来区分是哪一个定时器触发。
3、UINT
uElapse
用于设置定时器的间隔时间,也就是多少时间触发一次,单位精确到毫秒,比如:设置为
1000
表示为
1
秒。设置后每隔一秒会触发一次
OnTimer
。
4、TIMERPROC
lpTimerFunc
这个便是回调函数,用于自定义一个处理函数,由于在魅族
SDK
提供的窗口封装中已经实现了整套处理机制,通常我们是不需要再设置这个参数了,写入一个
NULL
便可。如果需要这个参数就查
MSDN
吧,有非常详细的说明。
看完函数后,我们来看一行示例代码:
uResult = SetTimer(m_hWnd,
IDT_MOUSETRAP,
60
NULL); // timer callback
if (uResult == 0)
{
ErrorHandler("No timer is available.");
}
复制代码
上面代码实现了一个定时器设置,其中
IDT_MOUSETRAP
为一个整型值,自己随便定一个值即可。通过检查
uResult
的值便可知是否成功设置了定时器。这样窗口中便会接收到
Timer
事件了。
接下来我们重写
OnTimer
,以响应定时器事件:
virtual void OnTimer(UINT_PTR nIDEvnet)
{
//做你想做的事情吧。
}
复制代码
这个
OnTimer
会每
60
毫秒执行一次。好啦,定时器就是这么简单。
二、
UiPicture
在实现进度窗口时,需要两副图片,一副是背景图片,一副是移动的小方块。那如何将图片显示呢?魅族
SDK
提供了
UiPicture
和
UiPicture2
两个控件,可以非常简单方便的实现图片显示。使用也非常简单,就和其他的控件一样,举个例子:
m_Picture.SetID(MZ_IDC_PICTURE1); m_Picture.SetPos(0,0,GetWidth(),GetHeight()-MZM_HEIGHT_TEXT_TOOLBAR); m_Picture.SetPaintMode(modeId[m_modeIndex]); m_Picture.LoadImage(MzGetInstanceHandle(),RT_RCDATA,MAKEINTRESOURCE(IDR_JPG_PIC1));AddUiWin(&m_Picture);
复制代码
这是魅族
SDK
带的例子
-11
中截取的源代码,其中的
m_Picture
便是
UiPicture
控件,看见了吧非常的简单,就是有一行代码特殊一些:
m_Picture.LoadImage(MzGetInstanceHandle(),RT_RCDATA,MAKEINTRESOURCE(IDR_JPG_PIC1));
这个方法是通过调用资源文件中的图片资源,要调用这句之前就必须将图片放在资源文件里。有没有更方便一点的方法?比如说直接调用图片文件?有的,而且是同样的方法,只不过参数换换就好咯,我们打开
UiPicture
的头文件,便会发现:
/// 从文件加载图片
void LoadImage(LPCWSTR filename, bool bUseAlpha=true);
复制代码
这个LoadImage是个重载方法,实现了两种方式的图片加载,对的,只要将上面的代码换成:
m_Picture.LoadImage(L"DISK\\PIC\\Image1.jpg", true);
复制代码
这样就能将
Image1.jpg
显示出来啦,非常简单吧。
另外魅族还提供了
UiPicture2
这个控件,有什么不同呢?看看例子中的代码便知:
//设置控件m_Picture2的属性,使用ImagingHelper加载图片
m_Picture2.SetID(MZ_IDC_PICTURE2); m_Picture2.SetPos(0,0,GetWidth(),GetHeight()-MZM_HEIGHT_TEXT_TOOLBAR); m_Picture2.SetPaintMode(modeId[m_modeIndex]); m_ImgHelper.LoadImageFromRes(MzGetInstanceHandle(),RT_RCDATA,MAKEINTRESOURCE(IDR_JPG_PIC2),true,true);m_Picture2.SetImage(&m_ImgHelper);
复制代码
可以发现这里面使用了
m_ImgHelper
,这个是
I
magingHelper
,
ImagingHelper
是用于载入图像的帮助类,然后
m_Picture2
调用的是
SetImage()
方法,很明显了,
UiPicture
便是用
ImagingHelper
作为图片提供者来实现图片显示的。直接点就是
UiPicture
直接封装了
ImagingHelper
,而
UiPicture2
便没有封装,从而提供了一个更灵活的方式。
两种方式大同小异,在具体实现时可以视情况使用,最后提一个方法
SetPaintMode()
,这个方法在前面两代码中都有使用,作何用处呢?查看头文件:
/// 设置图片绘制模式:::MZ_PAINTMODE_NORMAL, MZ_PAINTMODE_xxxx, 等.
void SetPaintMode(int nMode);
复制代码
用于设置图片绘制模式的,比如在窗口中需要显示一副背景图片,但是前景图片比窗口小,这时就可以将绘制模式设置为拉伸,这样只要将
UiPicture
设置为填充整个窗体即可,因为图片会填充整个
UiPicture
,也就填充了整个窗口了。绘制模式有下面几种:
/// 普通方式,图片居中显示
#define MZ_PAINTMODE_NORMAL 0x0000
/// 拉伸图片至整个控件矩形
#define MZ_PAINTMODE_STRETCH 0x0001
/// 平铺图片至整个控件矩形
#define MZ_PAINTMODE_TILE 0x0002
/// 只水平拉伸
#define MZ_PAINTMODE_STRETCH_H 0x0003
/// 只竖直拉伸
#define MZ_PAINTMODE_STRETCH_V 0x0004
/// 只水平平铺
#define MZ_PAINTMODE_TILE_H 0x0005
/// 只竖直平铺
#define MZ_PAINTMODE_TILE_V 0x0006
复制代码
这个在
Uipicture.h
中开头可以查到。如果想知道具体的效果查看
SDK
的例子
-11
或者自己写一个程序试试吧。
作者:
5207
出处:
http://www.mini188.com
本文版权归作者所有,欢迎转载请注明出处,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
本主题由
皇帝
5207 于 2010-12-27 22:53:31 执行 设置高亮 操作
分享
转发
相信与不相信都是矛盾的. 5207宣!欢迎您来到
点滴论坛
TOP
发送短消息
UID
597
精华
0
查看公共资料
搜索主题
搜索帖子
sprone
组别
程序员
生日
帖子
2
积分
2
生命值
0
钱
0.2 M
性别
沙发
字体大小:
t
T
发表于
2009-12-22 12:23
|
只看该用户
问一下~ 为什么我载入图片会出现丢色的现象呢?
不管是用外部载入还是资源文件~~
代码如下~
m_Picture.SetID(MZ_IDC_PICTURE1);
m_Picture.SetPos(0,0,GetWidth(),GetHeight());
m_Picture.SetPaintMode(MZ_PAINTMODE_STRETCH);
m_Picture.LoadImage(L"Disk\\A-try\\Editbj.jpg",true);
AddUiWin(&m_Picture);
TOP
发送短消息
UID
1
精华
77
5207.com@163.com
89387228
查看公共资料
搜索主题
搜索帖子
5207
组别
皇帝
生日
1983-12-1
帖子
1542
积分
2020
生命值
93
钱
3909.8 M
性别
凳子
字体大小:
t
T
发表于
2009-12-22 12:59
|
只看楼主
回复 2# sprone 的帖子
没有遇到过。
能显示的话就不应该是控件本身的问题,有可能是其他操作引起。
相信与不相信都是矛盾的. 5207宣!欢迎您来到
点滴论坛
TOP
发送短消息
UID
597
精华
0
查看公共资料
搜索主题
搜索帖子
sprone
组别
程序员
生日
帖子
2
积分
2
生命值
0
钱
0.2 M
性别
地板
字体大小:
t
T
发表于
2009-12-23 09:55
|
只看该用户
回复 3# 5207 的帖子
啊? 其他操作?? 那我也不好怎么问了哈~~
额~ 大大什么时候有时间能够看看我的代码不?
我QQ:100311632
希望大大有时间的时候能够看看~ 感激不尽~~
TOP
发送短消息
UID
1
精华
77
5207.com@163.com
89387228
查看公共资料
搜索主题
搜索帖子
5207
组别
皇帝
生日
1983-12-1
帖子
1542
积分
2020
生命值
93
钱
3909.8 M
性别
5
#
字体大小:
t
T
发表于
2009-12-23 13:15
|
只看楼主
回复 4# sprone 的帖子
加QQ群吧:58105627
相信与不相信都是矛盾的. 5207宣!欢迎您来到
点滴论坛
TOP
发送短消息
UID
610
精华
0
查看公共资料
搜索主题
搜索帖子
IfI
组别
程序员
生日
帖子
7
积分
11
生命值
4
钱
10.85 M
性别
6
#
字体大小:
t
T
发表于
2010-01-13 16:50
|
只看该用户
回复 2# sprone 的帖子
我也有这个问题。试了png和jpg都一样。
TOP
上一主题
|
下一主题
返回列表
高级编辑器
B
Color
Image
Link
Quote
Code
Smilies
动感职场
洋葱头
默认表情
你需要登录后才可以发帖
登录
|
注册
发表回复
查看背景广告
隐藏
发新主题
技术带动变革
U880/V880/N880
Android交流
手机开发综合
Mini开发技术综合区
快乐的旅程
Mini大嘴巴
浏览过的版块
Mini大嘴巴
Mini开发技术综合区
永远的Delphi
TOP
设置头像
个人资料
更改密码
用户组
收藏夹
积分
default