MFC新建子窗口绘图,利用位图设置子窗口的背景

此程序基于vs2013下开发的:


创建MFC基于对话框程序 MFCApplication2;然后新增加对话框程序 m_NewDlg_Info;把对话框样式设置成Chlid,ID为IDD_M_NEWDLG_INFO在 MFCApplication2对话框加载一个图片控件 把ID改为IDC_STATIC_ChildArea

我们需要把新建的子窗口在图片的位置显示,并且大小就是图片的大小,

//将新建的子窗口移动到主窗口图片的位置

在MFCApplication2.h

中定义CRect m_DialogChlid;//来获取当前图片的窗口大小


MFCApplication2.cpp

首先需要添加头文件

#include "m_NewDlg_Info.h"

在BOOL CMFCApplication2Dlg::OnInitDialog()函数添加如下代码

        m_NewDig_Info m_NewDlg_Info;
m_NewDlg_Info.Create(IDD_M_NEWDLG_INFO, this);
      //读取嵌入位置,IDC_STATIC_ChildArea是刚才的PictureControl的ID,m_Dialog 是一个CRect的变量,需要在头文件进行声明。


GetDlgItem(IDC_STATIC_ChildArea)->GetWindowRect(&m_DialogChild);
ScreenToClient(m_DialogChild);


//以下的功能是显示m_NewDlg_Info的内容。为了显示m_NewDlg_Enqiure,可以在相应的处理函数中放入这行代码,并隐藏


//m_NewDialog_Info即可。
m_NewDlg_Info.MoveWindow(m_DialogChild);//将子窗口移动到图片位置
m_NewDlg_Info.ShowWindow(SW_SHOW);//显示子窗口
GetDlgItem(IDC_STATIC_ChildArea)->ShowWindow(FALSE);//将图片窗口隐藏




// TODO:  在此添加额外的初始化代码


return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

m_NewDlg_Info.h文件

class m_NewDlg_Info : public CDialog
{
DECLARE_DYNAMIC(m_NewDlg_Info)


public:
m_NewDlg_Info(CWnd* pParent = NULL);   // 标准构造函数
virtual ~m_NewDlg_Info();
CBrush m_brush;
// 对话框数据
enum { IDD = IDD_M_NEWDLG_INFO };


protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
BOOL m_NewDlg_Info::OnInitDialog();
DECLARE_MESSAGE_MAP()
BOOL m_NewDlg_Info::loadbmp(CString cc);
public:
afx_msg void OnPaint();
};

m_NewDlg_Info.cpp文件

#include "stdafx.h"
#include "MFCApplication2.h"
#include "m_NewDlg_Info.h"
#include "afxdialogex.h"
#include "afx.h"


// m_NewDlg_Info 对话框
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif


IMPLEMENT_DYNAMIC(m_NewDlg_Info, CDialog)


m_NewDlg_Info::m_NewDlg_Info(CWnd* pParent /*=NULL*/)
: CDialog(m_NewDlg_Info::IDD, pParent)
{


}


m_NewDlg_Info::~m_NewDlg_Info()
{
}


void m_NewDlg_Info::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BOOL m_NewDlg_Info::OnInitDialog()
{
CDialog::OnInitDialog();


/// TODO: Add your control notification handler code here



return true;


}




BEGIN_MESSAGE_MAP(m_NewDlg_Info, CDialog)
ON_WM_CTLCOLOR()
ON_WM_PAINT()
END_MESSAGE_MAP()




// m_NewDlg_Info 消息处理程序

HBITMAP bit;
HDC MemDC; 
int w, h; 
CString cc;
BOOL m_NewDlg_Info::loadbmp(CString cc){


DeleteObject(bit);
bit = (HBITMAP)LoadImage(AfxGetInstanceHandle(), cc, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if (bit == NULL)

return FALSE; 

DIBSECTION ds;
BITMAPINFOHEADER &bm = ds.dsBmih; 
GetObject(bit, sizeof(ds), &ds);
w = bm.biWidth;
h = bm.biHeight;


return TRUE;
}


void m_NewDlg_Info::OnPaint()
{

CPaintDC dc(this); // device context for painting
// TODO:  在此处添加消息处理程序代码
// 不为绘图消息调用 CDialog::OnPaint()
m_NewDlg_Info bmpw;
MemDC = CreateCompatibleDC(dc.m_hDC); 
cc = "F:/bitmap1.bmp";//图片路径
if (bmpw.loadbmp(cc) == FALSE){
AfxMessageBox(cc+" not  finding!");
return;
}
SelectObject(MemDC,bit);
BitBlt(dc.m_hDC,0,0,w,h,MemDC,0,0,SRCCOPY);
DeleteDC(MemDC);
HPEN pen = CreatePen(PS_SOLID, 10, RGB(255, 0, 0));
dc.SelectObject(&pen);
dc.MoveTo(0, 0);
dc.LineTo(100, 100);






}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值