wince之路:1.开始

大学刚毕业,之前只接触过一点linux,arm9。因为工作关系,突然要搞基于arm11的wince操作系统,一片茫然。当看到第一个程序的时候,头大了,句柄是什么?后来慢慢的,把这个简单的程序分析下来了。句柄是一种指针的指针,可以说是一个对象的标号一样。


HELLO.H

struct DecodeUnit {
	UINT message;
	LONG (*fun)(HWND hwnd,UINT message,WPARAM wParam,LPARAM);
};


#define  dim(x) (sizeof(x)/sizeof(x[0]))




LONG OnDestroy(HWND hwnd,UINT message,WPARAM wParam,LPARAM);
LONG OnPaint(HWND hwnd,UINT message,WPARAM wParam,LPARAM);
HELLO.C
#include"HELLO.H"
#include <wingdi.h>
#include <Windows.h>       //最基本的windows头文件,里面包含了其他头文件,有如下
					//WINDEF.H 基本数据类型定义
					//WINNT.H 支持Unicode的类型定义
					//WINBASE.H Kernel(内核)函数。
				//WINUSER.H 用户界面函数。
				//WINGDI.H 图形设备接口函数。
struct DecodeUnit MainMessageProc[]={           //与消息有关的结构体,通过前面的消息,调用后面的函数
	WM_DESTROY,OnDestroy,
	WM_PAINT,OnPaint,
};

HINSTANCE g_hInst;                 //定义了一个全局的实例句柄


LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);         //消息的回调函数


int WINAPI WinMain(HINSTANCE hInstance,                      //主函数用的是WinMain,和标准C的main很像,参数也和标准C的 argvc,argc[v]很类似,
							     //第一个参数是本程序的句柄,第二个参数前一实例句柄,第三个参数参考标准C main
							     //函数句柄,第四个参数是窗口的显示方式,最大化最小化隐藏激活等等。。。
				   HINSTANCE hPrevInstance,
				   LPTSTR    lpCmdLine,
				   int       nCmdShow)
{


	//1.创建一个窗体类
	WNDCLASS ws;


	ws.cbClsExtra	= 0;		//窗口类无扩展
	ws.cbWndExtra   = 0;		 //窗口实例无扩展
	ws.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//窗口背景为白色
	ws.hCursor		= NULL;    // 窗口采用的光标
	ws.hIcon		= NULL;	   //窗口的最小化图标
	ws.hInstance	= hInstance; 	//当前实例句柄
	ws.lpfnWndProc	= WndProc;     
	ws.lpszClassName = TEXT("Hello");	//窗口类名为“窗口”
	ws.lpszMenuName  = NULL;		//窗口无菜单
	ws.style		= CS_VREDRAW | CS_HREDRAW;	//窗口显示风格,
						//CS_HREDRAW当垂直长度改变或移动窗口时,重画整个窗口
									//CS_VREDRAW当水平长度改变或移动窗口时,重画整个窗口


//2.注册窗体类
if (! RegisterClass(&ws)) return -1;


//3.创建窗体


HWND hwnd = CreateWindow(TEXT("Hello"),TEXT("HELLO"),WS_VISIBLE |  WS_SYSMENU  ,//用刚注册的窗体类创建一个窗体,类名要一致
		0,0,CW_USEDEFAULT,CW_USEDEFAULT,
		NULL,NULL,hInstance,NULL);


	//4.更新窗体内容
	UpdateWindow(hwnd);
	ShowWindow(hwnd,nCmdShow);


	MSG msg;


	//5.获取系统消息
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}


	return 1;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)		//消息回调函数,参见下面头文件
{


	for (int i = 0;i < dim(MainMessageProc);i++)
	{
		if (MainMessageProc[i].message == message)
			(*MainMessageProc[i].fun)(hwnd,message,wParam,lParam);
	}
	return DefWindowProc(hwnd,message,wParam,lParam);
}
LONG OnDestroy(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)		//结束消息,关闭窗口
{
	PostQuitMessage(1);
	return TRUE;
}
LONG OnPaint(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	PAINTSTRUCT ps;               //定义的结构体包含了应用程序用来绘制它所拥有的窗口客户区所需要的信息				
	HDC hdc;		      //定义设备描述句柄			
	RECT rect; 			//定义一个记录矩阵坐标像素的变量
	GetClientRect(hwnd,&rect);	//获得窗口的像素坐标
	hdc = BeginPaint(hwnd,&ps);	//开始绘图
	DrawText(hdc,TEXT("hello world"),-1,&rect,DT_VCENTER | DT_CENTER);	//TEXT是一个宏,可以自由识别转换编码方式
	EndPaint(hwnd,&ps);			//绘图结束,BeginPaint与EndPaint成对使用
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值