如何将对话框背景设置为一幅位图文件呀
解决方案 »
- 服务程序权限问题,启动solidwork程序
- CArchive类的声明中,friend CArchive& AFXAPI operator<<为什么要用友元?
- 请问BCGControl pro的MFC版本是否支持PNG换肤?
- 在阻塞问题上阻塞了
- 是否有书介绍这些函数集?
- 关于mini2440的视频监控
- 在标题栏加入动画怎么实现?
- 请问一下,那里有写COM比较经典的数,要是电子版的.谢谢啦!
- ACCESS2000的日期字段的默认值为NOW()函数时,函数返回值可能会含"下午"这样的中文字,如何去掉它?
- 过节啦,发红包啦,每人10分,多贴无效,快来抢呀.
- 从CWnd继承下来得自定义控件CMyChart为什么不能响应鼠标时间而只能响应绘制时间
- 怎样通过一个已运行的应用程序,把另一个系统中的未运行应用程序启动
2.进入资源编辑器并创建新的对话框模板。在对话框中,添加几个静态文本域和编辑域,以及几个单选按钮和列表框。对话框的实际组成并不重要,只要能够覆盖部分位图就可以了。
3.选择 ClassWizard,为刚创建的对话框模板创建对话框类,新类命名为 CBitmapBkgdDlg。
4.在资源编辑器中创建新的位图。
5.进入 ClassWizard,从下拉列表中选择 CBitmapBkgdDlg,从对象列表中选择对象 CBitmapBkgdDlg,从消息列表中选择消息 WM_INITDIALOG,点击按钮 Add Function,在 CBitmapBkgdDlg 的方法 OnInitDialog 中添加下列代码:
BOOL CBitmapBkgdDlg::OnInitDialog()
{
CBitmap * pBmpOld;
RECT rectClient;
VERIFY(m_brush=(HBRUSH)GetStockObject(HOLLOW_BRUSH));
VERIFY(m_Bitmap.LoadBitmap(IDB_BITMAP1)); m_Bitmap.GetObject(sizeof(BITMAP),&m_bmInfo);
GetClientRect(&rectClient);
m_size.cx=rectClient.right;
m_size.cy=rectClient.bottom;
m_pt.x=rectClient.left;
m_pt.y=rectClient.top;
CClientDC dc(this);
VERIFY(m_dcMem.CreateCompatibleDC(&dc));
VERIFY(pBmpOld=m_dcMem.SelectObject(&m_Bitmap));
VERIFY(m_hBmpOld=(HBITMAP)pBmpOld->GetSafeHandle()); return TRUE; // return TRUE unless you set the focus to a control
} 6.接着,在 ClassWizard 中,从对象列表中选择对象 CBitmapBkgdDlg,从消息列表中选择消息 WM_CTLCOLOR,点击按钮 Add Function,在 CBitmapBkgdDlg 的方法 OnCtlColor 中添加下列代码:HBRUSH CBitmapBkgdDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT); return m_brush;
} 7.接着,在 ClassWizard 中,从对象列表中选择对象 CBitmapBkgdDlg,从消息列表中选择消息 WM_DESTROY,点击按钮 Add Function,在 CBitmapBkgdDlg 的方法 OnDestroy 中添加下列代码:void CBitmapBkgdDlg::OnDestroy()
{
CDialog::OnDestroy(); ASSERT(m_hBmpOld);
VERIFY(m_dcMem.SelectObject(CBitmap::FromHandle(m_hBmpOld))); m_Bitmap.DeleteObject();
} 8.编辑 CBitmapBkgdDlg 的消息映射如下,添加的新行用暗红色字体表示:BEGIN_MESSAGE_MAP(CBitmapBkgdDlg, CDialog)
//{{AFX_MSG_MAP(CBitmapBkgdDlg)
ON_WM_CTLCOLOR()
ON_WM_DESTROY()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP() 9.在 CBitmapBkgdDlg 的源文件 BitmapBkgdDlg.cpp 中添加下列新方法:BOOL CBitmapBkgdDlg::OnEraseBkgnd(CDC * pDC)
{
pDC->StretchBlt(m_pt.x,m_pt.y,m_size.cx,m_size.cy,&m_dcMem,
0,0,m_bmInfo.bmWidth-1,m_bmInfo.bmHeight-1,SRCCOPY); return TRUE;
} 10.在 CBitmapBkgdDlg 的头文件 BitmapBkgdDlg.h 中做下列修改,用暗红色字体表示。class CBitmapBkgdDlg : public CDialog
{
protected:
CDC m_dcMem;
CBitmap m_Bitmap;
HBITMAP m_hBmpOld;
HBRUSH m_brush;
BITMAP m_bmInfo;
CPoint m_pt;
CSize m_size;// Construction
public:
CBitmapBkgdDlg(CWnd* pParent = NULL); // standard constructor// Dialog Data
//{{AFX_DATA(CBitmapBkgdDlg)
enum { IDD = IDD_DIALOG1 };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CBitmapBkgdDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL// Implementation
protected: // Generated message map functions
//{{AFX_MSG(CBitmapBkgdDlg)
virtual BOOL OnInitDialog();
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
afx_msg void OnDestroy();
virtual BOOL OnEraseBkgnd(CDC * pDC);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};