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();
}
有了这几块,再加上漂亮的图片与动画,控制一下按钮的逻辑就基本上能做个比较满意的界面了。