CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

问一个CallWindowProc的问题...

楼主smartman(隐君子)2002-03-01 23:30:00 在 C++ Builder / 基础类 提问

WNDPROC   OldWndProc;  
  LRESULT   NewWndProc(HWND   hWnd,UINT   uMsg,WPARAM   wParam,LPARAM   lParam)  
  {  
                  .............  
                  .............  
                  .............  
                  return   CallWindowProc(OldWndProc,hWnd,uMsg,wParam,lParam);  
  }  
   
  在CallWindowProc()这里出错了,何解??? 问题点数:20、回复次数:7Top

1 楼invalid(空心菜(Python是个好东东,大家多用用!))回复于 2002-03-01 23:35:39 得分 0

要先保存OldWndProc的地址,然后才能调用啊,  
   
  否则没有保存OldWndProc吧,你调用时空地址,肯定出错啊。Top

2 楼smartman(隐君子)回复于 2002-03-02 02:30:12 得分 0

还没调用,在编译时就错了啊..Top

3 楼kingcaiyao(aking)回复于 2002-03-02 09:07:55 得分 0

你应该用:GetWindowLong先保存旧的窗口过程的地址,然后再用SetWindowLong设置新的窗口处理过程。Top

4 楼invalid(空心菜(Python是个好东东,大家多用用!))回复于 2002-03-02 09:21:38 得分 20

把  
  WNDPROC     OldWndProc;  
  改成  
  FARPROC     OldWndProc;  
  就可以了。  
  跟是否定义了STRICT有关,看看CallWindowProc的帮助吧。  
  根据帮助:应该如此使用:  
  #ifdef   STRICT  
      WNDPROC   OldWndProc;  
  #else  
      FARPROC   OldWndProc;  
  #endif  
  下面是帮助片断。  
   
   
    STRICT   is   defined,   the   lpPrevWndFunc   parameter   has   the   data   type   WNDPROC.   The   WNDPROC   type   is   declared   as   follows:    
   
  LRESULT   (CALLBACK*   WNDPROC)   (HWND,   UINT,   WPARAM,   LPARAM);      
     
   
  If   STRICT   is   not   defined,   the   lpPrevWndFunc   parameter   has   the   data   type   FARPROC.   The   FARPROC   type   is   declared   as   follows:    
   
  int   (FAR   WINAPI   *   FARPROC)   ()      
     
   
  In   C,   the   FARPROC   declaration   indicates   a   callback   function   that   has   an   unspecified   parameter   list.   In   C++,   however,   the   empty   parameter   list   in   the   declaration   indicates   that   a   function   has   no   parameters.   This   subtle   distinction   can   break   careless   code.   Following   is   one   way   to   handle   this   situation:    
   
  #ifdef   STRICT      
      WNDPROC   MyWindowProcedure    
  #else    
      FARPROC   MyWindowProcedure    
  #endif    
  ...    
          lResult   =   CallWindowProc(MyWindowProcedure,   ...)   ;    
  Top

5 楼smartman(隐君子)回复于 2002-03-02 10:56:59 得分 0

谢谢invalid,问题已经解决....Top

6 楼smartman(隐君子)回复于 2002-03-02 11:01:37 得分 0

给不了分的?Top

7 楼mopyman(only you c plus plus)回复于 2002-03-02 13:20:02 得分 0

没有初始化函数指针OldWndProcTop

相关问题

  • 关于loadlibrary、getprocaddress、callwindowproc
  • API ---callwindowproc的使用
  • 求助高手~~~~Button子类化的问题~~不知道为什么CallWindowProc()这个函数来是出错呢?
  • SetWindowLong和CallWindowProc具体怎样用
  • CallWindowProc()为什么会有错误??
  • 调用CallWindowProc(,,,,)函数时出现错误
  • 帮忙介绍shell_notifyicon,SendMessage,CallWindowProc,GetWindowLong,SetWindowLong的用法?
  • 请解释CallWindowProc的各参数的填写方法及用途(内空)
  • 问!!!
  • 问!

关键词

  • oldwndproc
  • callwindowproc
  • farproc
  • mywindowprocedure
  • wndproc
  • strict
  • 保存
  • lresult
  • wparam
  • lparam

得分解答快速导航

  • 帖主:smartman
  • invalid

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo