我想要替换COMBO控件中的Edit的消息响应函数
在头文件的类声明中添加如下代码
public:
static LRESULT CALLBACK EditSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static WNDPROC wpOrigEditProc;在CPP文件中的实现如下:WNDPROC CA::wpOrigEditProc = NULL;LRESULT CALLBACK CA::EditSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 

if (uMsg == WM_LBUTTONDOWN)
{
int a = 0;
a++;
return 0;
} return ::CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam); 
}
在某一函数实现中调用wpOrigEditProc = (WNDPROC)::SetWindowLong(pWnd->m_hWnd, GWL_WNDPROC, (LONG) EditSubclassProc);可每次都在EditSubclassProc中报错说栈溢出,请问怎么解决?

解决方案 »

  1.   

    刚刚试了一下,把return ::CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam); 
    换成return ::DefWindowProc(hwnd, uMsg, wParam, lParam);
    就不会有堆栈溢出的问题,但这样就没有EDIT的功能了难道是我的CallWindowProc有问题?
      

  2.   

    if (uMsg == WM_LBUTTONDOWN) 

    int a = 0; 
    a++; 
    return 0; 

    你这里是不是错了啊?
      

  3.   

    “在某一函数实现中调用”最好把这个函数代码发出来,至少调用SetWindowLong的上下文;另外怎么调用这个函数的?
      

  4.   

    return ::DefWindowProc(hwnd, uMsg, wParam, lParam); 
    你这样调用当然不会栈溢出了,直接调了windows的默认处理,但这肯定不行,还是得调edit的默认处理过程。我怀疑wpOrigEditProc = (WNDPROC)::SetWindowLong(pWnd->m_hWnd, GWL_WNDPROC, (LONG) EditSubclassProc); 被调了两次以上,你设个断点试试。