login | Homepage | gmail
L i v a L o g

Catagory
经典书籍
个人随笔
算法研究
Java语言
C / C++
精品收藏
移动开发
云 计 算
物 联 网
NewReply
If you ...
该方法适合一种语...
Thanks ...
My good ...
The piec...
I never ...
I will r...
Your fan...
This inv...
Links
Google
Python
Eclipse
MikTex
Java
Linux
Webkit
Gcc
Codelite
Netbeans
开源中国
Tomcat
Cassandra
android
androidsrc
Appinventor
Ubuntu
cnbeta
Statistics
Articles:111
Replies:17
evc如何调用和修改系统时间

我建立了六个编辑框,想在每个编辑框中显示对应的年,月,日,时,分,秒

现在,我的做法如下,

以修改月份的为例:

void CParamSet1::OnSetfocusEdit16() //这个是用来修改月份的编辑框,当单击该编辑框时,即弹出输入数据对话框
{
 // TODO: Add your control notification handler code here
 datechange = false; //这个我是为了判断每次的输入是否按下ok键而定义的bool变量,若没按下,则输入肯定无效
 UpdateData(true);
 point_select=15; //该值没多大作用,只是我用来标示某个编辑对话框而设
    NumInput.DoModal(); //调用输入键盘,该键盘为我自己建立的,而非系统提供
 if(datetime>=10 && datetime<=120 && datechange)//若满足条件,则修改时间,这里,由于我将输入的每个数据默认扩大了10倍的,如果不用扩大,则为1到12之间,即表示输入的数据要在这二者之间,否则,无效
 {
  SYSTEMTIME st;//建立的时间变量
  GetLocalTime(&st);//获得计算机的区域时间
  st.wMonth = (int)(datetime*0.1);//datetime为我输入的数值,将该数据赋给st.wMonth
  SetLocalTime(&st);//将设置好的时间写回原来的地址
 }
// SetSystemTime(&st);
 UpdateData(FALSE);//刷新数据,使之及时显出 
}

另外,若要实时显示时间信息,还要在定时器中添加:

 GetLocalTime(&time);//这里,time为我建立的另一个SYSTEMTIME变量,m_Year等也是我建立的整形变量
 m_Year = (unsigned int)time.wYear;//这里年份应该是4位的,但默认是后两位,不影响大局,我没有改动
 m_Month = (unsigned int)time.wMonth;
 m_Day = (unsigned int)time.wDay;
 m_Hour = (unsigned int)time.wHour;
 m_Minute = (unsigned int)time.wMinute;
 m_Second = (unsigned int)time.wSecond;

最后,就要在初始化函数OnInitDialog中打开定时器SetTimer(1,500,NULL);//我的设置时0.5秒刷新一次


At 2010-09-03 03:04:01 [View] [Reply]


wince上数据库:sqlce和sqlite

最近由于项目需要, 要在wince4.2, wince5.0, mobile三种机型上面做大数据量的查询,初步估计在50W-500W条记录之间。
由于以前做mobile5的数据库项目主要是采用C#来写,而且数据量也顶多几万条,所以,为了确保项目后期少走弯路,我特意做了一下移动数据库性能测试。下面是这周的工作记录。供大家参考。
一. 由于wince4.2在打包OS的时候没有带.net的支持,所以,只能选用C++,也是为了各平台移植方便。
初步考虑采用sqlce 和 sqlite中的一种,sqlce是ms的东东,比较稳定。sqlite的开源的,使用方便,查询速度快。因此,两种我都做了一下测试。
1. sqlce开发环境:
EVC4 + sp4。 VS2005。 SqlCe 3.0
1). 先用VS2005写了一个小程序,生成50万条模拟数据。(在vs2005下操作sdf文件需要安装一个sqlce的包)
2). 在wince上使用sqlce的话,需要把以下文件copy到windows目录(我的wince没有自带sqlce包):
      sqlcese30.dll,sqlceqp30.dll,sqlceoledb30.dll,sqlceme30.dll,sqlceer30CN.dll,并注册sqlceoledb30.dll方能正常操作数据库。(或者直接安装sql的cab包也行)
