设为首页 加入收藏

TOP

1.4 公共模块设计(2)
2013-10-07 13:26:44 来源: 作者: 【 】 浏览:81
Tags:1.4 公共 模块 设计

1.4  公共模块设计(2)

代码贴士

SetBkMode:设置背景模式,值为TRANSPARENT时进行透明处理。

CreateFont:初始化用指定特性定义的CFont对象。

InvalidateRect:屏蔽一个窗口客户区的全部或部分区域,会导致窗口在事件期间部分重画。

SendMessage:将指定的消息发送到一个或多个窗口,此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。

然后,定义一个新的定义按钮窗口函数,取代按钮默认的窗口函数,对一些消息进行特殊处理。代码如下:

  1. LRESULT __stdcall DefWindowProc1(HWND hWnd,UINT Msg,
    WPARAM wParam, LPARAM lParam )  
  2. {  
  3.     CPoint pt;  
  4.     CDrawButton *pButton=(CDrawButton*)GetWindowLong
    (hWnd,GWL_USERDATA);    //获得窗口信息  
  5.     switch (Msg)  
  6.     {  
  7.     case WM_LBUTTONDBLCLK:                      //屏蔽双击事件  
  8.         {  
  9.             return TRUE;  
  10.             break;  
  11.         }  
  12.         case WM_PAINT:                          //绘制窗口事件  
  13.             {  
  14.                 if (pButton->m_Style>0)  
  15.                     return pButton->OnPaint( hWnd);  
  16.                 else  
  17.                     return  CallWindowProc
    (pButton-
    >m_OldProc, hWnd,Msg,wParam,lParam);  
  18.                 break;  
  19.             }  
  20.         case WM_LBUTTONDOWN:                    //鼠标左键按下事件  
  21.             {  
  22.                 pt.x = LOWORD(lParam);              //鼠标按下的横坐标  
  23.                 pt.y = HIWORD(lParam);              //鼠标按下的纵坐标  
  24.                 if (pButton->m_Style>0)  
  25.                     return pButton->OnLButtonDown( hWnd, 0, pt );  
  26.                 else  
  27.                     return  CallWindowProc(pButton-
    >m_OldProc, hWnd,Msg,wParam,lParam);  
  28.                 break;  
  29.             }  
  30.         case WM_LBUTTONUP:                      //鼠标左键抬起事件  
  31.             {  
  32.                 pt.x = LOWORD(lParam);              //鼠标按下的横坐标  
  33.                 pt.y = HIWORD(lParam);              //鼠标按下的纵坐标  
  34.                 if (pButton->m_Style>0)  
  35.                     return pButton->OnLButtonUp( hWnd, 0,pt );  
  36.                 else  
  37.                     return  CallWindowProc(pButton-
    >m_OldProc, hWnd,Msg,wParam,lParam);  
  38.                 break;  
  39.             }  
  40.         case WM_MOUSEMOVE:                      //鼠标移动事件  
  41.             {  
  42.                 pt.x = LOWORD(lParam);              //鼠标按下的横坐标  
  43.                 pt.y = HIWORD(lParam);              //鼠标按下的纵坐标  
  44.                 if (pButton->m_Style>0)  
  45.                     return pButton->OnMouseMove(hWnd,0, pt);  
  46.                 else  
  47.                     return  CallWindowProc(pButton->
    m_OldProc, hWnd,Msg,wParam,lParam);  
  48.                 break;  
  49.             }  
  50.         case WM_DESTROY:                            //销毁窗口  
  51.             {                 
  52.                  WNDPROC procOld=pButton->m_OldProc;  
  53.                  SetWindowLong(hWnd,GWL_WNDPROC,
    (long)procOld); //恢复原来的窗口函数  
  54.                  CWnd* pWnd = ::CWnd::FromHandle(hWnd);
    //将按钮对象与控制块分离  
  55.                  if (pWnd)  
  56.                  {  
  57.                     pWnd->Detach();  
  58.                  }  
  59.                  pButton->m_Flag = 1;  
  60.                  return 1;  
  61.             }  
  62.         default :  
  63.             {  
  64.                 break;  
  65.             }  
  66.     }  
  67.     return CallWindowProc(pButton->m_OldProc, hWnd, 
    Msg, wParam, lParam );  
  68. }  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.4 公共模块设计(3) 下一篇1.4 公共模块设计(1)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: