正在阅读:《编程高手箴言》读后感(3)《编程高手箴言》读后感(3)

2004-04-07 10:02 出处:CSDN 作者:seacloud 责任编辑:sdq

  这8行的含义就是不断的从系统里取消息,拿到后再调用系统的服务处理后发给相应的窗口过程。这个过程循环进行,直到推出程序。这就是所谓“消息循环”名字的由来。那么窗口过程在哪里呢?好,我们看看我们创建的窗口的属性吧,从76行开始:

    76  wcex.style   = CS_HREDRAW | CS_VREDRAW;
    77  wcex.lpfnWndProc = (WNDPROC)WndProc;
    78  wcex.cbClsExtra  = 0;
    79  wcex.cbWndExtra  = 0;
    80  wcex.hInstance  = hInstance;
    81  wcex.hIcon   = LoadIcon(hInstance, (LPCTSTR)IDI_TEST);
    82  wcex.hCursor  = LoadCursor(NULL, IDC_ARROW);
    83  wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    84  wcex.lpszMenuName = (LPCSTR)IDC_TEST;
    85  wcex.lpszClassName = szWindowClass;
    86  wcex.hIconSm  = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

  其他我们暂时先不关心,看看第77行,lpfnWndProc是什么?根据匈牙利命名法,这是个函数指针!而(WNDPROC)WndProc就是我们定义的一个函数(第131行)。于是明白了,我们定义的一个函数被保存在窗口结构里传给系统了。再扫描一下前面列的程序,发现(WNDPROC)WndProc并没有被调用!这是怎么回事?原来系统是这样告诉我们的:有个函数你(应用程序)给我定义并实现一下,告诉我,然后你就别管了,我(系统)会根据情况来调用。所以,本质上讲,窗口函数只是系统定义的一个回调函数而已。大家要习惯这种回调函数,在Windows的很多地方都会定义类似的回调函数让你实现的。
  以前在用Win32 API直接编程的时候,通常会在(WNDPROC)WndProc看到一个巨大switch/case结构,在这个巨大的结构里完成所感兴趣的消息的处理。那么到底有那些消息呢?查MSDN固然可以,但我是用Visual C++带的工具,Spy++来看的。当你在Spy++里用Ctrl+M打开Message Log窗口后,就可以在第二个tab页里看到几乎所有公开的消息了,并且是分了类的。推荐大家去浏览一下,不求记住,但最好有个大致的印象,尤其是用Visual C++编程的同志。

察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品