找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5365|回复: 0

[分享] 【分享】窗口过程函数(回调函数)

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2009-3-8 11:18:52 | 显示全部楼层 |阅读模式
窗口过程函数(回调函数)
LRESULT CALLBACK WinSunProc( //Long型,WindowProc是名字,可以改.示例中是WinSunProc,下面的四个参数类型不能变.
HWND hwnd,      // handle to window
UINT uMsg,      // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam   // second message parameter
窗口过程函数中的四个参数和消息结构体的前面四个参数一样.当我们利用DispatchMessage()的时候,操作系统会调用WinSunProc这样的一个窗口过程函数,将消息结构体当中的前四个参数,做为一个参数,传递给我们这个函数.对于消息结构体后面的两个变量(投递时间/光标位置),这里是不需要的.
每一次有消息产生,都会调用窗口过程函数,
因为在代码中要判断到底是哪个消息产生了.
switch(uMsg) 分支语气用来判断.
HDC hDC;
              PAINTSTRUCT ps;
switch(uMsg)
       {
       case WM_CHAR: //用户按下了键盘上某一按键
              char szChar[20];
              sprintf(szChar,"char is %d",wParam); //格式化一个文本到内存区(字符数组)中,输出一个问题,在wParam中存放了一个按键的ASCII码,
              MessageBox(hwnd,szChar,"weixin",0); //弹出消息框,
              break;
       case WM_LBUTTONDOWN:       //鼠标左键按下的消息.
              MessageBox(hwnd,"mouse clicked","weixin",0); //鼠标点击时显示的消息框
              HDC hdc; //定义HDC, HDC是一个DC的句柄(Device contace设备上下文),在做图时,要和显卡显示图形的驱动程序打交道,不同平台的显示图形的驱动程序是不同的,如果针对不同平台做图的话,要分别去学习不同平台下的驱动程序,这样对程序员工作量相当大,所以微软采用DC的方式,由DC和驱动程序打交道,我们只要下命令就可以.我们所要做的就是获取一个DC的句柄.然后利用DC去和显示设备驱动程序交道.
              hdc=GetDC(hwnd); //获取DC的句柄.
              TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训"));
              ReleaseDC(hwnd,hdc); //释放DC,不释放会造成内存泄露.
              break;
       case WM_PAINT: //当窗口重绘时,发生这个消息.水平与CUI直坐标发生变化时重绘.
              hDC=BeginPaint(hwnd,&ps); //可以攻取一个DC的句柄.这个句柄是在上面定义的
              TextOut(hDC,0,0,"维新培训",strlen("维新培训")); //输出
              EndPaint(hwnd,&ps); //释放
              break;
       case WM_CLOSE: //当窗口关闭时响应的消息
              if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO))
//IDYES是一个常量,MessageBox的返回值如果是IDYES(点OK按钮时返回值是IDYES).在比较时,最好把常量放在前面.如果错写成if (x=1)这是桓真的.如果1=x在编译时会报错.
              {
                     DestroyWindow(hwnd); //销毁窗口.,但进程中程序并没有退出.
              } //如果把if放在WM_DESTROY中,会发生关掉窗口,但进程中扔在的现象.
              break;
       case WM_DESTROY:
              PostQuitMessage(0); //通知系统线程请求退出.
              break;
       default:
              return DefWindowProc(hwnd,uMsg,wParam,lParam);//返回一个缺省的窗口过程,是对我们不感兴趣的消息提供缺省的处理。消息一经产生,就要给它一个归宿,这个是必不可少的。
       }
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表