400-878-1895px51870017
葩星1752902151 淘宝旺旺passiontechinc
sales@51LM.cn 13296027252
  加载中,请稍候...
浏览历史

 


WinCE编程基础

关键词: WinCE编程基础


简介:/* Generator: eWebEditor */p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;font-size:10.5pt;font-family:"Times New Roman";}div.Section1 {page:Section1;}/* Generator: eWebEditor */p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;font-size:10.5pt;font-f...
品 牌 葩星 葩星
产 地 中国
型 号 PXF0250
折 扣 其他电询
咨询专家:

夏工-工业总线-工业自动化-实时仿真

夏工-工业总线-工业自动化-实时仿真 ID:2937

机电电子工程专业硕士,机械设计制造及其自动化/计算机双学士,高级工程师

具有丰富的从业、管理经验,曾在机电工程公司,资深设计代理公司工作。历任组织、经理等岗位,同时具有深厚的理论基础和项目项目研发经历。...

[MORE]

赵工-总线系统-嵌入式系统-工业自动化

赵工-总线系统-嵌入式系统-工业自动化 ID:2940

机械电子工程,嵌入式系统专家,高级工程师

嵌入式项目开发,ARM,Freescale,Infilion等系列单片机系统开发,DSP嵌入式系统开发,FPGA系统开发,项目经验丰富。


...

[MORE]

