龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

显示作为窗口或对话框背景的位图(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
// Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CBitmapBkgdDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implem
// 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()
};

  11.进入资源编辑器,在菜单 IDR_MAINFRAME 中添加新的菜单,标题为 Dialog。在菜单 Dialog 中添加新的菜单项,标题为 Bitmap Background,标识符为 ID_BITMAP_BKGND,退出资源编辑器,保存资源文件。

  12.进入 ClassWizard,从下拉列表中选择对象 CMainFrame,从对象列表中选择对象 ID_BITMAP_BKGND,从消息列表中选择消息 COMMAND,点击按钮 Add Function,新函数命名为 OnBitmapBkgnd。在 CMainFrame 的方法 OnBitmapBkgnd 中添加下列代码:

void CMainFrame::OnBitmapBkgnd()
{
CBitmapBkgdDlg dlg;

dlg.DoModal();
}

  13.在源文件 MainFrm.cpp 的顶部添加下列行:

  #include "BitmapBkgdDlg.h"

  14.编译并运行此例子程序。

用法

  当 Windows 初始化对话框时,它发送消息 WM_ERASEBKGND 给对话框的窗口句柄。程序员可以捕捉此消息,以便在应用程序中抹去对话框的背景。在本节中,首先捕捉此消息,接着调用 API 函数 StretchBlt 来将位图(从资源文件中装入)拷贝到对话框的背景上。

  在对话框的方法 OnCtlColor 中,通过设置背景模式为透明来确保对话框中的控制不会“剪补”俭图,从而使得位图看起来好像是绘制在对话框中的,没有静态控制的背景所引起的空白

精彩图集

赞助商链接