3). 开始编wince下的程序,操作sqlce数据库.
     ::CoInitializeEx(NULL,COINIT_MULTITHREADED);
     //注册sqlce dll
     LRESULT   (CALLBACK*   lpDllEntryPoint)();   //声明在CPP文件的前段
     //注册
   HINSTANCE   hLib   =   LoadLibrary(L"http://www.cnblogs.com/Jade2009/admin/file://windows//sqlceoledb30.dll");
   if   (hLib == NULL )
    return ;
   (FARPROC&)lpDllEntryPoint   =   GetProcAddress(hLib,     _T("DllRegisterServer"));
       (*lpDllEntryPoint)();
//OLEDB方式操作sqlce,都是一些COM相关的东东
HRESULT   hr;
// TODO: Add your control notification handler code here
IDBInitialize   *pIDBInitialize;
IDBCreateSession   *pIDBCreateSession;
IDBCreateCommand   *pIDBCreateCommand;
ICommandText   *pICommandText;
IDBProperties   *pIDBProperties;
IUnknown   *pIUnknown;
DBPROP   dbprop[1];
DBPROPSET   dbpropset[1];

hr   =   CoCreateInstance(CLSID_SQLSERVERCE_3_0,   0,   CLSCTX_INPROC_SERVER,
IID_IDBInitialize,   (void**)&pIDBInitialize);

if   (FAILED(hr))
{
return   ;
}

dbprop[0].dwPropertyID   =   DBPROP_INIT_DATASOURCE;
dbprop[0].dwOptions   =   DBPROPOPTIONS_REQUIRED;
dbprop[0].vValue.vt   =   VT_BSTR;
dbprop[0].vValue.bstrVal   =   SysAllocString(L"http://www.cnblogs.com/Jade2009/admin/file://db.sdf/"); //Need   oleaut32.lib

if   (dbprop[0].vValue.bstrVal   ==   NULL)
{
return   ;
}

dbpropset[0].guidPropertySet   =   DBPROPSET_DBINIT; //#define   DBINITCONSTANTS
dbpropset[0].cProperties   =   sizeof(dbprop)   /   sizeof(dbprop[0]);
dbpropset[0].rgProperties   =   dbprop;

hr   =   pIDBInitialize-> QueryInterface(IID_IDBProperties,(void**)&pIDBProperties);

if   (FAILED(hr))
{
return   ;
}

hr   =   pIDBProperties-> SetProperties(sizeof(dbpropset)/sizeof(dbpropset[0]),dbpropset);

if   (FAILED(hr))
{
return   ;
}

hr   =   pIDBInitialize-> Initialize();

if   (FAILED(hr))
{
return   ;
}

hr   =   pIDBProperties-> QueryInterface(IID_IDBCreateSession,(void**)&pIDBCreateSession);

if   (FAILED(hr))
{
return   ;
}
hr   =   pIDBCreateSession-> CreateSession(NULL,IID_IUnknown,&pIUnknown); //Need   uuid.lib
if   (FAILED(hr))
{
return   ;
}
hr   =   pIUnknown-> QueryInterface(IID_IDBCreateCommand,(void**)&pIDBCreateCommand);
if   (FAILED(hr))
{
return   ;
}
hr   =   pIDBCreateCommand-> CreateCommand(NULL,IID_ICommandText,(IUnknown   **)&pICommandText);
if   (FAILED(hr))
{
return   ;
}
hr   =   pICommandText-> SetCommandText(DBGUID_SQL,L"select * from sninfo"); //执行查询
if   (FAILED(hr))
{
return   ;
}
hr   =   pICommandText-> Execute(NULL,IID_NULL,NULL,NULL,NULL);
if   (FAILED(hr))
{
return   ;
}

记得网上有采用ADO的方式操作sqlce,但听闻ms不再更新,而采用oledb方式,只是比较麻烦一点了,这样也有助于我们了解一下sqlce的一些接口。

二. 在wince上使用sqlite数据库:
1. 环境:EVC4 + sp4
1). 在 http://sqlite-wince.sourceforge.net/ 中下载 SQLite for Windows CE 的DLL 源代码.
2). eVC里新建一个“WCE Dynamic-Link Library”工程,命名为:sqlite
3). 在接下来的对话框中选择"An empty Windows CE DLL project",点击 FINISH,之后再点击 OK
4). 将源码中所有的 *.c *.h *.def 复制到工程文件夹下
5). 添加所有除shell.c和tclsqlite.c文件外所有文件到项目中。
6). 编译生成sqlite.lib和sqlite.dll.

2. 在 http://softvoile.com/development/CppSQLite3U/下载 高人用C++封装的sqlite的类,(基于上面生成的sqlite.lib)
    一般来讲,我们都会是先在windows上使用sqlite的数据库,并导入基础数据。然后把数据库copy到wince里,再操作。
     此类是封装的sqlite的unicode函数,能在windows下和wince下都正常使用,但有一点要注意:
如果要在windows下使用,因为VC6默认是建的_MBCS项目,而如果要调用unicode的函数,生成utf16数据以供在wince下能正常显示中文,则需要把项目的编译参数从_MBCS
改为:UNICODE _UNICODE。


3. 这下我们就可以在evc4里面操作sqlite数据库了:
//打开数据库

CppSQLite3DB db;
//打开或新建一个数据库
db.open(L"http://www.cnblogs.com/Jade2009/admin/file://ding.db/");

//新建表
   db.execDML(L"create table sninfo(id nchar(12), area nvarchar(6), info nvarchar(60),source nchar(6), target nchar(6))");
  
//查询
CppSQLite3Query q = db.execQuery(L"select * from sninfo where area='广州区'");
CString strTemp;
while (!q.eof())
        {
   strTemp.Format(_T("%s-%s-%s-%s"),q.fieldValue(0),q.fieldValue(3),q.fieldValue(4),q.fieldValue(1));
   m_list.AddString(strTemp); //显示到listbox控件中
   q.nextRow();
}
q.finalize();

db.close();

4.对sqlite的数据库操作就介绍到这里,我目前也就用了这么多,更多的我也需要学习,在 wince或mobile下用sqlite要注意一点的是,数据库的路径中不要含有中文字,否则会打开失败,如果非要用中文,那必须得转成utf-8才 行,sqlite内部是通过utf-8来读取的。

三. 后记
对比了一下sqlce和sqlite在查询50W记录时的性能,都可以在2秒钟之内完成,(一开始我没建index,查了4分多钟,晕),一定记得要建索引哦。否则查询N慢。


At 2010-08-27 00:24:32 [View] [Reply]


SQLite3 for WinCE

在WinCE,Mobile上,对SQLite的开发,目前还是以.net compact framework的封装居多.

http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers 可找到各种语言对 SQLite 的封装.

下面将介绍如何在EVC下使用SQLite.

1> 开发工具: EVC4.0 + SP2

2> 编译出所需的 SQLite DLL.

    a> 在 http://sqlite-wince.sourceforge.net/ 中下载 SQLite for Windows CE 的DLL 源代码.

    b). 打开eVC新建一个“WCE Dynamic-Link Library”工程,命名为:sqlite3

    c). 在接下来的对话框中选择"An empty Windows CE DLL project",点击 FINISH,之后再点击 OK

    d). 将源码中所有的 *.c *.h *.def 复制到工程文件夹下

    e). 在 Source Files 中添加除shell.c和tclsqlite.c这两个文件以外所有 *.c 的SQLite源文件文件

    f). 在 Header Files 中添加所有 *.h 的SQLite源文件文件

    g). 将 SQLite 源文件中的 sqlite3.def 文件添加到在工程的Source File中

    h). 在eVC中选好你要编译的平台,例如“Win32(WCE ARMV4I) Release”

    i). 好了,开始编译,Build(F7)一下

3> 编译出DLL后,需要使用C++对DLL中的功能进行封装.有如下资源可参考:

    a> http://www.codeproject.com/KB/database/CppSQLite.aspx

    b> http://www.adp-gmbh.ch/sqlite/wrapper.html

    如上 a,b 资源,尽管已对 SQLite Dll 中的功能进行封装,然而 WinCE,Mobile上使用的是UNICODE编码,而 a,b 却并未支持UNICODE.所以真正要用到的是 a 资源中的 unicode 版本,如下:

    http://softvoile.com/development/CppSQLite3U/


4> 有了 SQLite DLL 及 CppSQLite3U 后,便可以很方便地使用 SQLITE :(步骤3中,a链接页画下就有DEMO)

主要代码如下:

#define FILE_DB_NAME    TEXT("unitech.db")

//获取程序当前路径
void GetCurrentDirectory(CString &szPath)
{
    wchar_t pBuf[
256];
    GetModuleFileName(NULL,pBuf,
sizeof(pBuf)/sizeof(wchar_t));
    szPath
=pBuf;
    szPath 
= szPath.Left(szPath.ReverseFind('\\')+1);
}

