WinCE编程基础.pdf

上传人:asd****56 文档编号:70322606 上传时间:2023-01-19 格式:PDF 页数:36 大小:194.93KB
返回 下载 相关 举报
WinCE编程基础.pdf_第1页
第1页 / 共36页
WinCE编程基础.pdf_第2页
第2页 / 共36页
点击查看更多>>
资源描述

《WinCE编程基础.pdf》由会员分享,可在线阅读,更多相关《WinCE编程基础.pdf(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、WinCEWinCE1 WinCE 编程基础 2 Windows CE 编程基础 1 Hello Windows CE 2 屏幕绘画 3 输入:键盘,鼠标和触摸屏 4 窗口,控件和菜单 5 公共控件和 Windows CE 6 对话框和属性表 3 1 Hello Windows CE 1.1 第一个 WinCE 程序:Hello1 1.2 Hello1 的升级:Hello2 1.3 Windows 应用程序剖析 1.4 一个完整的 WinCE 应用程序:Hello3 1.5 HelloCE 4 First Windows CE Application -Hello Windows CE Hel

2、lo1.cpp#include windows.h/Program entry point intWINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPWSTR lpCmdLine,intnCmdShow)printf(Hello Worldn);return 0;5 First Windows CE Application -Hello Windows CE#include windows.h 这个文件包含了一组文件,它们中定义了 Windows API 及其用到的结构和常量.int WINAPI WinMain(HINST

3、ANCE hInstance,HINSTANCE hPrevInstance,LPWSTR lpCmdLine,int nCmdShow)程序的入口点,不同于标准 C 程序,参数含义如 下:6 First Windows CE Application -Hello Windows CE-hInstance 为其它应用程序指明具体程序实例,也为需要验证这个 EXE 的 Windows API 函数提供了程序实例.-hPrevInstance 是从旧的 Win16 API(Windows 3.1 及更早的系统)遗留下来的.包括 Windows CE 在内的所有 Win32 操作系统中,hPrevI

4、nstance 始终是 0,可以忽略.-lpCmdLine 指向一个 Unicode 字符串,包含了命令行文本.从微软 Windows CE 浏览器启动的应用程序没有命令行参数,但 在某些情况下,例如当系统自动启动一个程序时,系统包含一 个命令行参数来说明程序为什么被启动.7 First Windows CE Application -Hello Windows CE-nCmdShow 指明了程序主窗口的初始状态.(最大化,最小化,活 动等)由父进程,通常是浏览器传递这个参数到程序里.Windows CE 里,这个参数的值被限制成 3 个状态:普 通(SW_SHOW),隐藏(SW_HIDE)和

5、非激活 显示(SW_SHOWNOACTIVATE).除非应用程序需要强制它的窗口预先确定状态,在程 序主窗口被创建后,这个值是不加修改,只是简单 的传递给 ShowWindow 函数的.8 First Windows CE Application -Hello Windows CE printf(Hello Worldn);Windows CE 支持大部分标准 C 库,包括 printf,getchar 等.return 0;用 return 结束程序.9 First Windows CE Application -Hello Windows CE 构建第一个应用程序 在 VS2005 中,创

6、建编辑,编译上述程序 运行该程序 VS2005 自动启动模拟器,并把 EXE 程序放到模拟器文件系统里运行 问题 运行了吗 运行了!程序启动,写到控制台,结束.除非你从一个已经创建的控制台启 动程序,否则 Windows CE 会在 Hello1 执行 printf 语句时,创建一个控制台 窗口,并且在 Hello1 结束的时候自动关闭控制台.在 Pocket PC 上,应用程序可以运行,但 Pocket PC 并不为诸如 printf 之类的 输出提供控制台显示的功能.通过把驱动程序 console.dll 放到 Pocket PC 的 Windows 目录里,可以为 Pocket PC 增