产品说明:

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
Hello1.cpp
#include "windows.h"
// Program entry point
intWINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
intnCmdShow)
{ printf("Hello World\n");
return 0;
}
5
First Windows CE Application
--Hello Windows CE
#include "windows.h"
这个文件包含了一组文件,它们中定义了
Windows API
及其用到的结构和常量.
int WINAPI WinMain (HINSTANCE 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 操作系统中,
hPrevInstance
始终是0,可以忽略.
- lpCmdLine
指向一个Unicode字符串,包含了命令行文本.
从微软Windows CE浏览器启动的应用程序没有命令行参数,
在某些情况下,例如当系统自动启动一个程序时,系统包含一
个命令行参数来说明程序为什么被启动.
7
First Windows CE Application
--Hello Windows CE
-nCmdShow
指明了程序主窗口的初始状态.(最大化,最小化,
动等)
由父进程,通常是浏览器传递这个参数到程序里.
Windows CE
里,这个参数的值被限制成3个状态:
通(SW_SHOW),隐藏(SW_HIDE)和非激活
显示(SW_SHOWNOACTIVATE).
除非应用程序需要强制它的窗口预先确定状态,在程
序主窗口被创建后,这个值是不加修改,只是简单
的传递给ShowWindow函数的.
8
First Windows CE Application
--Hello Windows CE
printf("Hello World\n");
Windows CE
支持大部分标准C库,包括
printf,getchar
等.
return 0;
用return结束程序.
9
First Windows CE Application
--Hello Windows CE
构建第一个应用程序
在VS2005中,创建编辑,编译上述程序
运行该程序
VS2005
自动启动模拟器,并把EXE程序放到模拟器文件系统里运行
问题
运行了吗
运行了!程序启动,写到控制台,结束.除非你从一个已经创建的控制台启
动程序,否则Windows CE会在Hello1执行printf语句时,创建一个控制台
窗口,并且在Hello1结束的时候自动关闭控制台.
在Pocket PC上,应用程序可以运行,但Pocket PC并不为诸如printf之类的
输出提供控制台显示的功能.通过把驱动程序console.dll放到Pocket PC
的Windows 目录里,可以为Pocket PC增加控制台支持.驱动程序从驱
动程序接口获取输入,创建屏幕窗口,打印输出字符串.控制台启动程
序可以从手持式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"
// Program 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 A Hello2 ,¨- E > ¨,¨*üGK`0k ~
13
upgrade Hello1 :Hello2
MessageBox
函数原型如下:
int MessageBox (HWND hWnd, LPCTSTR lpText,
LPCTSTR lpCaption, UINT uType);
-
第1个参数是顶层窗口的句柄,它是消息窗口的父窗口.
Hello2
里为NULL,因为Hello2还没有任何其它窗口.
-
第2个参数是准备显示在窗口里的文字.注意传入的字
符串是用TEXT宏包裹的,确保它能够编译成Unicode
版本.
-
第3个参数lpCaption是显示在窗口标题栏的文字.
-
最后一个参数uType是一系列标志位,规定消息框如何
显示在屏幕上.标志位规定了消息框中按扭的数量和
类型,规定了图标的类型以及消息框窗口的风格设置.
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
函数在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_DEFBUTTON3 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 pressed
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"(推)模式编程.
在这种模式下,必须编写程序来响应来自
操作系统的通知,比如一个键被压下去了
或者收到一个重绘屏幕的命令.
Windows
应用程序并不从操作系统请求输
入,而是由操作系统通知应用程序输入产
生了.操作系统通过发送消息(messages)
给应用程序窗口来完成这些通知.所有窗
口都是窗口类的具体实例.
19
Windows
应用程序剖析
几个概念
窗口类
窗口是屏幕上的一个区域,一般是矩形.窗口有
一些基本参数,比如位置参数x,y和z(窗口在
屏幕其它窗口之上或者之下),可视性以及层
次关系等.
每个被创建的窗口都是窗口类的一个具体实例.窗口
类是一个模板,为该类的所有窗口定义了许多共同
属性.换句话说,属于同一个类的窗口有同样的属
性.这些共享的属性中最重要的是窗口过程.
20
Windows
应用程序剖析
窗口过程
窗口过程定义了同一个类里所有窗口的行为.窗口过程
处理发到窗口的所有通知和请求.这些通知,要么是
操作系统发给窗口,告诉窗口有事件发生,窗口必须
回应,要么是其他窗口发来的,向该窗口查询信息.
这些通知是以消息的形式发送的.消息实际就是对窗口
过程的一次调用,带有参数指出通知或者查询的种类.
当有事件发生,例如窗口被移动,被改变大小或有键
被按下去等,就会发送消息.
标识消息的值由Windows定义.应用程序使用预定义好
的常量,例如WM_CREATE和WM_MOVE,来表示消
息.因为有很多消息可被发送,所以当窗口类对某个
消息没有特殊处理的必要时,Windows提供了一个默
认处理函数来处理传递这些消息.
21
Windows
应用程序剖析
消息生命周期
Windows
是如何协调发到系统里各个窗口的各种消息

Windows
监视系统的所有输入,例如键盘,鼠标,触摸
屏以及其它可以产生影响窗口的事件的硬件.当事件
发生后,消息就被构成并定向给特定的窗口.
Windows
没有直接调用窗口过程,而是加了一个中间步
骤.消息被放到拥有该窗口的应用程序的消息队列里
了.当应用程序准备接收消息的时候,它把消息从队
列里取出来,并告诉Windows发送该消息到应用程序
适当的窗口上.
具体步骤为:
22
Windows
应用程序剖析
1,
当事件发生,Windows就构成一个消息并放到拥有目的
窗口的应用程序的消息队列里.
和在XP里一样,在Windows CE中,每个应用程序有自己单独的消
息队列(在Windows3.1及更早的Windows版本中,只有唯一一个
系统范围内的消息队列).事件发生及构成一个消息都要比应用
程序处理它们的速度快.消息队列允许Windows在运做中设置一
个通知并继续完成其它任务,而不是仅仅限制在只响应收到消息
的这个应用程序.
2,
应用程序把消息从消息队列中移除出来,并回调
Windows
来处理消息.
应用程序从队列里获取消息,这使得应用程序在请求Windows把消
息分派到相应窗口之前,可以预处理这些消息.许多情况下,
用程序会调用Windows里不同的函数来处理具体的各种消息.
23
Windows
应用程序剖析
3,Windows
处理消息,更确切的说,是Windows调用相应
的窗口过程.
没有让应用程序直接调用窗口过程,而是间接调用,这允许
Windows
协调这个窗口过程的调用与系统里的其它事件.虽然此
刻消息并不在另外一个队列里,但Windows在调用窗口过程之
前,可能需要做一些预处理.不管怎样,这种调度方式减少了应
用程序的责任,不用程序去决定适当的目的窗口,而是由
Windows
负责了.
4,
窗口过程处理消息.
所有的窗口过程都有相同的调用参数:被调用的窗口实例的句柄,
消息参数,两个普通参数,包含与消息相关的数据.
窗口过程用窗口句柄区分窗口的每个实例.消息参数,指明窗口必
须响应的事件.两个普通包含与消息相关的数据.例如,
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应用程序
首先,必须要声明一个WinMain()函数.
在这个入口点函数中,需要按顺序做下面几件事:
-
用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 hInstance, 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 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 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 null
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)) {
TranslateMessage(&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, &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
Hello3
有着相同的入口点--WinMain.但是
因为Hello3创建了自己的窗口,所以它必须
为主窗口注册一个窗口类,创建窗口并且
提供一个消息循环来为窗口处理消息.
下面从这四个方面详细描述
注册窗口
创建窗口
消息循环
窗口过程
31
一个完整的WinCE 应用程序:Hello3
注册窗口类
在WinMain中,Hello3为主窗口注册了窗口类.
注册一个窗口类只是简单的填充一个描述窗口类的结构并调用
RegisterClass
函数.RegisterClass和WNDCLASS结构定义如下:
ATOM RegisterClass (const WNDCLASS *lpWndClass);
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.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 -1;
32
一个完整的WinCE 应用程序:Hello3
--
结构WNDCLASS域含义
给WNDCLASS结构各个域赋的值为Hello3主窗口的所有实例定义了
行为表现.
Style
为窗口设置了类的风格.在Windows CE中,类风格被限制为:
- CS_GLOBALCLASS
表示类是全局的.这个标志只是出于兼容性才提供的,因为Windows CE中所有
窗口类都是进程级全局类.
- CS_HREDRAW
告诉系统如果窗口改变了水平大小,就强制重画窗口.
- CS_VREDRAW
告诉系统如果窗口改变了垂直大小,就强制重画窗口.
-CS_NOCLOSE
如果[关闭]按钮出现在标题栏上,则使其失效.
- CS_PARENTDC
让窗口使用父窗口的设备环境变量
- CS_DBLCLKS
允许[双击]通知(Windows CE下敲击两次为双击)传递给父窗口
33
一个完整的WinCE 应用程序:Hello3
--
结构WNDCLASS域含义
lpfnWndProc
分配的是窗口的窗口过程的地址.因为
该域定义为指向窗口过程的指针,
以在源代码中,必须在域被设置之
前,定义该过程的声明.否则,编译
器类型检查时会警告该行.
cbClsExra
允许程序员为类结构增加额外的空间来
存储只有应用程序才知道的类特定数
据.
cbWndExtra
更加便于使用,这个域为Windows内部
结构增加空间,该结构负责维护窗口
每个实例的状态.
不要在窗口结构本身里存储大量的数
据,应用程序应该存储一个指向应用
程序特定结构的指针,该结构包含窗
口每个实例的数据.在Windows CE
里,cbClsExtra和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 (RegisterClass (&wc) == 0) return -1;
34
一个完整的WinCE 应用程序:Hello3
--
结构WNDCLASS域含义
hInstance
设置为程序的实例句柄,该句柄指明拥有
窗口的进程.
hIcon
设置为窗口默认图标的句柄,但在
Windows CE
中并不支持该域,所以该
域应该设置为NULL.
(
在Windows CE中,会在类的第一个窗
口被创建后设置类的图标.对于
Hello3,
没有图标提供,并且与其它
Windows
版本不同,Windows CE中没
有任何预定义图标用于装载.)
hCursor
除非应用程序是为带鼠标的Windows CE
系统设计的,否则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 = 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消息,重画
窗口背景.
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 = LoadCursor (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
结构的指
针作为唯一的参数.
果函数成功,一个标记
窗口类的值被返,如果
失败,函数返回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 -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
中的相关代码:
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_TOPMOST
窗口置顶
- 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
当窗口创建的时候,顶层窗口没有弹出矩
形,在任务条上也没有按钮.
- WS_EX_NODRAG
防止窗口被移动
参数dwExStyle是CreateWindowEx和CreateWindow之间唯一有差别的地方.
CreateWindow
只是简单的将dwExStyle设置为0并调用CreateWindowEx
而已.
39
一个完整的WinCE 应用程序:Hello3
--CreateWindowEx
参数
lpClassName
是实例化窗口所使用的窗口类的名字.
在Hello3里,类名是MyClass,也就是用RegisterClass
注册的类的名字.
lpWindowName
用做窗口文本.在Windows其它版本里,它是用做标准
窗口标题栏里的文字.文字使用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 应用程序:Hello3
--CreateWindowEx
参数
dwStyle
风格标志规定了窗口的初始风格.风格标志即用于系统里所有相关
窗口的普通风格,也用于特定类的风格,比如按钮类或者列表框
类的风格.在这种情况下,我们需要指定的就是用WS_VISIBLE
标志来指明窗口在创建时可视.
x,y,nWidth,nHeight
这四个参数指定了窗口初始位置和大小.
因为Wimdows CE下大部分应用程序都是全屏窗口,所以每一个大
小和位置域都使用CW_USEDEFAULT标志作为默认值.
Windows CE
当前版本里,默认值创建的窗口,其大小覆盖整个屏
幕.
注意不要为Windows 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
参数
hWndParent
父窗口句柄.因为是顶层窗口,所以父窗口域设置为NULL.
hMenu
菜单域.菜单域也设置为NULL,因为Windows CE不支持顶层窗口菜单.
hInstance
是传递给程序的实例句柄.窗口创建中实例句柄总会用的上,实例句柄是在
程序开始时就被存储的.
lpParam
是一个指针,在WM_CREATE消息期间,用于在CreateWindow调用时传递
数据给窗口过程.
本例中,没有额外数据需要传递,所以该参数设置为NULL.
如果创建窗口成功,CreateWindow返回刚创建的窗口的句柄,如果
函数调用期间有错误发生,则返回0.
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;
42
一个完整的WinCE 应用程序:Hello3
ShowWindow
函数修改窗口状态,使其同
传给WinMain的参数nCmdShow中给的状
态一致.
UpdateWindow
函数则强制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函数,从应用程序消息队列中获取
下一个消息.
如果没有消息可用,则调用进入等待期


































































































































































































































































































































































































































































































































































































































































































参数资料:
WinCE编程基础WinCE编程基础
该文章系原厂商文章翻译,不通之处请参考原文
价格列表: WinCE编程基础WinCE编程基础
葩星订货号 订货号 产品名称 报价 品牌  
相关产品: WinCE编程基础WinCE编程基础
  咨询历史: