知识点:
认识窗口过程
GetWindowLong
SetWindowLong
为动态控件绑定事件
一、获取窗口过程
二、设置新窗口过程
、书写一个新窗口过程函数
窗口过程格式
LRESULT CALLBACK WindowProc(
HWND hwnd, // 窗口句柄
UINT uMsg, // 消息事件
WPARAM wParam, // 消息参数1
LPARAM lParam //消息参数2
);
CallWindowProc 把消息事件传递给以前的窗口过程
LRESULT CallWindowProc(
WNDPROC lpPrevWndFunc, // 指向前一个窗口过程
HWND hWnd, // 窗口句柄
UINT Msg, // 消息事件
WPARAM wParam, // 消息参数1
LPARAM lParam // 消息参数2
);
、注册新的窗口过程
三、为动态控件绑定事件
EN_CHANGE
WM_CHAR
WM_LBUTTONDOWN
WNDPROC oldProc;
LRESULT CALLBACK newProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
if (uMsg==WM_COMMAND)
{
switch(LOWORD(wParam)) //0xFFFF FFFF
{
case :
if (HIWORD(wParam)==EN_CHANGE)
{
TRACE(" myedt 控件 产生EN_CHANGE消息\n");
// 添加相应事件处理函数
}
break;
case :
if (HIWORD(wParam)==EN_CHANGE)
{
TRACE(" myedt2 控件 产生EN_CHANGE消息\n");
// 添加相应事件处理函数
}
break;
}
}
return CallWindowProc(oldProc,hwnd,uMsg,wParam,lParam);
}
// CDialog_Dynamics_Create 消息处理程序
void CDialog_Dynamics_Create::OnBnClickedButton1()
{
//替换窗口过程
//1获取当前窗口过程
oldProc=(WNDPROC)GetWindowLong(m_hWnd,GWL_WNDPROC);
//替换窗口过程
SetWindowLong(m_hWnd,GWL_WNDPROC,(LONG) newProc);
}