7、加控制台支持.驱动程序从驱 动程序接口获取输入,创建屏幕窗口,打印输出字符串.控制台启动程 序可以从手持式 PC 和嵌入式版本的 Windows CE 获得.10 1 Hello Windows CE 1.1 第一个 WinCE 程序:Hello1 1.2 Hello1 的升级:Hello2 1.3 Windows 应用程序剖析 1.4 一个完整的 WinCE 应用程序:Hello3 1.5 HelloCE 11 upgrade Hello1:Hello2 升级 Hello1,用一个消息框来替代 Hello1 中的 printf Hello2.cpp#include windows.h/Pro

8、gram entry point intWINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPWSTR lpCmdLine,intnCmdShow)MessageBox(NULL,TEXT(HelloWorld),TEXT(Hello2),MB_OK);return 0;12 upgrade Hello1:Hello2 4 A JE Hello2,V/,X 0k printf,XMessageBox DHello2 oZ2 (M 1 0k J M6/Hello World 1 MessageBox D,*GK#C0k!E E

9、A Hello2,-E ,*GK0k 13 upgrade Hello1:Hello2 MessageBox 函数原型如下:int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);-第 1 个参数是顶层窗口的句柄,它是消息窗口的父窗口.Hello2 里为 NULL,因为 Hello2 还没有任何其它窗口.-第 2 个参数是准备显示在窗口里的文字.注意传入的字 符串是用 TEXT 宏包裹的,确保它能够编译成 Unicode 版本.-第 3 个参数 lpCaption 是显示在窗口标题栏的文字.-最后一个参数 uT

10、ype 是一系列标志位,规定消息框如何 显示在屏幕上.标志位规定了消息框中按扭的数量和 类型,规定了图标的类型以及消息框窗口的风格设置.14 MessageBox 函数在 Windows CE 下 有效的标志位 标志位按钮或者图标 用于按钮 MB_OK OK MB_OKCANCEL OK and Cancel MB_RETRYCANCEL Retry and Cancel MB_YESNO Yes and No MB_YESNOCANCEL Yes,No,and Cancel MB_ABORTRETRYIGNORE Abort,Retry,and Ignore 15 MessageBox 函数

11、在 Windows CE 下 有效的标志位 用于图标 MB_ICONEXCLAMATION,MB_ICONWARNING Exclamation point MB_ICONINFORMATION,MB_ICONASTERISK Lower case i within a circle MB_ICONQUESTION Question mark MB_YESNO Yes and No MB_ICONSTOP,MB_ICONERROR,MB_ICONHAND Stop sign MB_DEFBUTTON1 First button MB_DEFBUTTON2 Second button MB_DE

12、FBUTTON3 Third button 用于窗口风格:MB_SETFOREGROUND Bring the message box to the foreground.MB_TOPMOST Make the message box the topmost window.16 MessageBox 的返回值-MessageBox 的返回值指出用户按了哪个按扭.返回 值如下:IDOKOK button pressed IDYESYes button pressed IDNONo button pressed IDCANCELCancel button pressed or Esc key pr

13、essed IDABORTAbort button pressed IDRETRYRetry button pressed IDIGNOREIgnore button pressed 17 1 Hello Windows CE 1.1 第一个 WinCE 程序:Hello1 1.2 Hello1 的升级:Hello2 1.3 Windows 应用程序剖析 1.4 一个完整的 WinCE 应用程序:Hello3 1.5 HelloCE 18 Windows 应用程序剖析 Windows 程序使用Push(推)模式编程.在这种模式下,必须编写程序来响应来自 操作系统的通知,比如一个键被压下去了 或

14、者收到一个重绘屏幕的命令.Windows 应用程序并不从操作系统请求输 入,而是由操作系统通知应用程序输入产 生了.操作系统通过发送消息(messages)给应用程序窗口来完成这些通知.所有窗 口都是窗口类的具体实例.19 Windows 应用程序剖析 几个概念 窗口类 窗口是屏幕上的一个区域,一般是矩形.窗口有 一些基本参数,比如位置参数 x,y 和 z(窗口在 屏幕其它窗口之上或者之下),可视性以及层 次关系等.每个被创建的窗口都是窗口类的一个具体实例.窗口 类是一个模板,为该类的所有窗口定义了许多共同 属性.换句话说,属于同一个类的窗口有同样的属 性.这些共享的属性中最重要的是窗口过程.

