zoukankan      html  css  js  c++  java
  • 学习Windows Mobile开发系列笔记(win32基本程序框架)

    一直对Windows Mobile开发很有兴趣。去年已经做过一个这方面的项目了,虽然自己看了很多资料,但是没有系统的学习过。现在应该还只是个入门者吧。

    现在想系统的学习一番,我决定把Windows Mobile SDK中的sample都看一遍。我想这样应该能比较全面的掌握Windows Mobile的开发。

    边看边写,对自己的学习成果做一个总结,也把心得体会和朋友分享。

    今天看了Sample:BasicApp。我安装了wm5.0的sdk,这个程序的代码在

    C:/Program Files/Windows CE Tools/wce500/Windows Mobile 5.0 Pocket PC SDK/Samples/CPP/Win32

    同样是一个非常简单的小程序。这种非常简单的小程序很适合初学者,主题鲜明,不会被一些花哨的代码勾引。

    程序的功能是现实一个窗口,然后在窗口里显示一幅图片和这幅图片的文字说明。点击左键菜单“Switch”,切换另一幅图片和文字说明。

    windows mobile系统和windows桌面系统一样也是基于事件驱动的,系统同样会象应用程序发送很多消息。

    windows 应用程序不请求来自操作系统的输入,而是由操作系统通知应用程序输入已发生。操作系统通过向应用程序窗口发送“消息”来实现对应用程序的通知,所有窗口都是“窗口类”的实例。

    用户的每一个操作都会由系统向运行着的应用程序发送相应的消息, 应用程序的主要工作就是处理系统消息。每个应用程序都有自己的消息队列,以及消息处理机制。

    每一个窗口同样也有自己的消息队列和消息处理机制。这些都是我对windows系统的一些机制的理解,如果有什么不对的地方还请大家指出。

    让我们来看看代码实现。

    只有一个cpp文件,所有内容都在这个文件中。入口函数是WinMain。看看这个程序的架构:

    1.winmain函数定义。

    2.创建程序窗口对象。

    hwnd = CreateMainWindow(nShowCmd);

    3.执行程序的消息队列。

    while (GetMessage(&msg, NULL, 0, 0) > 0)

         {

             TranslateMessage(&msg);

           DispatchMessage(&msg);

         }

    4.编写窗体过程函数  

    和winodws中的win32程序结构一样。

    在创建程序窗口对象时,程序执行了如下操作:

    1.构建一个窗口对象(设计窗体)。

       WNDCLASS wc;

       ZeroMemory(&wc, sizeof(wc));

       wc.lpfnWndProc = MainWindowProc;

       wc.hInstance = g_hInstance;

       wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);

       wc.lpszClassName = g_szClassName;

    在注册时,我们制定了这个窗口的消息处理函数

    wc.lpfnWndProc = MainWindowProc;

    MainWindowProc 这个函数就是这个窗口的消息处理函数。

    2.注册这个对象。

      atm = RegisterClass(&wc);

      

    3.创建窗口并显示。

       hwnd = CreateWindow((LPCTSTR)atm, szTitle, WS_OVERLAPPED | WS_SYSMENU,

           CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

    NULL, NULL, g_hInstance, NULL);

    ShowWindow(hwnd, nShowCmd);

    4.在MainWindowProc消息处理函数中处理系统给这个窗口发送的消息。

    这个简单的框架挺实用的。在移动设备上程序效率还是很重要的,毕竟硬件性能比不过pc。.net这样的东西还是太耗资源了,

    还是win32程序效率高,对系统的可控性较好。写win32程序就离不开这个框架。

  • 相关阅读:
    MySQL------代码1024,can't get hostname for your address解决方法
    MySQL------存储过程的使用
    MyEclipse------如何添加jspsmartupload.jar,用于文件上传
    JQuery------实现鼠标点击和滑动不同效果
    CSS------如何让div中的div处于右下角
    JQuery------制作div模态框
    CSS------Filter属性的使用方法
    python使用元类
    python __new__()分析
    centos自带python2.6升级到python2.7。并解决yum pip easy_install pip等模块兼容性问题
  • 原文地址:https://www.cnblogs.com/xyzlmn/p/3168307.html
Copyright © 2011-2022 走看看