漂亮界面-给窗口添加背景图片

以下测试是基于对话框的应用程序,主窗口对应的类为CTestDlg。

1、添加bitmap资源IDB_BITMAP_BK,大小为899*631(本例中截取的window media player 的界面)

2、初始化窗口的大小

在OnInitDialog()函数中初始化窗口的大小,大小定义为插入的位图的大小;同时去掉窗体默认的边框显示

BOOL CTestqDlg::OnInitDialog()
{
        ........................................
	// TODO: Add extra initialization here
       //初始化窗口大小,其中插入的背景图片位图大小为899*631
	::SetWindowPos(this->m_hWnd,HWND_BOTTOM,0,0,899,631,SWP_NOZORDER);

	//去掉窗体边框
	ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED);
}

  

2、在CTestDlg.cpp文件中的OnPaint()函数中的else分支中添加代码实现添加背景图片

void CTestqDlg::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
	{
               //以下为新添加的代码
		CPaintDC dc(this);
		CRect rect;
		GetClientRect(&rect);
		
		CDC dcMem;
		dcMem.CreateCompatibleDC(&dc);
		
		CBitmap bmpBackGround;
		bmpBackGround.LoadBitmap(IDB_BITMAP_BK);
		
		BITMAP bitmap;
		bmpBackGround.GetBitmap(&bitmap);
		
		CBitmap* pbmpOld = dcMem.SelectObject(&bmpBackGround);
		dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,
			bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
		
		CDialog::OnPaint();
	}
}

运行后程序效果为:

另外,窗口去掉边框之后,没有拖动功能,现在自己编代码实现,方法为:

添加CTestDlg类的消息WM_LBUTTONDOWN,相应的消息响应函数:

void CTestqDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
        //添加代码
	PostMessage (WM_NCLBUTTONDOWN,   HTCAPTION,   MAKELPARAM(point.x,   point.y)); 
	CDialog::OnLButtonDown(nFlags, point);
}

运行之后,可点击鼠标左键拖动窗口。

posted on 2011-07-25 13:17  MaggieNing  阅读(1237)  评论(0编辑  收藏  举报

导航