15、20 Windows 应用程序剖析 窗口过程 窗口过程定义了同一个类里所有窗口的行为.窗口过程 处理发到窗口的所有通知和请求.这些通知,要么是 操作系统发给窗口,告诉窗口有事件发生,窗口必须 回应,要么是其他窗口发来的,向该窗口查询信息.这些通知是以消息的形式发送的.消息实际就是对窗口 过程的一次调用,带有参数指出通知或者查询的种类.当有事件发生,例如窗口被移动,被改变大小或有键 被按下去等,就会发送消息.标识消息的值由 Windows 定义.应用程序使用预定义好 的常量,例如 WM_CREATE 和 WM_MOVE,来表示消 息.因为有很多消息可被发送,所以当窗口类对某个 消息没有特殊处理的

16、必要时,Windows 提供了一个默 认处理函数来处理传递这些消息.21 Windows 应用程序剖析 消息生命周期 Windows 是如何协调发到系统里各个窗口的各种消息 的 Windows 监视系统的所有输入,例如键盘,鼠标,触摸 屏以及其它可以产生影响窗口的事件的硬件.当事件 发生后,消息就被构成并定向给特定的窗口.Windows 没有直接调用窗口过程,而是加了一个中间步 骤.消息被放到拥有该窗口的应用程序的消息队列里 了.当应用程序准备接收消息的时候,它把消息从队 列里取出来,并告诉 Windows 发送该消息到应用程序 适当的窗口上.具体步骤为:22 Windows 应用程序剖析 1

17、,当事件发生,Windows 就构成一个消息并放到拥有目的 窗口的应用程序的消息队列里.和在 XP 里一样,在 Windows CE 中,每个应用程序有自己单独的消 息队列(在 Windows3.1 及更早的 Windows 版本中,只有唯一一个 系统范围内的消息队列).事件发生及构成一个消息都要比应用 程序处理它们的速度快.消息队列允许 Windows 在运做中设置一 个通知并继续完成其它任务,而不是仅仅限制在只响应收到消息 的这个应用程序.2,应用程序把消息从消息队列中移除出来,并回调 Windows 来处理消息.应用程序从队列里获取消息,这使得应用程序在请求 Windows 把消 息分派

18、到相应窗口之前,可以预处理这些消息.许多情况下,应 用程序会调用 Windows 里不同的函数来处理具体的各种消息.23 Windows 应用程序剖析 3,Windows 处理消息,更确切的说,是 Windows 调用相应 的窗口过程.没有让应用程序直接调用窗口过程,而是间接调用,这允许 Windows 协调这个窗口过程的调用与系统里的其它事件.虽然此 刻消息并不在另外一个队列里,但 Windows 在调用窗口过程之 前,可能需要做一些预处理.不管怎样,这种调度方式减少了应 用程序的责任,不用程序去决定适当的目的窗口,而是由 Windows 负责了.4,窗口过程处理消息.所有的窗口过程都有相同

19、的调用参数:被调用的窗口实例的句柄,消息参数,两个普通参数,包含与消息相关的数据.窗口过程用窗口句柄区分窗口的每个实例.消息参数,指明窗口必 须响应的事件.两个普通包含与消息相关的数据.例如,WM_MOVE 消息指出窗口将被移动,其中一个普通参数指向一个 包含窗口新坐标的结构.24 1 Hello Windows CE 1.1 第一个 WinCE 程序:Hello1 1.2 Hello1 的升级:Hello2 1.3 Windows 应用程序剖析 1.4 一个完整的 WinCE 应用程序:Hello3 1.5 HelloCE 25 一个完整的 WinCE 应用程序 首先,必须要声明一个 Win

20、Main()函数.在这个入口点函数中,需要按顺序做下面几件事:-用 RegisterClass 函数登记一个独一无二的 Class -用 CreateWindowEx 函数创建一个主窗口-进入一个消息循环,直到收到 WM_QUIT 消息-从 WinMain 函数返回 其次,在主窗口的窗口过程中处理消息.26 一个完整的 WinCE 应用程序:Hello3#include/For all that Windows stuff LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hIn

