hbutton2=CreateWindow(.....);
old=(WNDPROC)SetWindowLong(hbutton1,GWL_WNDPROC,(LONG)MyButton);LRESULT CALLBACK MyButton(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_LBUTTONDOWN:
MessageBox(hwnd,"你点击了我","子类化按钮单击通知",MB_OK);
return 0;
}
return CallWindowProc(old, hwnd, msg, wParam, lParam);
}为什么当我点击按钮时没有下压下去就弹出了那个消息框?

解决方案 »

  1.   

    case WM_LBUTTONDOWN:
    if(0==CallWindowProc(old, hwnd, msg, wParam, lParam))

    return自然不会调用系统默认的处理先进入你的处理MyButton,再CallWindowProc
      

  2.   

    我一般这么写,有点乱:
    old=GetWindowLong(hbutton1,GWL_WNDPROC);
    SetWindowLong(hbutton1,GWL_WNDPROC,(LONG)MyButton);
    LRESULT CALLBACK MyButton(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
    {
    switch(msg)
    {
    case WM_LBUTTONDOWN:
    MessageBox(hwnd,"你点击了我","子类化按钮单击通知",MB_OK);
    return 0;
    default:
    return CallWindowProc(old, hwnd, msg, wParam, lParam);
    }
    return CallWindowProc(old, hwnd, msg, wParam, lParam);//偶通常不加(hehe)
    }
      

  3.   

    如果想象普通按钮的话,应该是相应WM_LBUTTONUP吧
      

  4.   

    GetWindowRectxPos = LOWORD(lParam);  // horizontal position of cursor 
    yPos = HIWORD(lParam);  // vertical position of cursor PtInRect判断你的鼠标是否飞出去了
      

  5.   

    楼上的应是GetClientRect,结贴。