WIN32 helloCE 浅析(WINCE)

helloCE源码如下:

 

 

在WINCE中,WIN32程序和其他WINDOWS程序一样,入口点为WinMain函数,在WinMain函数总,首先调用了InitApp,我们来看看它都做了什么

 

int InitApp (HINSTANCE hInstance) {

    WNDCLASS wc;

 

    // Register application main window class.

    wc.style = 0;                             // Window style

    wc.lpfnWndProc = MainWndProc;             // Callback function

    wc.cbClsExtra = 0;                        // Extra class data

    wc.cbWndExtra = 0;                        // Extra window data

    wc.hInstance = hInstance;                 // Owner handle

    wc.hIcon = NULL,                          // Application icon

    wc.hCursor = NULL;                        // Default cursor

    wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);

    wc.lpszMenuName =  NULL;                  // Menu name

    wc.lpszClassName = szAppName;             // Window class name

 

    if (RegisterClass (&wc) == 0) return 1;

 

    return 0;

}

可以看到,InitApp的工作就是填充WNDCLASS结构体,并将其注册。在这里比较重要的就是lpfnWndProc这个字段,lpfnWndProc指向了MainWndProc这个回调函数(MainWndProc是用户自定义的函数,修改成其他名称也可以)。MainWndProc函数是整个WIN32程序的消息处理入口, MainWndProc函数内容如下:

 

LRESULT CALLBACK MainWndProc (HWND hWnd, UINT wMsg, WPARAM wParam, 

                              LPARAM lParam) {

    INT i;

    //

    // Search message list to see if we need to handle this

    // message.  If in list, call procedure.

    //

    for (i = 0; i < dim(MainMessages); i++) {

        if (wMsg == MainMessages[i].Code)

            return (*MainMessages[i].Fxn)(hWnd, wMsg, wParam, lParam);

    }

    return DefWindowProc (hWnd, wMsg, wParam, lParam);

}

在MainWndProc中用了一个循环体来查询系统消息并返回对应消息的处理函数

在文件头有如下的定义:

const struct decodeUINT MainMessages[] = {

    WM_CREATE, DoCreateMain,

    WM_PAINT, DoPaintMain,

    WM_HIBERNATE, DoHibernateMain,

    WM_ACTIVATE, DoActivateMain,

    WM_DESTROY, DoDestroyMain,

};

WM_CREATE:

WM_CREATE消息是发送到窗口的第一条消息,由WINDOWS处理CreateWindows函数时发送它,当WINDOWS接收到WM_CREATE消息就立即执行DoCreateMain函数,DoCreateMain函数中创建了一个用于该窗口的命令栏。

 

WM_PAINT:

WM_PAINT消息对应的函数DoPaintMain用于绘制窗口,在这里完成我们这个程序的核心功能——“Hello Windows CE!” :)

 

WM_HIBERNATE:

WM_HIBERNATE消息可是WINCE所独有的哦,它被发送到某个窗口使得对应窗口的内存使用量减到最小。由于我们这个程序很简单,没什么好破坏的,减少内存的使用的唯一方法也就只能破坏命令栏控件了,呵呵。

  破坏方法:

if (GetActiveWindow () != hWnd)

   CommandBar_Destroy (GetDlgItem (hWnd, IDC_CMDBAR));

 

WM_ACTIVATE:

WM_ACTIVATE消息的作用是指出窗口应该恢复任意WM_HIBERNATE消息释放的数据结构或者窗口控件。

 

WM_DESTROY:

WM_DESTROY消息是我们这个程序必须处理的最后一条消息,在DoDestroyMain函数中调用PostQuitMessage函数,PostQuitMessage函数在消息队列中加入一条WM_QUIT消息,系统接到WM_QUIT消息我们的程序就GAME OVER啦。

 

貌似InitInstance函数忘记说了,这个函数就是完成窗口的创建,没啥好说的,呵呵!

 

基本上,这段代码是每一个WIN32程序都有的,是WIN32程序的最小框架,再复杂的程序,也是通过这个框架扩充。感觉理解了WIN32的程序,再来用MFC,有些地方茅塞顿开,让我这个VC菜鸟也提升了一大截,嘿嘿~~

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值