首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > VSTS >

【WinCE】 VS2005 创办WinCE工程中各个函数解析

2012-07-22 
【WinCE】 VS2005 创建WinCE工程中各个函数解析一,创建过程1) 首先安装WinCE开发必备的环境:VS2005VS80sp1-K

【WinCE】 VS2005 创建WinCE工程中各个函数解析

一,创建过程

       1) 首先安装WinCE开发必备的环境:

              VS2005 

              VS80sp1-KB926604-X86-CHS.exe

              VS80sp1-KB932230-X86-CHS.exe

              vs_emulator.exe 

              WINCE6.0_CHS_SDK.msi 

       2)文件 ---> 新建  ---->项目 ---> Visual C++  --->智能设备 ----> Win32智能设备项目

       3)在弹出来的项目向导中,选择已安装的SDK为 WinCE 6.0 

       4)完成项目创建,按F5,在WinCE模拟器中弹出来图形界面空文档


二,源码(自动创建Win32 项目源码解析)

主要函数:

        1)入口函数

             int WINAPI WinMain(HINSTANCE hInstance,                //确定一个程序的实例
                   HINSTANCE hPrevInstance,                                       //从旧的win16 API遗留下来,在win32中可以忽略
                   LPTSTR    lpCmdLine,                                                //是一个指针,指向一个包含命令行参数文本的字符串
                   int       nCmdShow)                                                      //指定程序主窗口初始状态

        2)MSG结构体

            typedef   struct   tagMSG {

#include "stdafx.h"#include "hello.h"#include <windows.h>#include <commctrl.h>#define MAX_LOADSTRING 100// 全局变量:HINSTANCEg_hInst;// 当前实例(句柄)HWNDg_hWndCommandBar;// 命令栏句柄// 此代码模块中包含的函数的前向声明:ATOMMyRegisterClass(HINSTANCE, LPTSTR);BOOLInitInstance(HINSTANCE, int);LRESULT CALLBACKWndProc(HWND, UINT, WPARAM, LPARAM);INT_PTR CALLBACKAbout(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){MSG msg;//结构体// 执行应用程序初始化:if (!InitInstance(hInstance, nCmdShow)) {return FALSE;}HACCEL hAccelTable;hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_HELLO));// 主消息循环:while (GetMessage(&msg, NULL, 0, 0)) //WM_QUIT使GetMessage返回0,其他的大于零(case WM_DESTROY:产生WM_QUIT){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) {TranslateMessage(&msg);//将键盘消息转化为字符消息DispatchMessage(&msg);//通知Windows将消息分发到程序的合适窗口}} // int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT UType);//MessageBox(NULL,TEXT("Hello World"),TEXT("Hello ts"),MB_OK);//父窗口,窗体显示值,窗体标题栏文本,按钮数目和类型MessageBox(msg.hwnd,TEXT("Hello World"),TEXT("Hello ts"),MB_ICONWARNING);return (int) msg.wParam;}// // 函数: MyRegisterClass()//// 目的: 注册窗口类。//// 注释://ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass){WNDCLASS wc;wc.style = CS_HREDRAW | CS_VREDRAW;//窗口大小横向、纵向变化时,将强制从新绘制窗口wc.lpfnWndProc = WndProc;//下面有实现函数(窗口过程的窗口地址,就是函数实现方法的方法地址)111111111wc.cbClsExtra = 0;//类结构体增加额外空间wc.cbWndExtra = 0;//Windows预定义结构体增加额外空间wc.hInstance = hInstance;//拥有该窗口的进程wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_HELLO));//窗口默认图标句柄wc.hCursor = 0;//是否支持鼠标wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);//绘制窗口背景的方式(GetStockObject()加载画刷:白色WHITE_BRUSH)wc.lpszMenuName = 0;//必须为NULL ,winCE不支持直接包含菜单的窗口,菜单一般在菜单栏wc.lpszClassName = szWindowClass;return RegisterClass(&wc);}//// 函数: InitInstance(HINSTANCE, int)//// 目的: 保存实例句柄并创建主窗口//// 注释://// 在此函数中,我们在全局变量中保存实例句柄并// 创建和显示主程序窗口。//BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){ HWND hWnd; TCHAR szTitle[MAX_LOADSTRING];// 标题栏文本 TCHAR szWindowClass[MAX_LOADSTRING];// 主窗口类名 g_hInst = hInstance; // 将实例句柄存储在全局变量中 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_HELLO, szWindowClass, MAX_LOADSTRING); if (!MyRegisterClass(hInstance, szWindowClass))//注册窗口 { return FALSE; } hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); if (g_hWndCommandBar) { CommandBar_Show(g_hWndCommandBar, TRUE); } return TRUE;}//// 函数: WndProc(HWND, UINT, WPARAM, LPARAM)//// 目的: 处理主窗口的消息。//// WM_COMMAND- 处理应用程序菜单// WM_PAINT- 绘制主窗口// WM_DESTROY- 发送退出消息并返回////LRESULT == long 32 位 /* 窗口句柄 ;消息的数值(无符号整形);和消息相关的数据32位数值*/LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)//窗口过程11111111111111{ int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc;//设备句柄RECT rect;//窗口活动区域的位置坐标 switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_HELP_ABOUT: //About为回调函数 DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, About);//弹出关于对话框 (IDD_ABOUTBOX在资源内) break; case IDM_FILE_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_CREATE: g_hWndCommandBar = CommandBar_Create(g_hInst, hWnd, 1); CommandBar_InsertMenubar(g_hWndCommandBar, g_hInst, IDR_MENU, 0); CommandBar_AddAdornments(g_hWndCommandBar, 0, 0); break; case WM_PAINT://重新绘制客户区窗口 hdc = BeginPaint(hWnd, &ps); GetClientRect(hWnd,&rect);//获取窗口位置坐标 // TODO: 在此添加任意绘图代码... DrawText(hdc,TEXT("Hello WinCE"),-1,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);//在屏幕上写字 EndPaint(hWnd, &ps);//已经处理了窗口中的客户区 break; case WM_DESTROY://窗口销毁之前收到的消息 CommandBar_Destroy(g_hWndCommandBar); PostQuitMessage(0);//将一条WM_QUIT消息放入消息队列 break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0;}// “关于”框的消息处理程序。INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){ switch (message) { case WM_INITDIALOG: RECT rectChild, rectParent; int DlgWidth, DlgHeight;// 以像素为单位的对话框宽度和高度 int NewPosX, NewPosY; // 设法使“关于”对话框居中显示 if (GetWindowRect(hDlg, &rectChild)) { GetClientRect(GetParent(hDlg), &rectParent); DlgWidth= rectChild.right - rectChild.left; DlgHeight= rectChild.bottom - rectChild.top ; NewPosX= (rectParent.right - rectParent.left - DlgWidth) / 2; NewPosY= (rectParent.bottom - rectParent.top - DlgHeight) / 2; // 如果“关于”框比实际屏幕大 if (NewPosX < 0) NewPosX = 0; if (NewPosY < 0) NewPosY = 0; SetWindowPos(hDlg, 0, NewPosX, NewPosY, 0, 0, SWP_NOZORDER | SWP_NOSIZE); } return (INT_PTR)TRUE; case WM_COMMAND: if ((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDCANCEL)) { EndDialog(hDlg, LOWORD(wParam)); return TRUE; } break; case WM_CLOSE: EndDialog(hDlg, message); return TRUE; } return (INT_PTR)FALSE;}

热点排行