symbian开发小知识

如何显示bmp或者jpeg文件图像

symbian上图片的显示用CFbsBitmap,先把其他文件的图片转换为CFbsBitmap在显示。核心代码如下:

iImageDecoder = CImageDecoder::FileNewL( iFs, aFileName );

// create the destination bitmap
iBitmap = new (ELeave) CFbsBitmap();
iBitmap->Create( iImageDecoder->FrameInfo().iOverallSizeInPixels,
iImageDecoder->FrameInfo().iFrameDisplayMode );

// start conversion to bitmap
iState = EDecoding;
iImageDecoder->Convert( &iStatus, *iBitmap );



sdk中手机震动的编程接口

S60 2.0引进了振动API,要使用这个API,需要在代码添加头文件vibractrl.h,并在MMP文件中添加vibractrl.lib,但有一点是用户设置里必须开启振动。楼主可以先看看vibractrl.h中相关类的说明。

IMPORT_C static CVibraControl* NewL();
IMPORT_C static CVibraControl* NewL(MVibraControlObserver* aCallback);
IMPORT_C static CVibraControl* NewLC(MVibraControlObserver* aCallback);

应该是通过上面三个函构建一个CVibraControl对象,然后调用它StartVibra(TUint16 aDuration),StopVibra(void)来启动/停止振动。



线程发消息机制

主线程里创建一个封装了副线程的活动对象类,顺手写的,141421。

// MyActive.h
class CMyActive : public CActive
{
public:
void DownloadL(const TDesC& aUrl); //

protected:
void DoCancel();
void RunL();
private:
static TInt ThreadFunction(TAny* aArg);

private:
RThread iThread;
};

// MyActive.cpp
void CMyActive : DownloadL(const TDesC& aUrl)
{
// 创建线程
iThread.Logon(iStatus); // 请求副线程退出时通知主线程。
SetActive();
// ...
}

void CMyActive::RunL()
{
if(iStatus.Int()==KErrNone)
{
// 副线程已正常退出
}
}

TInt CMyActive::ThreadFunction(TAny* aArg)
{
// 下载
}


如何获取翻盖的状态

Series 60 C++开发伙伴们现在可以编写一些应用软件,用来响应用户打开或关闭手 机上盖、或改变可移动相机的方位。上面两种用户动作都有可能出现在诺基亚N90多媒体终端上。这类软件事件自 Series 60 2nd Edition Feature Pack 2以后就已获支持。如,当用户合上其终端时开发者能令输出自动转移到 外屏显示, 而当用户打开终端时,输出又将自动转移到内屏(通常内屏较大)。

如欲向某个应用软件添加这类功能,只需简单地在CEikAppUi::HandleKeyEventL()中增加一些事件处理句柄。相应的事件 (TEventCode)是EEventScreenDeviceChanged、EEventCaseOpened、和 EEventCaseClosed。当相机旋转时,则 是EEventKeyUp和EEventKeyDown类型的按键事件。

以下范例代码用于检测当前的相机方位:

#include // link against ecam.lib
CCamera* cam = CCamera::NewL(*this, 0);
TCameraInfo info;
cam->CameraInfo(info);
TCameraOrientation orientation = info.iOrientation;



将TDesC类型 转换成char *型

const char* cp = reinterpret_cast<const char*>(desc.Ptr()); // or use PtrZ()
char* p = const_cast<char*>(cp);

Remember that the length of the string is desc->Size() (or desc->Length()*2), and the max length of the string is desc->MaxLength()*2(including the '/0' terminator, if any).

具体看:
"Conversion bitween 8 and 16 bits descriptors"
http://forum.newlc.com/index.php/topic,1075.0.html


从文件中读取中文乱码的解决办法

方法一:

CnvUtfConverter::ConvertFromUnicodeToUtf8(),把UNICODE转换成UTF-8编码后再显示.

方法二:


CCnvCharacterSetConverter* converter=CCnvCharacterSetConverter::NewLC();
// Check if there is conversion between GBK/GB2312 and unicode
if(converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierUtf8,
CEikonEnv::Static()->FsSession())!=CCnvCharacterSetConverter::EAvailable)
User::Leave(KErrNotSupported);
TInt state=CCnvCharacterSetConverter::KStateDefault;
HBufC* aTextBuf = HBufC::NewL( aStuffData.Length() );
TPtr16 ptr = aTextBuf->Des();
if(CCnvCharacterSetConverter::EErrorIllFormedInput == converter->ConvertToUnicode(ptr, aStuffData, state))
User::Leave(KErrArgument); //Leave if error in conversion.
CleanupStack::PopAndDestroy(); //clean for converter


文件保存


一些数据保存到文件中去,每个变量都保存在记事本文件中的一行,每一行记忆个变量的值。

RFile file;
// open the file here ...
TFileText txtfile;
txtfile.Set(file);
// convert your data to a descripter ...

// this operation appends a line delimiter to the descriptor
txtfile.Write(data);

// Of cource TFileText::Read() is the reverse operation which read a whole line.


编辑框的当前输入法

当焦点在某个编辑框时,获得当前编辑框的输入法:

TCoeInputCapabilities icap = edwin->InputCapabilities();
CAknEdwinState* edwinState = static_cast(icap.FepAwareTextEditor()->Extension1()->State(KNullUid));
TInt inputMode = edwinState->CurrentInputMode();



实现字节对齐

The GCC compiler ignores "#pragma pack" statement when compiling for ARM platform, so you should use "__attribute__((packed, aligned))", like this:

#if defined(__WINS__)
#define PACKED
#else
#define PACKED __attribute__((packed, aligned(1)))
#endif

#pragma pack(1)

typedef struct {
char sig[104];
unsigned char verl,key;
int nFile, dFile, crc;
}PACKED avl1;

typedef struct {
char name[22];
int length, crc32;
}PACKED avd1;

#pragma pack(4)


简单实现一个延时或者计时功能

你需要完成最少三个步骤:
一、创建CPeriodic对象,如

void CPeriodicRunner::StartTimer()
{
const TInt tickInterval=1000000;
iPeriodic=CPeriodic::NewL(0); // neutral priority
iPeriodic->Start(tickInterval,tickInterval,TCallBack(Tick, this));
}

CPeriodic::Start原型为:void Start(TTimeIntervalMicroSeconds32 aDelay,TTimeIntervalMicroSeconds32 anInterval,TCallBack aCallBack);
因此我们需要有一个callback函数,在每次回调时能做点什么,于是有了第二个步骤

二、Callback函数的完成
TInt CPeriodicRunner::Tick(TAny* aObject)
{
// cast, and call non-static function
((CPeriodicRunner*)aObject)->DoTick();
return 1;
}

如果您不熟悉TCallBack,可以参考SDK,上面这个函数完成了计时的时候相应的循环动作(DoTick)

三、计时器的析构
在计时停止或外界终止后,需要停止该计时器,一句话即可:
CPeriodicRunner->Cancel();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值