漂亮界面-给窗口添加背景图片
以下测试是基于对话框的应用程序,主窗口对应的类为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 阅读(1258) 评论(0) 收藏 举报
浙公网安备 33010602011771号