QQ登录

只需一步,快速开始

22上位机VC MFC设计畸形的程序界面

[ 复制链接 ]
22上位机VC MFC设计畸形的程序界面



功能展示

在我们开发上位机应用例程时,为使程序界面更加美观,可以将程序界面设计成各种不规则的图形,我们当前实例就实现了利用位图设计畸形的程序界面,效果如图

22上位机VC MFC设计畸形的程序界面

22上位机VC MFC设计畸形的程序界面


要点提示

利用位图设计不规则窗体的主要思路是把想去除的区域设成,然后利用GetPixe函数去除背景色,将不是背景色的区域用CombineRgn函数连接起来,最后用SetWindowRgn函数设置窗口的区域。



实现功能

1.新建一个对话框的应用程序

2.添加一个位图做为程序界面的背景

3.在程序对话框的OnInitDialog()函数中实现实体的不规则效果

        CBitmap        bitmap;

        BITMAP bm;

        bitmap.LoadBitmap(IDB_BITMAP1);        

        bitmap.GetBitmap(&bm);

        SetWindowPos(&wndTop,0,0,bm.bmWidth,bm.bmHeight,SWP_NOMOVE);        

CDC *pDC = GetDC(); //获得设备上下文

        CDC         memDC; //声明位图对象

        CBitmap* bmp = NULL;

        COLORREF col;

        CRect rc;

        int x, y;

        CRgn rgn, tmp;

        GetWindowRect(&rc); //获得窗体区域

        memDC.CreateCompatibleDC(pDC); //创建与内存兼容的设备上下文

        bmp = memDC.SelectObject(&bitmap);

        rgn.CreateRectRgn(0, 0, rc.Width(), rc.Height()); //初始化区域

        //计算得到区域

        for(x=0; x<=rc.Width(); x++)

        {

                for(y=0; y<=rc.Height(); y++)

                {

                        //将背景部分去掉

                        col = memDC.GetPixel(x, y); //得到像素颜色

                        if(col == RGB(255,255,255)) //如果是背景颜色

                        {

                                tmp.CreateRectRgn(x, y, x+1, y+1); //创建区域

                                rgn.CombineRgn(&rgn, &tmp,RGN_XOR ); //去除相互重叠的区域

                                tmp.DeleteObject(); //删除区域对象

                        }

                }

        }

        SetWindowRgn((HRGN)rgn,TRUE); //设置窗体为区域的形状

4.添加WM_CTLCOLOR消息,在消息的处理函数体中完成窗体的背景绘制

HBRUSH CGkbc8Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

        

        // TODO: Change any attributes of the DC here

        CBitmap BKGround;

        BKGround.LoadBitmap(IDB_BITMAP1);

        if (nCtlColor==CTLCOLOR_DLG)

        {

                CBrush Brush(&BKGround);                //定义一个位图画刷

                CRect rect;

                GetClientRect(rect);

                pDC->SelectObject(&Brush);                //选中画刷

                pDC->FillRect(rect,&Brush);                //填充客户区域

                return Brush;

        }

        else        

                hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

        

        // TODO: Return a different brush if the default is not desired

        return hbr;

}



下面我们来演示整个功能实现的过程




源码及视频下载
(仅在电脑可见)
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:22.上位机VC MFC设计畸形的程序界面.rar 
文件大小:139.06 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!










回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索