正文

《Win32SDK应用程序》第三篇 增加一个回调函数2005-10-16 12:56:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/whyhappy/6080.html

分享到:

第三篇 增加一个回调函数
                     白云小飞

1 请再创建一个函数。
LRESULT CALLBACK WinProc(HWND hwnd,
          UINT msg,
         WPARAM wparam,
         LPARAM lparam)
{
  //这里可以输入响应消息的代码
    return 0;
}
    此函数人称回调函数也称自定义窗口过程函数。但其实它与我们一般函数无异,你千万不要把这个函数想得太复杂了啊!
    记住,函数名WinProc及各参数变量名是可以由你来指定,但是参数类型、个数、顺序、及返回值类型是不能改变的。
    那么,这个函数是干什么的啊?
    它是一个用来与某窗口关联的函数。当我们在窗口上的每一个操作,都会调用这个函数。这在个函数里,我们可以写上代码来完成我们在窗口上操作的相应功能。
    先来看参数部分:
    UINT msg :UINT类型不是我们在前面也见过吗?就是unsigned int类型了。每次程序运行时用户在窗口上操作所产生的消息都会通过msg传递进来。msg里保存的值就是我们对窗口操作时产生的消息值(即WM_CLOSE、WM_CHAR、WM_COMMAND、……的值)。
    HWIND hwnd :哦!这是我在第一篇中讲过的一个窗口句柄类型的变量。我们可以通过传入的hwnd的值知道msg中的消息对应的是哪一个窗口。
     WPARAM wparam , LPARAM lparam :wparam和lparam这两个参数变量的类型分别是WPARAM和LPARAM。呵呵,我不是说过,你还会见到许多“新”的数据类型的吗?你可要有心理准备噢。
    在windef.h中有定义:
typedef UINT WPARAM;   //看,WPARAM其实就是unsigned int。
typedef LONG LPARAM;   //看,LPARAM其实就是long类型
typedef LONG LRESULT;   //LRESULT与LPARAM一样也是长整型long
    返回值:类型为LRESULT,看windef.h中的定义可以知道是一个长整型long现在你大体知道这些就行了。至于更进一步的认识,让我们先放到一边去吧!
    CALLBACK:这又是什么呢?
    在windef.h中的定义如下:
#define CALLBACK    __stdcall
#define WINAPI      __stdcall
    哦!它与WINAPI是一样的,也是__stdcall了,这个WinProc函数是提供给操作系统调用的。我说过操作系统调用的函数都得在前加__stdcall。
    (那为什么不直接用__stdcall呢?)
    呵呵,这至少可以增加代码的可读性及易改性。

    我猜也许你还会继续下一个疑问:那我又如何具体地使用这个函数呢?慢慢来,现在你只要输入到你的.cpp文件中就可以了。
    到此为止,我们的MyAppMain.cpp文件代码如下:
//Begin MyAppMain.cpp
#include <windows.h>
#include<windowsx.h>

LRESULT CALLBACK WinProc(HWND hwnd,
                         UINT msg,
                         WPARAM wparam,
                         LPARAM lparam)
{
  //这里可以输入响应消息的代码
    return 0;
}

int WINAPI WinMain(HINSTANCE hinstance,
                 HINSTANCE hprevinstance,
                 LPSTR lpcmdline,
                 int ncmdshow)
{
  // 将会在这里输入主函数的代码
  return 0;
}
//End MyAppMain.cpp
    目前为止,这个程序还是一个什么事都没做的Win32应用程序。当然它是不会显示任何窗口的,不过我会一点一点地完善它的。
    最后请再认真浏览一下上述代码吧!重点回顾各参数的类型和作用。

阅读(3965) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册