MFC界面制作

来源:互联网 发布:阿里云香港速度怎么样 编辑:程序博客网 时间:2024/05/16 12:18

MFC界面制作,做的比较low

1、dialog边框的绘制



  CDC* pWinDC = GetWindowDC();
    if (pWinDC)
         DrawBorder(pWinDC);
  ReleaseDC(pWinDC);


void DrawBorder(CDC *pDC)
{
    if (m_hWnd)
    {
        CBrush Brush(RGB(42, 142, 0));//定义画刷RGB颜色
        CBrush* pOldBrush = pDC->SelectObject(&Brush);//之前的画刷颜色


        CRect rtWnd;
        GetWindowRect(&rtWnd);//获取当前dialog


        CPoint point;
        //填充顶部框架
        point.x = rtWnd.Width();
        point.y = GetSystemMetrics(SM_CYEDGE);//线的粗线
        pDC->PatBlt(0, 0, point.x, point.y, PATCOPY);
        //填充左侧框架
        point.x = GetSystemMetrics(SM_CXFIXEDFRAME);
        point.y = rtWnd.Height();
        pDC->PatBlt(0, 0, point.x, point.y, PATCOPY);
        //填充底部框架
        point.x = rtWnd.Width();
        point.y = GetSystemMetrics(SM_CYEDGE);
        pDC->PatBlt(0, rtWnd.Height() - point.y, point.x, point.y, PATCOPY);
        //填充右侧框架
        point.x = GetSystemMetrics(SM_CXFIXEDFRAME);
        point.y = rtWnd.Height();
        pDC->PatBlt(rtWnd.Width() - point.x, 0, point.x, point.y, PATCOPY);
    }
}


2.加载gif图片
(1)通过控件加载gif
1、你的对话框中加入一个静态文本控件(Static Text)或图片控件(Picture Control),Group Box也可以;   
2、给控件的ID改个名字如IDC_MYPICTURE;   
3、利用ClassWizard给控件添加变量。如:Category-Control,Variable type-CStatic;   
4、在对话框的头文件中用CPictureEx替换CStatic(当然不要忘记在你的工程中加入PictureEx.h和PictureEx.cpp,并#include "PictureEx.h")
  
5、在OnInitDialog(或者其他什么你喜欢的地方)加入下面的代码:   


if ( m_gifCtrl.Load(_T("mypicture.gif")))   //文件的路径,用相对路径或者绝对路径都行  
     m_gifCtrl.Draw();   


 见附件1;
(2)停止gif及重绘图片控件上的图片


    m_gifCtrl.UnLoad();//卸载
    //清空IDC_PICTURE里的图片
    CStatic* pStatic = (CStatic*)GetDlgItem(IDC_PICTURE);
    pStatic->SetBitmap(NULL);
    this->RedrawWindow();


注意:一定要关连控件,不然后报错
 DDX_Control(pDX, IDC_PICTURE, m_gifCtrl);


3.button按钮加图片,点击换图片。
CControlButton 控制按钮类,继承于CButton


//调用处
LoadBtPicture(&m_BtButtonMin, IDB_BITMAP_MIN_BT);


//函数    bitMap为IDB_BITMAP_MIN_BT 资源
void CBoxSingleView::LoadBtPicture(CControlButton *m_Button, int bitMap)//
{
    CRect crect;
    m_Button->GetWindowRect(crect); //获取按钮窗口矩形区域
    ScreenToClient(crect); //转换成客户区域
    m_Button->SetBackBmp(IDB_BACKGROUND, crect); //设置按钮的背景图片,跟主窗口的背景图片一样
    m_Button->SetRgnMask(bitMap, TRUE);        //设置响应区域,TRUE表示使用掩码
    m_Button->SetMaskBitmapId(bitMap, TRUE);   //设置掩码图片
    m_Button->SetBitmapId(bitMap, bitMap, bitMap, bitMap);
}


注意:一定要关连控件,不然后报错
 DDX_Control(pDX, ID_BUTTON_MIN_BT, m_BtButtonMin);


见附件2


4.添加背景图片




void LoadHeadPicture()
{


    CPaintDC dc(this);
    CBitmap bmpBk;
    BOOL bRe = bmpBk.LoadBitmap(IDB_BITMAP_HEAD);


    BITMAP bmpSize;
    bmpBk.GetBitmap(&bmpSize);//获取背景图片尺寸   


    CRect rect;
    GetDlgItem(IDC_PICTURE)->GetWindowRect(&rect);


    CDC dcMem;
    dcMem.CreateCompatibleDC(&dc);
    dcMem.SelectObject(&bmpBk);
    int mode = SetStretchBltMode(dcMem, COLORONCOLOR); //设置不失真缩放
    dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &dcMem, 0, 0, bmpSize.bmWidth, bmpSize.bmHeight, SRCCOPY);//放上图片


    bmpBk.DeleteObject();
    dcMem.DeleteDC();
}


有了这几块,再加上漂亮的图片与动画,控制一下按钮的逻辑就基本上能做个比较满意的界面了。