天极IT资讯短信服务 电脑小技巧
|
介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。 | |
这一章主要的目标是使你的
程序能够在机器上运行。当然,我们需要遵守
操作系统规则。那么我们怎样创建一个应用程序呢?
这里有一段很短的代码,它可以在你的Pocket PC上运行。
#include "windows.h" LRESULT MainWndProc(HWND hWnd, UINT message, WPARAM uParam, LPARAM lParam) { if(message == WM_LBUTTONDOWN) { DestroyWindow(hWnd); return 0; } return DefWindowProc(hWnd, message, uParam, lParam); } int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { WNDCLASS wc; memset(&rc,0,sizeof(wc)); wc.style = CS_HREDRAW|CS_VREDRAW; wc.lpfnWndProc = (WNDPROC) MainWndProc; wc.hInstance = hInstance; wc.hbrBackground = GetStockObject(WHITE_BRUSH); wc.lpszClassName = L"myapp"; if(RegisterClass(&wc)) { HWND hWndMain; if(hWndMain = CreateWindow(L"myapp",L"Hello",WS_VISIBLE,0,0,240,320,0,0,hInstance,0)) { MSG msg; ShowWindow(hWndMain, SW_MAXIMIZE); UpdateWindow(hWndMain); while(GetMessage(&msg,hWndMain,0,0)) DispatchMessage(&msg); return msg.wParam; } } return 0; } |
好了,它可以运行了,它将显示一个空白的屏幕,并且在你点击屏幕后结束。如果你是刚刚学习编程,而且从来没有使用过EVC或是VC,你可以按照下面步骤操作:
执行EVC
选择FILE菜单的NEW...项
选择WCE Application并且点选你所需要的CPU平台
给你的工程命名,并且选择在硬盘中存放的目录。
单击OK按钮
接下来应用程序创建巫师询问你是要创建何种的应用程序,选择'An empty project'然后点机完成。随后工程信息对话框出现,点击OK进行下一步。
现在你得到了一个空的工程,如果要学习使用EVC的用户界面,请看看它的在线文档。现在,让我们为它添加第一个源文件。点击FILE菜单的NEW...项。新弹出的对话框将为你显示一些信息。
选择C++文件类型,点选'Add to project'检查框。在文件名编辑框内键入文件名,如'startup.c',然后按OK键。
一个新的空白文件将会出现供你编辑。
键入或复制上述代码到空白文件中,并且保存。
选择要编译的平台和CPU。然后按F7或从project菜单中选择build来编译、链接工程。对于iPaq,设定当前的激活平台为Pocket PC,设定CPU和编译模式为Win32 (WCE ARM) release.
在build之后。你的第一个应用程序保存在“ARMRel”的子目录中。
通常,在没有差错的build完工程后。可执行文件将会自动被上传到你的Pocket PC中,如果它已经正确连接到你的台式电脑上。如果没有,你可以选择Build菜单中的Update Remote Output Files将它上传。当然你也可以通过ActiveSync或EVC自带的Remote File Viewer工具将它手动上传。
这个应用程序将出现在你的开始菜单中。(注意,新建工程的默认上传位置是\Windows\Start menu目录,但中文版Pocket PC并不存在该目录,它对应的目录是\Windows\“开始”菜单,你要在必须要在Projet菜单的setting中设置,在弹出的对话框中选择Debug标签页,修改其中的Download directory内容为"\Windows\“开始”菜单")。
在下面的章节中,我们将开始理解这些代码是如何工作的。
首先,我们需要告诉操作系统关于你的新的应用程序的信息。因为Win32是一个多任务的操作系统,所有运行的应用程序必须把自己的的信息存放在操作系统的内部数据库中。你需要填充一个WNDCLASS结构,通过使用RegisterClass这个系统API(应用程序接口),来将这些信息告诉操作系统。如果操作系统接受你的信息,这个函数返回一个非零值。
WNDCLASS结构中有三个参数比较重要,hInstance、lpszClassName和lpfnWndProc. “hInstance”是一个用来识别你应用程序的唯一的数字(或是进程ID).你将会从操作系统中得到这个值。我们将在程序的几个地方用到它。“lpszClassName”是当我们创建窗口时用来识别应用程序自己的唯一的字符串。最后的一个是“lpfnWndProc”。它是一个用来获得系统通知消息的函数名称。
其他的成员可以被设定为零,而且不会有任何错误。但是我们通常通过hbrBackground来设定窗口的背景颜色。如果这个成员不设定(也就是赋值为零),系统将不会填充窗口的客户区,而是给你发送WM_ERASEBKGND消息,然后由你自己来填充背静。
下面的步骤是创建主窗口。这里的“窗口”是指一个与其他运行中的应用程序共享着的显示区域。因为你的应用程序需要这个区域来显示正文(菜单条、标题栏、客户区等等)。它也被用来获得鼠标动作(鼠标移动、鼠标点击等等)。窗口是拥护和程序交互的途径,CreateWindow函数创建一个窗口(一个应用程序可以拥有一个或多个窗口)。这个窗口需要联系到刚才用RegisterClass注册的数据。它的第一个参数必须和WNDCLASS的lpszClassName成员一致。
如果函数成功了,它返回一个窗口的句柄(HANDLE),变量类型是HWND。这是一个唯一的32bit (双字)值,用来识别所创建的窗口。如果失败,它返回空(就是零值)。
创建的窗口并没有立即显示到屏幕上。这里有两个函数——ShowWindow和UpdateWindow,供你将窗口显示到屏幕上。通常Pocket PC的应用程序在它们运行时占据整个屏幕(因为Pocket PC的屏幕实在是太小了)。我总是使用代码以获得最大的屏幕显示区域。
接下来,程序进入一个循环。就是这个循环保证了多任务系统的工作。所有的系统消息通过DispatchMessage被发送到住窗口过程MainWndProc。循环将在窗口被DestroyWindow销毁或被系统终结后退出。退出循环后,程序被系统杀掉。你的应用程序信息也被自动移除。
有没有其他简单的方法让一个程序在Pocket PC上执行?当然有,那就是利用现有的窗口类来开始你的应用程序,因为你不需要注册一个新的窗口类。这样的代码将比本文介绍这个小。通常就是一个基于对话框的应用程序。我不打算讲这个方法,因为,这样将失去一些控制应用程序的方法,而且需要花更多的时间来学习Win32的资源脚本文件格式。