void CDemo2Dlg::OnButton1() 
{
    CString strDbPath;
    GetCurrentDirectory(strDbPath);
    strDbPath 
+= FILE_DB_NAME;

    CppSQLite3DB db;
    
try
    {
        
//打开或新建一个数据库
        db.open(strDbPath);
        
        
//判断表名是否存在
        if(db.tableExists(L"tblTest"))
        {
            AfxMessageBox(L
"Table: tblTest is existed!");
        }
        
else //不存在
        {
            AfxMessageBox(L
"Table: tblTest not existed!");
            
//新建表
            db.execDML(L"create table tblTest(empno varchar(20), empname varchar(20))");
        }

        
//插入一笔记录
        db.execDML(L"insert into tblTest values('编号', '姓名')");
        
//插入一笔记录
        db.execDML(L"insert into tblTest values('精瑞电脑', 'Answer')");

        
//删除一笔记录
        db.execDML(L"delete from tblTest where empno='编号'");

        
//插入10笔记录(使用事务)
        TCHAR buf[256];
        db.execDML(L
"begin transaction;");
        
for (int i = 0; i < 10; i++)
        {
            memset(buf, 
0sizeof(buf));
            wsprintf(buf, L
"insert into tblTest values ('no%d', 'name%d');", i, i);
            db.execDML(buf);
        }
        db.execDML(L
"commit transaction;");

        
//更新一笔记录
        db.execDML(L"update tblTest set empname='answer' where empno='no1'");
    
        
//获取总笔数
        int count = db.execScalar(L"select count(*) from tblTest;");
        TCHAR szCount[
50];
        memset(szCount, 
0sizeof(szCount));
        wsprintf(szCount, L
"Count:%d", count);
        AfxMessageBox(szCount);

        
//获取每一笔
        CppSQLite3Query q = db.execQuery(L"select * from tblTest");
        
while (!q.eof())
        {
            AfxMessageBox(q.fieldValue(
0));
            q.nextRow();
        }
        q.finalize();

        db.close();
        AfxMessageBox(L
"OK");
    }
    
catch(CppSQLite3Exception ex)
    {
        AfxMessageBox(ex.errorMessage());
    }
}

 

5> 成功完成,Enjoy it~~~

6> 下载:

    a> SQLite3 For WinCE Source

    b> CppSQLite3U For WinCE Source

    c> Demo Source

    d> Demo Exe

7> 推荐一个SQLite的可视化工具:

    SQLiteSpy: http://www.yunqa.de/delphi/doku.php/products/sqlitespy/index

    下载


At 2010-08-27 00:11:31 [View] [Reply]


手机操作系统与浏览器

手机操作系统与台式机浏览器是目前IT最热门的两大软件基础平台。

1.手机操作系统

Android

Windows phone

Apple iOS

Meego

Symbian

2.浏览器

Chrome

Firefox

IE

Safari

Opera


At 2010-08-26 01:02:59 [View] [Reply]


立体大巴


At 2010-08-26 00:48:58 [View] [Reply]


Google TV


At 2010-08-25 00:02:05 [View] [Reply]


A70 Android

这款机子现在官方规格还没有完全发布,据说处理器,内存和ROM都是1G,屏幕是4.3寸的,看图片感觉是3.5mm的耳机接口。



At 2010-08-24 09:43:43 [View] [Reply]


Android十大热门名词解释

android手机这个全新的产品,大家都还处在一个认识和了解的阶段,很多普通用户对于大家常提到的一些专业词语都不是很理解,完全不知道它们表达的是什么意思,以下是android手机最常提到的10个词语,相信大家看后一定会对android手机有了全新的理解和认识。

1:Android手机

android系统的手机已在市场上销售的非常火爆,但是很多普通用户在听到android手机时还都是一头雾水,不知道这是什么手机。其实简单的说,android是一个新兴的智能手机操作系统,该原生系统是由谷歌开发研制的,我们将搭载了android智能操作系统的手机统称为android手机。目前很多手机厂商都在生产搭载了android系统的智能手机,它们包括HTC,摩托罗拉,三星,索爱,LG,华为,Acer,OPPO,魅族等多家国内外知名厂商。

2:电子市场(Android Market)

Android电子市场(Android Market)是Google为Android设备开发的在线应用程序商店。它和苹果的App Store类似,用户可以在此浏览、下载、安装使用到成千上万的各式应用程序,有软件,有游戏,有免费程序,也有收费程序。与微软和苹果应用市场不同,Android电子市场可以为用户提供多样化的内容,既有来自各大媒体公司的内容,也有来自业余个人开发者的程序。

