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
原创粉丝点击