vs下创建智能设备应用程序
来源:互联网 发布:ubuntu 14.04 glib 编辑:程序博客网 时间:2024/05/11 17:36
在vs下新建VC++智能项目,利用仿真器代替真实设备测试应用程序。
这里以smartphone平台为例:
// test1.cpp : 定义应用程序的入口点。//#include "stdafx.h"#include "test1.h"#include <windows.h>#include <commctrl.h>#define MAX_LOADSTRING 100// 全局变量:HINSTANCE g_hInst; // 当前实例HWND g_hWndMenuBar; // 菜单栏句柄// 此代码模块中包含的函数的前向声明:ATOM MyRegisterClass(HINSTANCE, LPTSTR);BOOL InitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);INT_PTR CALLBACK About(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_TEST1)); MessageBox(NULL,TEXT("welcome to smartphone!"),TEXT("hello"),MB_OK); // 主消息循环: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam;}//// 函数: MyRegisterClass()//// 目的: 注册窗口类。//// 注释://ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass){ WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TEST1)); wc.hCursor = 0; wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); wc.lpszMenuName = 0; 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; // 将实例句柄存储在全局变量中 // 在应用程序初始化期间,应调用一次 SHInitExtraControls 以初始化 // 所有设备特定控件,例如,CAPEDIT 和 SIPPREF。 SHInitExtraControls(); LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_TEST1, szWindowClass, MAX_LOADSTRING); //如果它已经在运行,则将焦点置于窗口上,然后退出 hWnd = FindWindow(szWindowClass, szTitle); if (hWnd) { // 将焦点置于最前面的子窗口 // “| 0x00000001”用于将所有附属窗口置于前台并 // 激活这些窗口。 SetForegroundWindow((HWND)((ULONG) hWnd | 0x00000001)); return 0; } 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; } // 使用 CW_USEDEFAULT 创建主窗口时,将不会考虑菜单栏的高度(如果创建了一个 // 菜单栏)。因此,我们要在创建窗口后调整其大小 // 如果菜单栏存在 if (g_hWndMenuBar) { RECT rc; RECT rcMenuBar; GetWindowRect(hWnd, &rc); GetWindowRect(g_hWndMenuBar, &rcMenuBar); rc.bottom -= (rcMenuBar.bottom - rcMenuBar.top); MoveWindow(hWnd, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, FALSE); } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE;}//// 函数: WndProc(HWND, UINT, WPARAM, LPARAM)//// 目的: 处理主窗口的消息。//// WM_COMMAND - 处理应用程序菜单// WM_PAINT - 绘制主窗口// WM_DESTROY - 发送退出消息并返回////LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; static SHACTIVATEINFO s_sai; switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_HELP_ABOUT: DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, About); break; case IDM_OK: SendMessage (hWnd, WM_CLOSE, 0, 0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_CREATE: SHMENUBARINFO mbi; memset(&mbi, 0, sizeof(SHMENUBARINFO)); mbi.cbSize = sizeof(SHMENUBARINFO); mbi.hwndParent = hWnd; mbi.nToolBarId = IDR_MENU; mbi.hInstRes = g_hInst; if (!SHCreateMenuBar(&mbi)) { g_hWndMenuBar = NULL; } else { g_hWndMenuBar = mbi.hwndMB; } // 初始化外壳程序激活信息结构 memset(&s_sai, 0, sizeof (s_sai)); s_sai.cbSize = sizeof (s_sai); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: 在此添加任意绘图代码... EndPaint(hWnd, &ps); break; case WM_DESTROY: CommandBar_Destroy(g_hWndMenuBar); PostQuitMessage(0); break; case WM_ACTIVATE: // 向外壳程序通知我们的激活消息 SHHandleWMActivate(hWnd, wParam, lParam, &s_sai, FALSE); break; case WM_SETTINGCHANGE: SHHandleWMSettingChange(hWnd, wParam, lParam, &s_sai); 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: { // 创建一个“完成”按钮并调整其大小。 SHINITDLGINFO shidi; shidi.dwMask = SHIDIM_FLAGS; shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_EMPTYMENU; shidi.hDlg = hDlg; SHInitDialog(&shidi); } return (INT_PTR)TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK) { EndDialog(hDlg, LOWORD(wParam)); return TRUE; } break; case WM_CLOSE: EndDialog(hDlg, message); return TRUE; } return (INT_PTR)FALSE;}
注:在windows下编程时,可以用MessageBox(“welcome to smartphone!”,”hello”),而在wince下或其他嵌入式环境下就不能这样使用,需要利用TEXT宏进行转换,MessageBox(NULL,TEXT(“welcome to smartphone!”),TEXT(“hello”),MB_OK),原因是编码方式不同,前者是ASCII,后者为Unicode。
0 0
- vs下创建智能设备应用程序
- VS创建智能设备项目失败
- VS2005中VC++无法创建MFC智能设备应用程序
- VS2005终于可以创建VC++的智能设备应用程序项目
- 智能设备开发演练:创建用于设备的 Windows 窗体应用程序
- [引]智能设备开发演练:创建用于设备的 Windows 窗体应用程序
- .net开发智能设备应用程序
- 安装IE8正式版以后VS无法创建VC++智能设备项目的解决方法
- Visual Studio2005创建“MFC智能设备应用程序”项目提示“脚本错误”
- 用Visual Studio2005创建“MFC智能设备应用程序”项目时,总是出现“脚本错误”
- VS2005创建智能设备DLL
- VS 2005下编写及测试智能设备的非MFC的DLL
- Visual Studio 2005下C++智能设备应用程序常见错误及解决方法
- 在VS2005下使用Visual C++创建智能设备项目 “项目创建失败” 解决办法
- (转)在VS2005下使用Visual C++创建智能设备项目 “项目创建失败” 解决办法
- VS2005创建MFC智能设备C++
- vs2005创建"智能设备"IE脚本错误
- vs2005无法创建智能设备项目
- 24点纸牌游戏 c语言
- Win32项目实现基本绘图
- 学习记录
- LeetCode 141. Linked List Cycle
- 无题
- vs下创建智能设备应用程序
- 栈和队列面试题(一)---一个数组实现两个栈
- CPU 发热的几个可能原因
- 题目1023:EXCEL排序
- 【笔试】网易游戏——直播开发实习生
- Linux 系统命令及其使用详解(三)
- PAT-A-1012. The Best Rank (25)
- Android图片加载框架 Glide 的基本用法
- 对Java关键字final和static的理解