3:Root权限

Root权限可以跟我们在windows系统下的administrator权限理解成一个概念 。root是android系统中的超级管理员用户帐户,该帐户拥有整个系统最高权利,可以在系统中进行任何操作。为了防止软件更改系统文件,android系统隐藏了root权限,但是,我们平时修改一些系统文件,或是某些软件的操作都会用到Root权限,我们的android手机刷机安装系统时,也是需要有Root权限的,获取并开启root权限后,我们就能随意进行任何操作了。

4:刷机

刷机是手机方面的专业术语,是指通过一定的方法更改或替换了手机原版系统中固有的一些语言、图片、铃声和软件版本或者操作系统,可以使手机功能更加完善。刷机可以是官方的,也可以是非官方的。简单的说,android手机的刷机,就相当于给它重装一下系统,这和我们常见的电脑重装系统类似。

5:APK

APK是Android Package的缩写,即Android安装包。是android手机程序的文件格式,这和诺基亚手机程序是sisx,sis,jar格式类似,都是安装包文件的一个格式,将apk格式的程序传到手机中,通过文件管理软件,点击该格式的文件即可安装,也可使用数据线将手机和电脑连接,在电脑上通过一个安装辅助程序进行安装。

6:桌面widget

Widget简单的直译就是构件,小部件,小工具的意思。在android手机中,当你在桌面空白处长按几秒钟,就会弹出一个对话框,其中就有让你添加桌面小工具的选项,这个就是添加的桌面widget。用过windows vista或是windows7的用户对桌面小工具应该都不陌生,在电脑上也有在桌面添加一些小部件的功能,android系统中的桌面widget也和它们类似,通过在桌面上添加widget,能很方便快捷的进行一些查阅和操作。

7:Recovery

Recovery翻译过来的意思就是恢复,顾名思义,这是手机上的一个恢复模式。通过这个recovery,用户可以实现安装系统(就是所谓的刷机),清空手机各种数据,为内存卡分区,备份和还原等等很多功能。它类似于电脑上的Ghost一键恢复,给电脑装过系统的朋友可能都知道,电脑出了问题,或是想换个新系统,最简单的办法的就是用Ghost来重装系统,只需简单的用鼠标点几下就完成了。Android手机上的recovery模式也是如此。

8:wipe

Wipe翻译过来的意思就是抹去,擦除等,在recovery模式下有个wipe选项,它的功能就是清除手机中的各种数据,这和恢复出厂值差不多。我们最常用到wipe是在刷机之前,大家可能会看到需要WIPE的提示,是指刷机前清空数据,注意wipe前备份一下手机中重要的东西哦。

9:ROM

ROM是英文Read Only Memory简写,通俗的来讲ROM就是android手机的操作系统,类似于电脑的操作系统,比如Windows xp,Windows7等等。我们平时说给电脑重装系统,拿个系统光盘或是镜像文件重新安装一下就好了。而android手机上刷机也是这个道理,将ROM包通过刷机,重新写入到手机中,ROM就是android手机上的系统包。

10:WIFI

Android手机的强大之处在于它的网络功能,拿到android手机,你可能会发现它无时无刻都在连接着网络,而且在android手机上有着很多功能强大的网络软件,仅仅依靠手机的移动网络是不够的,android手机的wifi网络可以很好的弥补这些,而且功能十分强大。Wi-Fi是一种可以将个人电脑、手持设备(如PDA、手机)等终端以无线方式互相连接的技术。通俗的讲WIFI就是一种无线联网的技术,以前通过网线连接电脑,而现在则是通过无线电波来连网;常见的就是一个无线路由器,那么在这个无线路由器的电波覆盖的有效范围都可以采用WIFI连接方式进行联网,如果无线路由器连接了一条ADSL线路或者别的上网线路,则又被称为“热点”。


At 2010-08-24 08:36:52 [View] [Reply]


Google App Inventor for Android


At 2010-08-22 15:19:49 [View] [Reply]


Android VS. Chrome

Google now offers two separate operating systems:

Android OS – used by smartphones out there, ported by companies onto a bunch of other consumer electronic products including netbooks

Chrome OS – a browser-based operating system, which essentially lives within the browser. Oh, and people are starting to think of placing it on netbooks as well.


At 2010-08-22 05:16:32 [View] [Reply]


1/12 10/111 |< << 1 [2] [3] [4] [5] ... [12] >> >|

CopyRight (C) liva 2010. All Rights Reserved.