怎么一改活动窗口标题栏 非活动窗口标题栏就跟着改呢

http://zhidao.baidu.com/question/73828509

参考了一些文章。  
  我的方法是处理WM_NCPAINT等几个非客户区消息,这些  
  消息处理之后都要调用缺省函数DefWindowProc(),因此  
  重载DefWindowProc虚函数.  
  对话框属性有   Tool   Window   去掉System   Menu  
  LRESULT   CTitleDlg::DefWindowProc(UINT   message,   WPARAM   wParam,   LPARAM   lParam)    
  {  
  LRESULT   lt=CDialog::DefWindowProc(message,   wParam,   lParam);  
  if(::IsWindow(m_hWnd))  
  {  
  if(message==WM_NCPAINT||  
  message==WM_NCACTIVATE||  
  message==WM_NOTIFY||  
  message==WM_SETTEXT)  
  {  
  CDC   *pDC=GetWindowDC();  
  if(pDC)  
  {  
  CRect   rtWnd,   rtTitle;  
  GetWindowRect(&rtWnd);  
  rtTitle.left=GetSystemMetrics(SM_CXFRAME);  
  rtTitle.top=GetSystemMetrics(SM_CYFRAME);  
  rtTitle.right=rtWnd.right-rtWnd.left-  
  GetSystemMetrics(SM_CYFRAME);  
  rtTitle.bottom=rtTitle.top   +  
  GetSystemMetrics(SM_CYSMCAPTION)-1;  
  //现在已经获得DC和RECT,可以随意在标题栏上画  
  CBrush   br;  
  CPen   pen(PS_SOLID,1,RGB(255,255,0));  
  br.CreateSolidBrush(RGB(255,255,0));  
  int   save=pDC->SaveDC();  
  pDC->SelectObject(&pen);  
  pDC->SelectObject(&br);  
  pDC->Rectangle(rtTitle);//画矩形  
  //画一个标准最小化按钮  
  pDC->DrawFrameControl(CRect(4,4,15,14),  
  DFC_CAPTION,DFCS_CAPTIONMIN);  
  //照上还可以画最大和关闭标准按钮  
  pDC->RestoreDC(save);  
  ReleaseDC(pDC);  
  }  
  }  
  }  
  return   lt;  
  }  
  处理鼠标按下消息  
  ........  
  先判断是哪个按钮,再作相应的处理,例如:  
  最大化和恢复按钮:   if(IsZoomed())  
  SendMessage(WM_SYSCOMMAND,SC_RESTORE,  
  MAKELPARAM(point.x,point.y));  
  else  
  SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,  
  MAKELPARAM(point.x,point.y));  
  最小化按钮:   SendMessage(WM_SYSCOMMAND,SC_MINIMIZE,  
  MAKELPARAM(point.x,point.y));  
  关闭按钮:   SendMessage(WM_CLOSE);  
  .........

posted on 2011-04-21 16:03  chulia  阅读(399)  评论(0编辑  收藏  举报

导航