|
WINDOWS CE 窗体编译通过了,却不能在模拟器运行
[复制链接]
学Win CE程序设计的菜鸟,按照教材把一个窗体程序代码输入,生成解决方案成功。就是不能在模拟器下运行 特此请问下老鸟?
开发环境:VS2008 模拟器:WM6.0
问题补充:代码
//filename:myFirst.h
//所有Windows CE API程序必须包括的头文件
#include
//窗口顶部命令栏所需要的头文件
#include
//Go:可以在此处加入你所需要的其他头文件
//返回数组x的元素数
#define dim(x) (sizeof(x)/sizeof(x[0]))
/*
int a[1024];
sizeof(a)是求a数组的总长度, 1024*4=4096字节。
sizeof(a)是求a变量的长度,这里就是int的长度4字节。
sizeof(a)/sizeof(a[0]) 4096/4 = 1024
实际上求的是数组的长度
*/
//定义消息ID号与消息处理过程的结构体
typedef struct{
UINT uCode;
LRESULT (*funtionName)(HWND,UINT,WPARAM,LPARAM);//指的是从窗口程序或者回调函数返回的32位值
}MessageProc;
//定义一个全局正整数标号,这里用于表示处理过程的结构体。本程序没有用到
typedef struct{
UINT uCode;
LRESULT (*futionName)(HWND,HWND,WORD,WORD);//指的是从窗口程序或者回调函数返回的32位值
}CommandProc;
//定义一个全局正整数标号,这里用于表示窗口顶部的命令栏控件ID号
#define IDC_CMDBAR 1
//注册主窗口类
int registerWnd(HINSTANCE);
//创建主窗口并显示
int showMainWnd(HINSTANCE,LPWSTR,int);
//退出主窗口,即退出程序
int quitMainWnd(HINSTANCE,int);
//主窗口过程的原型,窗口过程必须是回调函数
LRESULT CALLBACK mainWndProc(HWND,UINT,WPARAM,LPARAM);
//主窗口收到WM_CReate消息后的处理过程原型
LRESULT goCreateMain (HWND,UINT,WPARAM,LPARAM);
//主窗口收到WM_PAINT消息后的处理过程原型
LRESULT goPaintMain (HWND,UINT,WPARAM,LPARAM);
//主窗口收到WM_DESTROY消息后的处理过程原型
LRESULT goDestroyMain (HWND,UINT,WPARAM,LPARAM);
//主窗口收到WM_CLOSE消息后的处理过程原型
LRESULT goCloseMain (HWND,UINT,WPARAM,LPARAM);
//主窗口过程文件mainWndProc.c
//该文件为主窗口的各种消息处理子过程,是实现程序功能自定义的过程
//包括自定义头文件
#include"myFirst.h"
//定义全局变量字符串类名
const TCHAR mainClassName[]=TEXT("myFirst");
//定义全局程序实例句柄
HINSTANCE hInst;
//定义全局常量消息ID号与消息处理过程指针查找表
const MessageProc mainMessages[]={
WM_CREATE, goCreateMain,
WM_PAINT, goPaintMain,
WM_DESTROY,goDestroyMain,
WM_CLOSE, goCloseMain,
};
//注册主窗口类
int registerWnd(HINSTANCE hInstance)
{
//定义窗口结构体对象
WNDCLASS wc;
//填充结构体中的各成员
wc.hInstance=hInstance;
wc.lpszClassName=mainClassName;
wc.lpfnWndProc=mainWndProc;
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.style=CS_DBLCLKS;
wc.hIcon=NULL;
wc.hCursor=NULL;
wc.lpszMenuName=NULL;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
//注册窗口类
if(RegisterClass(&wc))
return 0;
return 1;
}
//创建主窗口并显示
int showMainWnd(HINSTANCE hInstance,LPWSTR lpCmdLine,int nShowCmd)
{
//定义窗口句柄
HWND hWnd;
//存储全局程序实例句柄
hInst=hInstance;
//创建窗口
hWnd=CreateWindow(
mainClassName,
TEXT("myFirst"),
WS_VISIBLE,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
//如果窗口不存在,返回0并退出
if(!IsWindow(hWnd))
return 0;
//显示并刷新窗口
ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);
return 1;
}
//退出主窗口,即退出程序
int quitMainWnd(HINSTANCE hInstance,int nExitCode)
{
return nExitCode;
}
//主窗口过程体,窗口过程必须是回调函数
LRESULT CALLBACK mainWndProc(HWND hWnd,UINT msgCode,
WPARAM wParam,LPARAM lParam)
{
INT i;
//查找对应的消息ID号,并执行相应的消息处理过程
for(i=0;i
{
if(msgCode==mainMessages.uCode)
return(*mainMessages.funtionName)(hWnd,msgCode,wParam,lParam);
}
//对于不再消息查找表中的消息,调用WindowsCE的缺省窗口过程
return DefWindowProc(hWnd,msgCode,wParam,lParam);
}
//主窗口收到WM_CREATE消息后的处理过程体
LRESULT goCreateMain(HWND hWnd,UINT msgCode,WPARAM wParam,LPARAM lParam)
{
HWND wndCB;
//创建命令栏控件
wndCB=CommandBar_Create(hInst,hWnd,IDC_CMDBAR);
//在命令栏加上Close按钮
CommandBar_AddAdornments(wndCB,0,0);
return 0;
}
//主窗口收到WM_Paint的处理过程
LRESULT goPaintMain(HWND hWnd,UINT msgCode,WPARAM wParam,LPARAM lParam)
{
//定义画板结构体对象
PAINTSTRUCT ps;
//定义巨型结构体对象
RECT rect;
//定义设备环境句柄(或称设备上下文,一般指触摸屏)
HDC hdc;
//获得客户区矩形大小
GetClientRect(hWnd,&rect);
//客户区举行顶部位置增加命令行的高度
rect.top+=CommandBar_Height(GetDlgItem(hWnd,IDC_CMDBAR));
//获得设备环境,必须与EndPaint配对使用
hdc=BeginPaint(hWnd,&ps);
//客户区窗口中央输出一行文字
DrawText(hdc,TEXT("学号Windows CE程序设计"),-1,&rect,
DT_CENTER|DT_VCENTER|DT_SINGLELINE);
//释放设备环境资源
EndPaint(hWnd,&ps);
return 0;
}
//主窗口收到WM_DESTROY的处理过程体
LRESULT goDestroyMain(HWND hWnd,UINT msgCode,WPARAM wParam,LPARAM lParam)
{
//向主窗口发送WM_QUIT消息,并把1传给msg.wParam
PostQuitMessage(1);
return 0;
}
//主窗口收到WM_CLOSE消息后的处理过程体
LRESULT goCloseMain(HWND hWnd,UINT msgCode,WPARAM wParam,LPARAM lParam)
{
INT idCode;
//弹出带有YES和NO控件的简单消息对话框
idCode=MessageBox(hWnd,TEXT("退出软件吗?"),TEXT("退出"),MB_YESNO|MB_ICONQUESTION);
//如果点击NO,则返回0
if(idCode==IDNO)
return 0;
PostQuitMessage(1);
return 0;
}
//该文件为主程序入口文件,即程序执行的入口点,格式固定
//包括的头文件,其中,有windows.h头文件和其他所有需要的头文件
#include "myFirst.h"
//主程序过程以WinMain为入口
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPWSTR lpCmdLine,int nShowCmd)
{
//定义一个消息结构体对象变量
MSG msg;
//判断注册窗口成功否,不成功,返回值1并退出
if(!registerWnd(hInstance))
return 1;
//判断创建主窗口成功否,不成功,返回值2并推出
if(!showMainWnd(hInstance,lpCmdLine,nShowCmd))
return 2;
//获取Windows CE操作系统发来的额消息,并翻译和回发
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//退出主窗口
return quitMainWnd(hInstance,msg.wParam);
}
|
|