我想要替换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中报错说栈溢出,请问怎么解决?
在头文件的类声明中添加如下代码
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中报错说栈溢出,请问怎么解决?
换成return ::DefWindowProc(hwnd, uMsg, wParam, lParam);
就不会有堆栈溢出的问题,但这样就没有EDIT的功能了难道是我的CallWindowProc有问题?
{
int a = 0;
a++;
return 0;
}
你这里是不是错了啊?
你这样调用当然不会栈溢出了,直接调了windows的默认处理,但这肯定不行,还是得调edit的默认处理过程。我怀疑wpOrigEditProc = (WNDPROC)::SetWindowLong(pWnd->m_hWnd, GWL_WNDPROC, (LONG) EditSubclassProc); 被调了两次以上,你设个断点试试。