【界面】VC 6 MFC让窗口轻而易举变漂亮

一、界面分析

         主要是把数据放到合适的位置,并且获取窗口的pDC,用pDC—>StretchBlt()函数显示图片,这里面创建了一个兼容的dc,先把数据选择到这里面,再用StrtchBlt()拷贝兼容dc。

         最后是一个一个数据块进行显示。

二、交互分析

         DLG对话框中,响应WM_NCMOUSEMOVE消息、WM_NCLBUTTONDOWN消息

//WM_NCMOUSEMOVE消息
OnNcMouseMove(nHitTest, point);
{  
  CRect tempIni,tempMin,tempMax,tempClose,ClientRect;//分别是初始化按钮、最小化按钮、最大化按钮、关闭按钮、客户区
   temMin.CopyRect()//拷贝进temMin中
    GetWindowRect(ClientRect);
    if(tempMin.PtInRect(point)))//鼠标在最小化按钮移动时,则绘制另外一幅
}
//处理WM_NCLBUTTONDOWN消息
OnNcLButtonDown(nHitTest, point)
{  
     switch(m_ButtonState)//在MouseMove消息时有记录,
     {
        case bsClose: //关闭窗口
         case bsIni:   //还原窗口到初始大小和位置
         case bsMin:   //最小化
         case bsMax:   //最大化
         case bsRes:   //还原
                         //以上都是调用MoveWindow()、SetWindowPos()、ShowWindow()之类的
     }

}

三、数据分析

StretchBlt(HDC hdcDest, int x , int y , int width , int height)
//x坐标,--->   y坐标,向下, 宽度 , 高度
CRect(int l,int t,int r,int b); //具体含义是left , top , right , bottom
tempMin.CopyRect(CRect(m_MinRect.left+ ClientRect.left,//一般为m_MinRect
ClientRect.top+m_MinRect.top,//一般为m_MinRect.top
m_MinRect.right+m_MinRect.left+ ClientRect.left,//一般为m_MinRect.left(左)+m_MinRect.right(此为宽)+0
m_MinRect.bottom+m_MinRect.top+ClientRect.top)//同上
);

四、总结

       主要是在非客户区,mousemove消息判断是否在上面,在上面的,就加载过另外一幅图片,当然移开的时候,没有做处理,这是一个没做好的地方。

       还有就是响应NCLeftButtonDown消息,做相应的处理。

参考:1、VC 6 MFC让窗口轻而易举变漂亮

2、VC++自绘窗体界面

3、VC知识库—让窗口轻而易举变漂亮

4、改变CListCtrl、CHeaderCtrl高度、字体、颜色和背景

5、CRect的用法

6、MFC窗口美化知识

7、自会边框 界面开发

你可能感兴趣的:(SDK,/,MFC)