WinCE编程基础.docx
《WinCE编程基础.docx》由会员分享,可在线阅读,更多相关《WinCE编程基础.docx(54页珍藏版)》请在冰豆网上搜索。
![WinCE编程基础.docx](https://file1.bdocx.com/fileroot1/2022-10/28/be8f7037-6098-47ae-9e29-95a6268f501e/be8f7037-6098-47ae-9e29-95a6268f501e1.gif)
WinCE编程基础
WinCEWinCE1
WinCE编程基础
2
WindowsCE编程基础
§1HelloWindowsCE
§2屏幕绘画
§3输入:
键盘,鼠标和触摸屏
§4窗口,控件和菜单
§5公共控件和WindowsCE
§6对话框和属性表
3
§1HelloWindowsCE
§1.1第一个WinCE程序:
Hello1
§1.2Hello1的升级:
Hello2
§1.3Windows应用程序剖析
§1.4一个完整的WinCE应用程序:
Hello3
§1.5HelloCE
4
FirstWindowsCEApplication
--HelloWindowsCE
Hello1.cpp
#include"windows.h"
//Programentrypoint
intWINAPIWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPWSTRlpCmdLine,
intnCmdShow)
{printf("HelloWorld\n");
return0;
}
5
FirstWindowsCEApplication
--HelloWindowsCE
#include"windows.h"
这个文件包含了一组文件,它们中定义了
WindowsAPI及其用到的结构和常量.
intWINAPIWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPWSTRlpCmdLine,
intnCmdShow)
程序的入口点,不同于标准C程序,参数含义如
下:
6
FirstWindowsCEApplication
--HelloWindowsCE
-hInstance
为其它应用程序指明具体程序实例,也为需要验证这个EXE的
WindowsAPI函数提供了程序实例.
-hPrevInstance
是从旧的Win16API(Windows3.1及更早的系统)遗留下来的.
包括WindowsCE在内的所有Win32操作系统中,
hPrevInstance始终是0,可以忽略.
-lpCmdLine
指向一个Unicode字符串,包含了命令行文本.
从微软WindowsCE浏览器启动的应用程序没有命令行参数,但
在某些情况下,例如当系统自动启动一个程序时,系统包含一
个命令行参数来说明程序为什么被启动.
7
FirstWindowsCEApplication
--HelloWindowsCE
-nCmdShow
指明了程序主窗口的初始状态.(最大化,最小化,活
动等)
由父进程,通常是浏览器传递这个参数到程序里.
WindowsCE里,这个参数的值被限制成3个状态:
普
通(SW_SHOW),隐藏(SW_HIDE)和非激活
显示(SW_SHOWNOACTIVATE).
除非应用程序需要强制它的窗口预先确定状态,在程
序主窗口被创建后,这个值是不加修改,只是简单
的传递给ShowWindow函数的.
8
FirstWindowsCEApplication
--HelloWindowsCE
printf("HelloWorld\n");
WindowsCE支持大部分标准C库,包括
printf,getchar等.
return0;
用return结束程序.
9
FirstWindowsCEApplication
--HelloWindowsCE
构建第一个应用程序
在VS2005中,创建编辑,编译上述程序
运行该程序
VS2005自动启动模拟器,并把EXE程序放到模拟器文件系统里运行
问题
运行了吗
运行了!
程序启动,写到控制台,结束.除非你从一个已经创建的控制台启
动程序,否则WindowsCE会在Hello1执行printf语句时,创建一个控制台
窗口,并且在Hello1结束的时候自动关闭控制台.
在PocketPC上,应用程序可以运行,但PocketPC并不为诸如printf之类的
输出提供控制台显示的功能.通过把驱动程序console.dll放到PocketPC
的Windows目录里,可以为PocketPC增加控制台支持.驱动程序从驱
动程序接口获取输入,创建屏幕窗口,打印输出字符串.控制台启动程
序可以从手持式PC和嵌入式版本的WindowsCE获得.
10
§1HelloWindowsCE
§1.1第一个WinCE程序:
Hello1
§1.2Hello1的升级:
Hello2
§1.3Windows应用程序剖析
§1.4一个完整的WinCE应用程序:
Hello3
§1.5HelloCE
11
upgradeHello1:
Hello2
升级Hello1,用一个消息框来替代Hello1中的printf
Hello2.cpp
#include"windows.h"
//Programentrypoint
intWINAPIWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPWSTRlpCmdLine,
intnCmdShow)
{MessageBox(NULL,TEXT("HelloWorld"),TEXT("Hello2"),MB_OK);
return0;
}
12
upgradeHello1:
Hello2
4AJE>Hello2¨^,V/,X0k~
printf,XMessageBoxDHello2oZ2
(M~
10k¨JüM6/HelloWorld[
~
1'MessageBoxD,¨*üGK`#\C0k!
E¤~EAHello2,¨-E>¨,¨*üGK`0k~
13
upgradeHello1:
Hello2
MessageBox函数原型如下:
intMessageBox(HWNDhWnd,LPCTSTRlpText,
LPCTSTRlpCaption,UINTuType);
-第1个参数是顶层窗口的句柄,它是消息窗口的父窗口.
Hello2里为NULL,因为Hello2还没有任何其它窗口.
-第2个参数是准备显示在窗口里的文字.注意传入的字
符串是用TEXT宏包裹的,确保它能够编译成Unicode
版本.
-第3个参数lpCaption是显示在窗口标题栏的文字.
-最后一个参数uType是一系列标志位,规定消息框如何
显示在屏幕上.标志位规定了消息框中按扭的数量和
类型,规定了图标的类型以及消息框窗口的风格设置.
14
MessageBox函数在WindowsCE下
有效的标志位
标志位按钮或者图标
用于按钮
MB_OKOK
MB_OKCANCELOKandCancel
MB_RETRYCANCELRetryandCancel
MB_YESNOYesandNo
MB_YESNOCANCELYes,No,andCancel
MB_ABORTRETRYIGNOREAbort,Retry,andIgnore
15
MessageBox函数在WindowsCE下
有效的标志位
用于图标
MB_ICONEXCLAMATION,MB_ICONWARNINGExclamationpoint
MB_ICONINFORMATION,MB_ICONASTERISKLowercaseiwithinacircle
MB_ICONQUESTIONQuestionmark
MB_YESNOYesandNo
MB_ICONSTOP,MB_ICONERROR,MB_ICONHANDStopsign
MB_DEFBUTTON1Firstbutton
MB_DEFBUTTON2Secondbutton
MB_DEFBUTTON3Thirdbutton
用于窗口风格:
MB_SETFOREGROUNDBringthemessageboxtothe
foreground.
MB_TOPMOSTMakethemessageboxthe
topmostwindow.
16
MessageBox的返回值
-MessageBox的返回值指出用户按了哪个按扭.返回
值如下:
IDOKOKbuttonpressed
IDYESYesbuttonpressed
IDNONobuttonpressed
IDCANCELCancelbuttonpressedorEsckeypressed
IDABORTAbortbuttonpressed
IDRETRYRetrybuttonpressed
IDIGNOREIgnorebuttonpressed
17
§1HelloWindowsCE
§1.1第一个WinCE程序:
Hello1
§1.2Hello1的升级:
Hello2
§1.3Windows应用程序剖析
§1.4一个完整的WinCE应用程序:
Hello3
§1.5HelloCE
18
Windows应用程序剖析
Windows程序使用"Push"(推)模式编程.
在这种模式下,必须编写程序来响应来自
操作系统的通知,比如一个键被压下去了
或者收到一个重绘屏幕的命令.
Windows应用程序并不从操作系统请求输
入,而是由操作系统通知应用程序输入产
生了.操作系统通过发送消息(messages)
给应用程序窗口来完成这些通知.所有窗
口都是窗口类的具体实例.
19
Windows应用程序剖析
几个概念
窗口类
窗口是屏幕上的一个区域,一般是矩形.窗口有
一些基本参数,比如位置参数x,y和z(窗口在
屏幕其它窗口之上或者之下),可视性以及层
次关系等.
每个被创建的窗口都是窗口类的一个具体实例.窗口
类是一个模板,为该类的所有窗口定义了许多共同
属性.换句话说,属于同一个类的窗口有同样的属
性.这些共享的属性中最重要的是窗口过程.
20
Windows应用程序剖析
窗口过程
窗口过程定义了同一个类里所有窗口的行为.窗口过程
处理发到窗口的所有通知和请求.这些通知,要么是
操作系统发给窗口,告诉窗口有事件发生,窗口必须
回应,要么是其他窗口发来的,向该窗口查询信息.
这些通知是以消息的形式发送的.消息实际就是对窗口
过程的一次调用,带有参数指出通知或者查询的种类.
当有事件发生,例如窗口被移动,被改变大小或有键
被按下去等,就会发送消息.
标识消息的值由Windows定义.应用程序使用预定义好
的常量,例如WM_CREATE和WM_MOVE,来表示消
息.因为有很多消息可被发送,所以当窗口类对某个
消息没有特殊处理的必要时,Windows提供了一个默
认处理函数来处理传递这些消息.
21
Windows应用程序剖析
消息生命周期
Windows是如何协调发到系统里各个窗口的各种消息
的
Windows监视系统的所有输入,例如键盘,鼠标,触摸
屏以及其它可以产生影响窗口的事件的硬件.当事件
发生后,消息就被构成并定向给特定的窗口.