一、界面分析
主要是把数据放到合适的位置,并且获取窗口的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让窗口轻而易举变漂亮
4、改变CListCtrl、CHeaderCtrl高度、字体、颜色和背景
5、CRect的用法
本文介绍了如何使用VC 6 MFC框架轻松美化窗口界面,通过分析界面布局、交互响应和数据处理,利用 StretchBlt() 函数显示图片,以及在非客户区处理WM_NCMOUSEMOVE和WM_NCLBUTTONDOWN消息,实现窗口美化效果。同时提到在窗口边框自定义和CRect等MFC组件应用上的知识。

1792

被折叠的 条评论
为什么被折叠?



