现在的位置: 首页 > 综合 > 正文

MFC对话框添加背景图片

2014年10月20日 ⁄ 综合 ⁄ 共 1835字 ⁄ 字号 评论关闭
void CWinProcessDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		//CDialog::OnPaint();
	}
	///////////////////////////////////////
	//给对话框添加背景图片
	CPaintDC   dc(this);

	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP1);

	BITMAP bmp;
	bitmap.GetBitmap(&bmp);   

	CDC dcview;
	dcview.CreateCompatibleDC(&dc);
	dcview.SelectObject(&bitmap);

	CRect rect;
    GetClientRect(&rect);

	dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcview,
		0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
    /////////////////////////////////////////
	////////////////////////////////////////
}


一、CPaintDC dc(this)中的this指针的含义解析

答1:this是指当前窗体对象,dc用带有this指针的构造函数进行构造,是指当前窗口的dc。

答2:用了this指针初始化后,你操作的dc就是当前窗体,也即当前窗体就是你的画布!

答3:每个类都有一个默认指针this指向自己。

答4:就是获取当前窗口的dc而已,可以用这个DC在当前窗口绘图。当然你也可以获取其它窗口的dc,只要传入其它窗口的指针就可以了。

同理CClientDC dc(this);中的this也是这个意思。

其实,控件就是一个子窗口,我们可以通过CClientDC在控件上绘图。参加下面代码:

void CXXXXXDlg::OnBnClickedButton1()  
{  
    // TODO: Add your control notification handler code here  
    CString sTemp;  
    sTemp="我们的爱";  
    CWnd* pWnd1;  
    pWnd1 = GetDlgItem(IDC_STATIC_SEX); //返回控件句柄
    CClientDC dc1(pWnd1);  
    dc1.TextOutW(0,0,sTemp);//在static控件上输出文字  
  
    CClientDC dc2(this);  
    dc2.TextOutW(0,0,sTemp);//在客户区上输出文字  
}  

从上面可以看出,往哪里输出,取决于dc指向,在上面的例子中,dc1指向控件(子窗口),dc2指向对话框窗口(父窗口)。

其实CClientDC dc1(pWnd1);就相当于如下两条语句:

CDC* dc1;

dc1=pWnd1->GetDC();

 当然了,由于现在dc1被定义成指针变量,则dc1.TextOutW(0,0,sTemp);要改成dc1->TextOutW(0,0,sTemp);你懂的。


二、CBitmap &&HBITMAP
&&
BITMAP

CBitmap是代表位图的一个类,包含着位图的属性及对位图的操作,是对HBITMAP的封装;

BITMAP是一个结构体,封装着位图的一些信息;

HBITMAP是位图的句柄。

关联的方式是:

CBitmap bitmap;

HBITMAP hBitmap;

bitmap.LoadBitmap(ID);

bitmap.Attach(hBitmap);

BITMAP bm;

 //此函数获得位图的一些信息,并赋给bm结构体

bitmap.GetBitmap(&bm);



抱歉!评论已关闭.