漂亮界面-给窗口添加背景图片
以下测试是基于对话框的应用程序,主窗口对应的类为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) 编辑 收藏 举报