21、stance,HINSTANCE hPrevInstance,LPWSTR lpCmdLine,int nCmdShow)WNDCLASS wc;HWND hWnd;MSG msg;/Register application main window class.wc.style=0;/Window style wc.lpfnWndProc=MainWndProc;/Callback function wc.cbClsExtra=0;/Extra class data wc.cbWndExtra=0;/Extra window data wc.hInstance=hInstance;/Owner

22、 handle wc.hIcon=NULL,/Application icon wc.hCursor=LoadCursor(NULL,IDC_ARROW);/Default cursor wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszMenuName=NULL;/Menu name wc.lpszClassName=TEXT(MyClass);/Window class name if(RegisterClass(&wc)=0)return-1;27 一个完整的 WinCE 应用程序:Hello3/Create main

23、 window.hWnd=CreateWindowEx(WS_EX_NODRAG,/Ex style flags TEXT(MyClass),/Window class TEXT(Hello),/Window title/Style flags WS_VISIBLE|WS_CAPTION|WS_SYSMENU,CW_USEDEFAULT,/x position CW_USEDEFAULT,/y position CW_USEDEFAULT,/Initial width CW_USEDEFAULT,/Initial height NULL,/Parent NULL,/Menu,must be n

24、ull hInstance,/Application instance NULL);/Pointer to create/parameters if(!IsWindow(hWnd)return-2;/Fail code if not created.28 一个完整的 WinCE 应用程序:Hello3/Standard show and update calls ShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);/Application message loop while(GetMessage(&msg,NULL,0,0)TranslateMessag

25、e(&msg);DispatchMessage(&msg);/Instance cleanup return msg.wParam;29 一个完整的 WinCE 应用程序:Hello3/MainWndProc-Callback function for application window LRESULT CALLBACK MainWndProc(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam)PAINTSTRUCT ps;RECT rect;HDC hdc;switch(wMsg)case WM_PAINT:GetClientRect(hWnd

26、,&rect);/Get the size of the client rectangle hdc=BeginPaint(hWnd,&ps);DrawText(hdc,TEXT(Hello Windows CE!),-1,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);EndPaint(hWnd,&ps);return 0;case WM_DESTROY:PostQuitMessage(0);break;return DefWindowProc(hWnd,wMsg,wParam,lParam);30 一个完整的 WinCE 应用程序:Hello3 Hello

27、3 有着相同的入口点-WinMain.但是 因为 Hello3 创建了自己的窗口,所以它必须 为主窗口注册一个窗口类,创建窗口并且 提供一个消息循环来为窗口处理消息.下面从这四个方面详细描述 注册窗口 创建窗口 消息循环 窗口过程 31 一个完整的 WinCE 应用程序:Hello3 注册窗口类 在 WinMain 中,Hello3 为主窗口注册了窗口类.注册一个窗口类只是简单的填充一个描述窗口类的结构并调用 RegisterClass 函数.RegisterClass 和 WNDCLASS 结构定义如下:ATOM RegisterClass(const WNDCLASS*lpWndClass

28、);typedef struct _WNDCLASS UINT style;WNDPROC lpfnWndProc;int cbClsExtra;int cbWndExtra;HANDLE hInstance;HICON hIcon;HCURSOR hCursor;HBRUSH hbrBackground;LPCTSTR lpszMenuName;LPCTSTR lpszClassName;WNDCLASS;Hello3 中的相关代码:wc.style=0;wc.lpfnWndProc=MainWndProc;wc.cbClsExtra=0;wc.cbWndExtra=0;wc.hInstan

29、ce=hInstance;wc.hIcon=NULL,wc.hCursor=LoadCursor(NULL,IDC_ARROW);wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszMenuName=NULL;wc.lpszClassName=TEXT(MyClass);if(RegisterClass(&wc)=0)return-1;32 一个完整的 WinCE 应用程序:Hello3-结构 WNDCLASS 域含义 给 WNDCLASS 结构各个域赋的值为 Hello3 主窗口的所有实例定义了 行为表现.Style 为窗口

30、设置了类的风格.在 Windows CE 中,类风格被限制为:-CS_GLOBALCLASS 表示类是全局的.这个标志只是出于兼容性才提供的,因为 Windows CE 中所有 窗口类都是进程级全局类.-CS_HREDRAW 告诉系统如果窗口改变了水平大小,就强制重画窗口.-CS_VREDRAW 告诉系统如果窗口改变了垂直大小,就强制重画窗口.-CS_NOCLOSE 如果关闭按钮出现在标题栏上,则使其失效.-CS_PARENTDC 让窗口使用父窗口的设备环境变量-CS_DBLCLKS 允许双击通知(Windows CE 下敲击两次为双击)传递给父窗口 33 一个完整的 WinCE 应用程序:H

31、ello3-结构 WNDCLASS 域含义 lpfnWndProc 分配的是窗口的窗口过程的地址.因为 该域定义为指向窗口过程的指针,所 以在源代码中,必须在域被设置之 前,定义该过程的声明.否则,编译 器类型检查时会警告该行.cbClsExra 允许程序员为类结构增加额外的空间来 存储只有应用程序才知道的类特定数 据.cbWndExtra 更加便于使用,这个域为 Windows 内部 结构增加空间,该结构负责维护窗口 每个实例的状态.不要在窗口结构本身里存储大量的数 据,应用程序应该存储一个指向应用 程序特定结构的指针,该结构包含窗 口每个实例的数据.在 Windows CE 里,cbCls

32、Extra 和 cbWndExtra 域必 须是 4 字节的倍数.Hello3 中的相关代码:wc.style=0;wc.lpfnWndProc=MainWndProc;wc.cbClsExtra=0;wc.cbWndExtra=0;wc.hInstance=hInstance;wc.hIcon=NULL,wc.hCursor=LoadCursor(NULL,IDC_ARROW);wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszMenuName=NULL;wc.lpszClassName=TEXT(MyClass);if(

33、RegisterClass(&wc)=0)return-1;34 一个完整的 WinCE 应用程序:Hello3-结构 WNDCLASS 域含义 hInstance 设置为程序的实例句柄,该句柄指明拥有 窗口的进程.hIcon 设置为窗口默认图标的句柄,但在 Windows CE 中并不支持该域,所以该 域应该设置为 NULL.(在 Windows CE 中,会在类的第一个窗 口被创建后设置类的图标.对于 Hello3,没有图标提供,并且与其它 Windows 版本不同,Windows CE 中没 有任何预定义图标用于装载.)hCursor 除非应用程序是为带鼠标的 Windows CE 系统

34、设计的,否则 hCursor 域应该设置 为 NULL.如果系统不支持光标,调用 LoadCursor(IDC_ARROW)函数会返回 NULL.Hello3 中的相关代码:wc.style=0;wc.lpfnWndProc=MainWndProc;wc.cbClsExtra=0;wc.cbWndExtra=0;wc.hInstance=hInstance;wc.hIcon=NULL,wc.hCursor=LoadCursor(NULL,IDC_ARROW);wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszMenuName

35、=NULL;wc.lpszClassName=TEXT(MyClass);if(RegisterClass(&wc)=0)return-1;35 一个完整的 WinCE 应用程序:Hello3-结构 WNDCLASS 域含义 hbrBackground 规定 Windows CE 如何画窗口背景.Windows 用这个域中指定的刷子 brush(一个小的预定义的像素数组)来画 窗口背景.Windows CE 提供许多预 定义的刷子,你可以用 GetStockObject 函数来装载.如果 hbrBackground 域是 NULL,窗口必须 处理 WM_ERASEBKGND 消息,重画 窗口背

36、景.lpszMenuName 必须设置为 NULL,因为 Windows CE 不 直接支持有菜单的窗口.在 Windows CE 中,菜单由主窗口创建的命令工具 条,命令带或菜单条控件提供.lpszClassName 设置为程序员定义的字符串,用于为 Windows 指明类的名字.Hello3 用的是MyClass做为类名.Hello3 中的相关代码:wc.style=0;wc.lpfnWndProc=MainWndProc;wc.cbClsExtra=0;wc.cbWndExtra=0;wc.hInstance=hInstance;wc.hIcon=NULL,wc.hCursor=Load

37、Cursor(NULL,IDC_ARROW);wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszMenuName=NULL;wc.lpszClassName=TEXT(MyClass);if(RegisterClass(&wc)=0)return-1;36 一个完整的 WinCE 应用程序:Hello3-结构 WNDCLASS 域含义 整个 WNDCLASS 结构被 填充后,RegisterClass 函数被调用,并用指向 WNDCLASS 结构的指 针作为唯一的参数.如 果函数成功,一个标记 窗口类的值被返,如果 失败,函

38、数返回 0.Hello3 中的相关代码:wc.style=0;wc.lpfnWndProc=MainWndProc;wc.cbClsExtra=0;wc.cbWndExtra=0;wc.hInstance=hInstance;wc.hIcon=NULL,wc.hCursor=LoadCursor(NULL,IDC_ARROW);wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszMenuName=NULL;wc.lpszClassName=TEXT(MyClass);if(RegisterClass(&wc)=0)return

39、-1;37 一个完整的 WinCE 应用程序:Hello3 创建窗口 用 CreateWindow 或 CreateWindowEx 函数调用.CreateWindowEx 的原型如下:HWND CreateWindowEx(DWORD dwExStyle,LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD dwStyle,intx,inty,intnWidth,intnHeight,HWND hWndParent,HMENU hMenu,HINSTANCE hInstance,LPVOID lpParam);各参数含义如下:Hello3 中的相关代码

40、:hWnd=CreateWindowEx(WS_EX_NODRAG,TEXT(MyClass),TEXT(Hello),WS_VISIBLE|WS_CAPTION|WS_SYSMENU,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAUL T,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);if(!IsWindow(hWnd)return-2;38 一个完整的 WinCE 应用程序:Hello3-CreateWindowEx 参数 dwExStyle 扩展风格标志位.Windows CE 能够支持的扩展风格标志如下:-WS_EX_TO

41、PMOST 窗口置顶-WS_EX_WINDOWEDGE 窗口有凸起的边框-WS_EX_CLIENTEDGE 窗口有凹陷的边框-WS_EX_STATICEDGE 静态窗口具有 3D 外观-WS_EX_OVERLAPPEDWINDOW 是 WS_EX_WINDOWEDGE 和 WS_EX_CLIENTEDGE 两个风格的组合-WS_EX_CAPTIONOKBUTTON 在标题栏上有 OK 按钮-WS_EX_CONTEXTHELP 在标题栏上有帮助按钮-WS_EX_NOACTIVATE 点击窗口时,窗口不成为活动窗口-WS_EX_NOANIMATION 当窗口创建的时候,顶层窗口没有弹出矩 形,在任

42、务条上也没有按钮.-WS_EX_NODRAG 防止窗口被移动 参数 dwExStyle 是 CreateWindowEx 和 CreateWindow 之间唯一有差别的地方.CreateWindow 只是简单的将 dwExStyle 设置为 0 并调用 CreateWindowEx 而已.39 一个完整的 WinCE 应用程序:Hello3-CreateWindowEx 参数 lpClassName 是实例化窗口所使用的窗口类的名字.在 Hello3 里,类名是 MyClass,也就是用 RegisterClass 注册的类的名字.lpWindowName 用做窗口文本.在 Windows 其

43、它版本里,它是用做标准 窗口标题栏里的文字.文字使用 TEXT 宏,确保字符串 在 Windows CE 下可以转换成 Unicode.Hello3 中的相关代码:hWnd=CreateWindowEx(WS_EX_NODRAG,TEXT(MyClass),TEXT(Hello),WS_VISIBLE|WS_CAPTION|WS_SYSMENU,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NU LL,NULL,hInstance,NULL);if(!IsWindow(hWnd)return-2;40 一个完整的 WinCE 应

44、用程序:Hello3-CreateWindowEx 参数 dwStyle 风格标志规定了窗口的初始风格.风格标志即用于系统里所有相关 窗口的普通风格,也用于特定类的风格,比如按钮类或者列表框 类的风格.在这种情况下,我们需要指定的就是用 WS_VISIBLE 标志来指明窗口在创建时可视.x,y,nWidth,nHeight 这四个参数指定了窗口初始位置和大小.因为 Wimdows CE 下大部分应用程序都是全屏窗口,所以每一个大 小和位置域都使用 CW_USEDEFAULT 标志作为默认值.在 Windows CE 当前版本里,默认值创建的窗口,其大小覆盖整个屏 幕.注意不要为 Windows

45、 CE 设备假设任何特殊的尺寸,因为不同的实现 有不同的屏幕尺寸.Hello3 中的相关代码:hWnd=CreateWindowEx(WS_EX_NODRAG,TEXT(MyClass),TEXT(Hello),WS_VISIBLE|WS_CAPTION|WS_SYSMENU,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,N ULL,NULL,hInstance,NULL);if(!IsWindow(hWnd)return-2;41 一个完整的 WinCE 应用程序:Hello3-CreateWindowEx 参数 hWndPa

46、rent 父窗口句柄.因为是顶层窗口,所以父窗口域设置为 NULL.hMenu 菜单域.菜单域也设置为 NULL,因为 Windows CE 不支持顶层窗口菜单.hInstance 是传递给程序的实例句柄.窗口创建中实例句柄总会用的上,实例句柄是在 程序开始时就被存储的.lpParam 是一个指针,在 WM_CREATE 消息期间,用于在 CreateWindow 调用时传递 数据给窗口过程.本例中,没有额外数据需要传递,所以该参数设置为 NULL.如果创建窗口成功,CreateWindow 返回刚创建的窗口的句柄,如果 函数调用期间有错误发生,则返回 0.Hello3 中的相关代码:hWnd

47、=CreateWindowEx(WS_EX_NODRAG,TEXT(MyClass),TEXT(Hello),WS_VISIBLE|WS_CAPTION|WS_SYSMENU,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NU LL,NULL,hInstance,NULL);if(!IsWindow(hWnd)return-2;42 一个完整的 WinCE 应用程序:Hello3 ShowWindow 函数修改窗口状态,使其同 传给 WinMain 的参数 nCmdShow 中给的状 态一致.UpdateWindow 函数则强制

48、 Windows 发送 WM_PAINT 消息给刚创建窗口的应用程序.Hello3 中的相关代码:ShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);43 一个完整的 WinCE 应用程序:Hello3 消息循环 主窗口创建后,WinMain 进入消息循环,这是每个 Windows 应用程 序的心脏.Hello3 的消息循环定义如下:while(GetMessage(&msg,NULL,0,0)TranslateMessage(&msg);DispatchMessage(&msg);该循环很简单:调用 GetMessage 函数,从应用程序消息队列中获取

49、下一个消息.如果没有消息可用,则调用进入等待期,阻塞应用程序线程直到消 息可用.当消息可用,该函数返回包含在 MSG 结构的消息数据.MSG 结构自 身包含几个域,有的用于识别消息,有的提供特定消息参数,有 的提供发送时间,被笔触摸过的最后屏幕位置点.MSG 结构如下:typedef struct tagMSG HWND hwnd;UINT message;WPARAM wParam;LPARAM lParam;DWORD time;POINT pt;MSG;44 一个完整的 WinCE 应用程序:Hello3 TranslateMessage 把适当的键盘信息转换成字符信息.Dispatch

50、Message 接下来告诉 Windows 把消息发给应用程序适当的 窗口.获取消息,转换消息,分发消息这个过程会一直循环到 GetMessage 收到 WM_QUIT 消息,这会使 GetMessage 返回 0,这一点不同于 其它消息.从 while 子句可以看出,GetMessage 返回 0 将导致循环 终止.消息循环终止后,程序除了清理和退出外几乎不做什么.在 Hello3 里,程序简单的从 WinMain 中返回.WinMain 的返回值成为 程序的返回码.传统上,最后一个消息 WM_QUIT 的 wParam 参数 值包含有返回值.为了响应应用程序对 PostQuitMessag

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