CALLBACK回调函数能作为C++的类中的成员函数嘛?

funboy88 2003-11-04 10:42:34
如下的一段程序是C写的,我需要用C++的OOP方法来实现
,那个EnumWindowsProc回调函数可写成C++类里的成员函数嘛?


typedef struct
{
  HWND hWnd;
  char cWinBuf[256];
}WINLIST;
WINLIST gWinList[256];
int giCountWin,j;

BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam )
{
  char buffer[256];
  GetWindowText(hWnd, buffer, 256);
  if ( strlen(buffer) )
  {
    if (giCountWin < 256)
    {
      gWinList[ giCountWin].hWnd = hWnd;
      strcpy(gWinList[ giCountWin].cWinBuf,buffer);
      giCountWin ++;
    }
  }
  return TRUE;
}

void CloseSpedia()
{
  giCountWin = 0;
  EnumWindows( (WNDENUMPROC)EnumWindowsProc,0);
  for ( j = 0; j<giCountWin; j++)
  {
    if ( strcmp(gWinList[j].cWinBuf,"画笔") == 0 )
    {
      ::PostMessage( gWinList[j].hWnd,WM_CLOSE,0,0);
      break;
    }
  }
}
...全文
276 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcchm 2003-11-04
  • 打赏
  • 举报
回复
static

但是这样的callback不能访问类的非static成员的;如果非得访问非static成员,估计只有用
global callback了
funboy88 2003-11-04
  • 打赏
  • 举报
回复
我不要用全局函数的方法来实现

前面的老兄说得应该 是对的,用STATIC静态成员函数来实现

但是用静态成员函数实现
那些累计的成员变量又得声明成静态的。

请问 captainwh(wh) 兄:
在回调函数里如何多添加一个指向THIS的参数?

它是回调函数,参数好像必须是固定的吧?
artherx2002 2003-11-04
  • 打赏
  • 举报
回复
可以,只要把BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam )
{....}放到CloseSpedia(){....}前面,并在相应的头文件中声明BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam );注意这个“;”号,

captainwh 2003-11-04
  • 打赏
  • 举报
回复
callback函数可以作为static member成为类的成员函数,但这样就不能访问类中的非static成员了,如果callback中有提供一个void*类型的参数,可以传递用户自定义的数据到callback中,那么可以将this指针传递到callback, 在callback中调用另一个非static成员函数来完成实际的功能,这样就可以访问非static成员了。
ljzcom 2003-11-04
  • 打赏
  • 举报
回复
是的,就是楼上所说的。在*.h文件中,以static CALLBACK 的形式来声明函数
smartlife 2003-11-04
  • 打赏
  • 举报
回复
可以 在函数定义前加上static 。 以前的帖子有 搜索一下把!
thisisjjjj 2003-11-04
  • 打赏
  • 举报
回复
mark
我也想知道...
Ah 2003-11-04
  • 打赏
  • 举报
回复
static
声明为静态成员就可以了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