为对话框添加背景图片步骤(转载)

来源:互联网 发布:上瘾网络剧1 20集资源 编辑:程序博客网 时间:2024/05/21 17:29

转载,没试过

为对话框添加背景图片步骤

1楼
第一步:
      首先在资源里添加一个BMP格式图片为IDB_BMP_***;

第二步:
       先在头文件中定义已过CBitmap类对象m_BmpBkground,
       CBitmap m_BmpBkground;

第三步:
       在对话框的初始化函数BOOL OnInitDialog()中加载图片
       m_BmpBkground.LoadBitmap(IDB_BMP_***); // 窗体背景图片
      
        //////////////////////////////////////////////////////////////////////////////////////////////
第四步:
     绘制图片界面,把以下的代码添加到OnPaint()函数中的else函数体中,并且去除 CDialog::OnPaint(); //一定要去掉该句
     (1).先获取客户区域的大小.
CRect rect;
GetClientRect(&rect);
     
      (2).定义设备环境类对象//环境设备类主要用于图形输出.
CPaintDC dc(this); //对话框的dc
CDC dcMem;
 
  (3).查询获取图像的相关信息,。返回的信息存放在pBitMap指向的BITMAP结构中.
///本GetBitmap()函数用于查看CBitmap对象的信息。返回的信息存放在pBitMap指向的BITMAP结构中
BITMAP bitMap;
m_BmpBkground.GetBitmap(&bitMap);
       
      (4).产生与pDC指定设备兼容的设备上下文内存
     dcMem.CreateCompatibleDC(&dc);   //产生与pDC指定设备兼容的设备上下文内存
      
       (5).将背景位图选入内存dc中,并将内存dc中的位图拉伸显示在对话框的dc中
         CBitmap *pbmpOld=dcMem.SelectObject(&m_BmpBkground); //将背景位图选入内存dc中
 dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY); 
     //将内存dc中的位图拉伸显示在对话框的dc中
//将源矩形中的位图拷贝到目标矩形中,如果有必要,可以扩展或压缩该位图使其与目标矩形尺寸吻合



例子:我的程序中OnPaint()函数:
void CBackgroundDlg::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(); //一定要去掉该句

//第一步,先获取客户区域的大小.
CRect rect;
GetClientRect(&rect);


CPaintDC dc(this); //对话框的dc
CDC dcMem;
//环境设备类主要用于图形输出.


//第二步:查询获取图像的相关信息,。返回的信息存放在pBitMap指向的BITMAP结构中.
///本GetBitmap()函数用于查看CBitmap对象的信息。返回的信息存放在pBitMap指向的BITMAP结构中
BITMAP bitMap;
m_bmpBackground.GetBitmap(&bitMap);

dcMem.CreateCompatibleDC(&dc);   //产生与pDC指定设备兼容的设备上下文内存
        CBitmap *pbmpOld=dcMem.SelectObject(&m_bmpBackground); //将背景位图选入内存dc中
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY); 
     //将内存dc中的位图拉伸显示在对话框的dc中
//将源矩形中的位图拷贝到目标矩形中,如果有必要,可以扩展或压缩该位图使其与目标矩形尺寸吻合
//dc.BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);
}
}

2楼
*********重要补充:去除边框************
第一:首先给对话框属性设置中的Style为Border为thin.

第二:还须去除Title bar,去除Title bar的方法有
 1).在对话框设置属性中Style属性全部不选,则对话框不能响应系统菜单消息,
 即不能鼠标左击移动,则可以添加左键消息WM_LBUTTONDOWN,然后在生成
 的函数中添加代码,如下:
 void CPlayListDlg::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));
//向系统发送HTCAPTION消息,让系统以为鼠标点在标题栏上
 CDialog::OnLButtonDown(nFlags, point);
 }
 
 2).在对话框设置属性中Style不去除默认的四项.则须在OnInitDialog()中添加语句
   ModifyStyle( WS_CAPTION, WS_MINIMIZEBOX, SWP_DRAWFRAME );

3楼
**************************************
 再次总结
//////////////////////////////////////
 各界面背景的添加
因为通过程序对界面重绘比较复杂,而且并不能实现理想的效果,而通过为程序对话框添加背景图片,可以实现精美的界面。而图片可以通过众多功能强大的图片处理工具软件进行处理而得到理想效果。
具体实现步骤如下:
(1)选取与框架形式,软件风格能够较好搭配的BMP格式图片。将其导入到程序位图资源文件夹内。为图片重新命名便于区分使用。
(2)在需要添加背景图片的对话框的源程序文件中,找到负责对话框绘制的OnPaint()函数,在其函数体内的IF_ELSE结构中的ELSE分支中添加相关操作如下:
1.首先屏蔽掉“CDialog::OnPaint();”这条语句,否则图片不能显示出来。
2.  先获取客户区域的大小.
CRect rect;
GetClientRect(&rect);
3.定义一个CPaintDC类对象dc一个CDC类对象dcMem,主要用于后面的绘制时调用相关函数进行图形输出操作.
4.。定义一个图像类对象并用于获取图片,定义一个图像结构对象用于存储图片信息,其中下面程序代码中IDB_BMP_MAIN为我们要添加的窗体背景图片的ID号
CBitmap m_BmpBkground;
BITMAP m_bitmap;
m_BmpBkground.LoadBitmap(IDB_BMP_MAIN);
m_BmpBkground.GetBitmap(&m_bitmap);
5.调用设备环境类的成员函数产生与pDC指定设备兼容的设备上下文内存,并将背景位图选人内存dc中
dcMem.CreateCompatibleDC(&dc);
CBitmap *pbmpOld=dcMem.SelectObject(&m_BmpBkground);
6. 将内存dc中的位图拉伸显示在对话框的dc中,即将源矩形中的位图拷贝到目标矩形中,如果有必要,可以扩展或压缩该位图使其与目标矩形尺寸吻合。
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);
至此,图片已经可以在对话框上显示了。我们可以在对话框的属性的类型选项中去除工具栏一项,设置边框Border属性为Thin,这样整个对话框界面便实现了与图片很好的结合。

原创粉丝点击