VC 自绘非客户区域的知识要求

一、WM_NCPAINT 主体绘画消息 

二、OnNcActivate 激活时的消息绘制

三、OnNcLButtonDown(UINT nHitTest, CPoint point)

这个消息判断是否点击了最小化,最大化,关闭按钮。可以在这里转转换成自己的位置判断

如果这里不处理,点击后,会出现系统默认的按钮。

 if(nHitTest ==HTMAXBUTTON ||nHitTest==HTMINBUTTON  || nHitTest==HTCLOSE )
    { //重绘按钮的状态  } 
    else
    {
        CDialog::OnNcLButtonDown(nHitTest, point);
    }

四、处理标题栏大小的消息  OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp)

      这里可以处理窗口标题栏的高底,win7启用不同主题时,标题栏的高度是不一样,这里可以指定。

 if (bCalcValidRects)   
     {   

         CRect& rc = (CRect&)lpncsp->rgrc[0];//get the client rectangle   
         rc.top += m_nTitleHeight;   
         rc.left += 1;   
         rc.bottom -= 1;   
         rc.right -= 1;   

     }

五、WM_SIZE消息 

 这里可以调整自定义的最大化,最小化,关闭按钮的位置

六、WM_NCLBUTTONDOWN /WM_NCLBUTTONUP消息

处理,按下时按钮的状态,并转换消息处理

void CTESTNCDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
  
    if(nHitTest ==HTMAXBUTTON ||nHitTest==HTMINBUTTON  || nHitTest==HTCLOSE )
    {     
        m_hittest = nHitTest;
        return ;  
    }
    else
    {
        m_hittest = 0;
        CDialog::OnNcLButtonDown(nHitTest, point);
    } 
    
}


void CTESTNCDlg::OnNcLButtonUp(UINT nHitTest, CPoint point)
{
    // TODO: Add your message handler code here and/or call default

       switch (m_hittest)
       { 
           case HTCLOSE:
           {
                OnCancel();
                break;
           }
           case HTMAXBUTTON:
           {
            ShowWindow(SW_SHOWMAXIMIZED);
            break;
           }
           case HTMINBUTTON:
           {
            CloseWindow();
           }
            break;
           default:
            { 
               CDialog::OnNcLButtonUp(nHitTest, point); 
            }
       }
}

好记性不如懒笔头,备份一下我的源代码。点击打开链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

衢州大白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值