MFC新建子窗口绘图,利用位图设置子窗口的背景
来源:互联网 发布:渭南市广电网络张云 编辑:程序博客网 时间:2024/06/06 04:52
此程序基于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);
}
- MFC新建子窗口绘图,利用位图设置子窗口的背景
- MFC为子窗口绘制透明背景
- MFC子窗口
- MFC添加子窗口
- 窗口-》子窗口,子窗口-》浮动窗口(MFC)
- windowsSDK利用子窗口控件设置窗口透明
- MFC如何在父窗口的指定位置创建子窗口,及border边框属性设置
- MFC同源子窗口的实现
- MFC操作父窗口的子控件
- MFC操作父窗口的子控件
- 通过按钮控件实现MDI新建子窗口(MFC自动生成的视图、文档、子框架共用)
- 关于MFC中 父窗口与子窗口 子窗口与子窗口之间的信息传递及控制
- MFC中, 子窗口的值传递给父窗口
- MFC中父窗口和子窗口消息的传递
- 在父窗口的中间位置显示子窗口 MFC
- vs mfc 点击父窗口的按钮,弹出子窗口
- VS2010 MFC点击父窗口的按钮,弹出子窗口
- vs mfc 点击父窗口的按钮,弹出子窗口
- PHP服务器搭建之 WAMP 和 LAMP
- Java 文件上传组件 Apache Commons FileUpload 应用指南(二)——FileUpload如何工作?
- 切邮件界面须知 table布局万岁 京东邮件举例
- 关于iOS7的适配问题
- HDU 4771 Stealing Harry Potter's Precious(bfs+dfs)
- MFC新建子窗口绘图,利用位图设置子窗口的背景
- 有下界最大流问题
- Jetty中添加额外的jar包
- [重要]jQuery的选择器
- 强大的字符串函数 next_permutatiom()
- Matlab load & global 变量 & length( ) 函数 & msgbox( )函数
- java中集合类特征
- 字符串分割函数StringTokenizer与strtok,strsep的比较
- Android进程间通信与数据共享(ppt)