读书人

WINDOWS CE 窗体编译通过了却不能在

发布时间: 2012-03-01 10:25:46 作者: rapoo

WINDOWS CE 窗体编译通过了,却不能在模拟器运行 - C++ Builder / Windows SDK/API
学Win CE程序设计的菜鸟,按照教材把一个窗体程序代码输入,生成解决方案成功。就是不能在模拟器下运行 特此请问下老鸟?
开发环境:VS2008 模拟器:WM6.0


问题补充:代码
//filename:myFirst.h

//所有Windows CE API程序必须包括的头文件
#include <windows.h>

//窗口顶部命令栏所需要的头文件
#include <commctrl.h>

//Go:可以在此处加入你所需要的其他头文件

//返回数组x的元素数
#define dim(x) (sizeof(x)/sizeof(x[0]))
/*
int a[1024];

sizeof(a)是求a数组的总长度, 1024*4=4096字节。
sizeof(a[i])是求a[i]变量的长度,这里就是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<dim(mainMessages);i++)
{
if(msgCode==mainMessages[i].uCode)
return(*mainMessages[i].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);

}









[解决办法]
界面上就有(菜单上也有,一个好像在项目设置中,另一个在工具中)
[解决办法]
mobile
用vs新建一个mfc项目编译放到上面就好了

读书人网 >C++ Builder

热点推荐