MFC内存绘图并显示在picture ctrol 上
标签:类表格图表VC 窗口绘图窗口绘图
2014-04-21 15:14 2089人阅读评论(0) 收藏举报
分类:
VC 窗口绘图
版权声明:本文为博主原创文章,未经博主允许不得转载。
我英语不好,程序中一些使用英文命名的变量或者类可能跟实际的意思有所差异,请大家谅解。
// 先上传代码
//My_Draw .h 文件
#pragma once
#include
#define TEXT_AREA_WIDTH (60) ///<文字区宽度,单位像素
#define X_AXIS_GRAD (600) ///< X 轴刻度值
#define Y_AXIS_GRAD (50) ///< X 轴刻度值
class CMy_Draw:public CStatic
{
public:
CMy_Draw(void);
virtual ~CMy_Draw(void);
struct
{
unsigned char Show_Max_Grid :1; // 是否显示大网格
unsigned char Show_Min_Grid :1; // 是否显示小网格
unsigned char Draw_Enable :1; // 放大/缩小使能位
unsigned char Draw_Line_Choice :1; // 线被选择
unsigned char LButton_Down_Flag :1; // 鼠标左键按下标志
unsigned char LButton_Up_Flag :1; // 鼠标左键弹起标志
unsigned char LButton_Double_Down_Flag :1; // 鼠标左键双击按下标志
}Bool_Flag;
unsigned int TextAreaWidth; //左边绘制坐标标签宽度
int xAxisGrad,yAxisGrad; //x方向和y方向刻度数量
unsigned short xMaxGrad,xMinGrad; //x 刻度间隔
unsigned short yMaxGrad,yMinGrad;
int Limit_Min,Limit_Max;
POINT Mouse_Current_Point; // 鼠标当前坐标
POINT Button_Down_Point; // 记录鼠标左键按下时的坐标POINT LButton_Double_Down_Point; // 记录鼠标左键双击按下的坐标POINT Old_LButton_Double_Down_Point;
// 画笔列表
CPen* pBrack; // 黑色画笔
CPen* pBlue; // 蓝色画笔
CPen* pYellow; // 黄色画笔
CPen* pGren; // 绿色画笔
CPen* pPink; // 紫色画笔
CPen* pRed; // 红色画笔
CPen* pGray; // 灰色画笔
CRect Draw_Size;
CDC memDC;
CBitmap memBitmap;
CBitmap* pOldBmp;
unsigned short SheetMaxH;
CWnd *pWnd;
void Draw();
void Drawing(CDC *pDC); // 绘制图表
void Draw_xAxis(CDC *pDC);
void Draw_yAxis(CDC *pDC);
void Draw_Cross_Cursor(CDC *pDC);
void CMy_Draw::SaveBmpToFile();
protected:
public:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
};
//My_Draw .CPP 文件
#include "StdAfx.h"
#include "My_Draw.h"
#include "conio.h"
#include "direct.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CMy_Draw::CMy_Draw(void)
{
Bool_Flag.Show_Max_Grid = true;
Bool_Flag.Show_Min_Grid = false;
Bool_Flag.Draw_Enable = false;
Bool_Flag.Draw_Line_Choice = false;
Bool_Flag.LButton_Down_Flag = false;
Bool_Flag.LButton_Up_Flag = false;
Bool_Flag.LButton_Double_Down_Flag = false;
TextAreaWidth = TEXT_AREA_WIDTH;
xAxisGrad = X_AXIS_GRAD;
yAxisGrad = Y_AXIS_GRAD;
pBrack = new CPen(); // 黑色画笔
pBlue = new CPen(); // 蓝色画笔
pYellow = new CPen(); // 黄色画笔
pGren = new CPen(); // 绿色画笔
pRed = new CPen(); // 红色画笔
pPink = new CPen(); // 紫色画笔
pGray = new CPen(); // 灰色画笔
pBrack->CreatePen(PS_SOLID,1,RGB(0,0,0));
pBlue->CreatePen(PS_SOLID,1,RGB(0,0,255));
pYellow->CreatePen(PS_SOLID,1,RGB(155,125,0));
pGren->CreatePen(PS_SOLID,1,RGB(0,255,0));
pRed->CreatePen(PS_SOLID,1,RGB(255,0,0));
pPink->CreatePen(PS_SOLID,1,RGB(255,0,255));
pGray->CreatePen(PS_DOT,1,RGB(145,105,105)); //灰色虚线
#ifdef _DEBUG
AllocConsole();
_cprintf("Debuging....\r\n");
#endif
}
CMy_Draw::~CMy_Draw(void)
{
delete pBrack; // 黑色画笔
delete pBlue; // 蓝色画笔
delete pYellow; // 黄色画笔
delete pGren; // 绿色画笔
delete pRed; // 红色画笔
delete pPink; // 紫色画笔
delete pGray; // 灰色画笔
}
BEGIN_MESSAGE_MAP(CMy_Draw, CStatic)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_WM_LBUTTONDBLCLK()
END_MESSAGE_MAP()
void CMy_Draw::SaveBmpToFile() // 保存图表为Bmp 图片
{
CFileDialog dlg(false,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "位图文件(*.bmp)|*.bmp|",NULL);
if (dlg.DoModal()!= IDOK) return;
CString filename = dlg.GetPathName() + ".bmp";
CWnd* m_bmpShow=(CWnd*)this;
CDC *pdc = m_bmpShow->GetDC();
CImage imag;
CRect rect;
m_bmpShow->GetWindowRect(&rect);
imag.Create(rect.Width(),rect.Height(),32);
::BitBlt(imag.GetDC(),0,0,rect.Width(),rect.Height(),pdc->m_hDC,0,0,SRCCOPY);//拷贝图片HRESULT hResult = imag.Save(filename);
if (FAILED(hResult))
MessageBox(_T("保存图像文件失败!"));
else
MessageBox(_T("保存图像文件成功!"));
ReleaseDC(pdc);
imag.ReleaseDC();
return;
// CFileDialog dlg(false,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
// "位图文件(*.bmp)|*.bmp|",NULL);
//
// if (dlg.DoModal()!= IDOK) return;
// CString filename = dlg.GetFileName() + ".bmp";
// // 获取绘制坐标的文本框
// this->GetClientRect(&Draw_Size); // 获取窗口大小
// CDC *pDC = this->GetDC(); // 获取dc
// this->Invalidate();
// this->UpdateWindow();
//
// //内存绘图
// memDC.CreateCompatibleDC(pDC);
// memBitmap.CreateCompatibleBitmap(pDC,Draw_Size.right,Draw_Size.bottom);
// pOldBmp = memDC.SelectObject(&memBitmap);
//
memDC.BitBlt(Draw_Size.left,Draw_Size.top,Draw_Size.right,Draw_Size.bottom,pDC,0,0,SRC COPY);
// Drawing(&memDC); // 绘制坐标
//
//
// BITMAP bmp;
// memBitmap.GetBitmap(&bmp); // 获得位图信息
// FILE *fp;
// fopen_s(&fp,filename, "w+b");
// BITMAPINFOHEADER bih = {0}; // 位图信息头
// bih.biBitCount = bmp.bmBitsPixel; // 每个像素字节大小
// bih.biCompression = BI_RGB;
// bih.biHeight = bmp.bmHeight; // 高度
// bih.biPlanes = 1;
// bih.biSize = sizeof(BITMAPINFOHEADER);
// bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight; // 图像数据大小
// bih.biWidth = bmp.bmWidth; // 宽度
// BITMAPFILEHEADER bfh = {0}; // 位图文件头
// bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); // 到位图数据的偏移量
// bfh.bfSize = bfh.bfOffBits + bmp.bmWidthBytes * bmp.bmHeight; // 文件总的大小
// bfh.bfType = (WORD)0x4d42;
// fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), fp); // 写入位图文件头
// fwrite(&bih, 1, sizeof(BITMAPINFOHEADER), fp); // 写入位图信息头
// byte * p = new byte[bmp.bmWidthBytes * bmp.bmHeight]; // 申请内存保存位图数据
// GetDIBits(memDC.m_hDC, (HBITMAP) memBitmap.m_hObject, 0, Draw_Size.Height(), p, (LPBITMAPINFO) &bih, DIB_RGB_COLORS); //获取位图数据
// fwrite(p, 1, bmp.bmWidthBytes * bmp.bmHeight, fp); // 写入位图数据
// delete [] p;
// fclose(fp);
//
// memDC.SelectObject(pOldBmp);
// memDC.DeleteDC(); // 释放Dc
// memBitmap.DeleteObject();
}
void CMy_Draw::Draw()
{
this->Invalidate();
this->UpdateWindow();
this->GetClientRect(&Draw_Size); // 获取窗口大小
CDC *pDC = this->GetDC(); // 获取当前dc
//内存绘图
memDC.CreateCompatibleDC(pDC);
memBitmap.CreateCompatibleBitmap(pDC,Draw_Size.right,Draw_Size.bottom); //指定高、宽和色彩组合以满足函数调用的需要
pOldBmp = memDC.SelectObject(&memBitmap);
memDC.BitBlt(Draw_Size.left,Draw_Size.top,Draw_Size.right,Draw_Size.bottom,pDC,0,0,SRC COPY);
Drawing(&memDC); // 绘制坐标
pDC->BitBlt(Draw_Size.left,Draw_Size.top,Draw_Size.right,Draw_Size.bottom,&memDC,0,0,S RCCOPY); //拷贝内存位图到当前设备pDC
memDC.SelectObject(pOldBmp);//换回原来的bmp
memDC.DeleteDC();
memBitmap.DeleteObject();
ReleaseDC(pDC);
}
void CMy_Draw::Drawing(CDC *pDC)
{
pDC->SelectObject(pBrack); // 选择当前画笔颜色
pDC->Rectangle(0,0,Draw_Size.Width(),Draw_Size.Height()); // 设定绘制范围
//绘出文字
pDC->SetTextColor(RGB(0,25,255));
pDC->SetBkMode(TRANSPARENT); ////设置为透明模式
unsigned int xPosBase = 8;
unsigned int yPosBase = 100,yPosStep = 20,yPos;
//绘制纵坐标标签
yPos = yPosBase; pDC->TextOutA(xPosBase,yPos,"输");
yPos = yPos + yPosStep; pDC->TextOutA(xPosBase,yPos,"出");
yPos = yPos + yPosStep; pDC->TextOutA(xPosBase,yPos,"电");
yPos = yPos + yPosStep; pDC->TextOutA(xPosBase,yPos,"压");
yPos = yPos + yPosStep; pDC->TextOutA(xPosBase + 6,yPos,"|");
yPos = yPos + yPosStep; pDC->TextOutA(xPosBase,yPos,"单");
yPos = yPos + yPosStep; pDC->TextOutA(xPosBase,yPos,"位");
yPos = yPos + yPosStep; pDC->TextOutA(xPosBase - 2,yPos,"(V)");
//绘制横坐标标签
pDC->TextOutA(Draw_Size.Width()/2-40,Draw_Size.Height()-20,"行程--单位(%)");
//横坐标位置,纵向位置
SheetMaxH = Draw_Size.Height()-TextAreaWidth;
Draw_xAxis(pDC);
Draw_yAxis(pDC);
Draw_Cross_Cursor(pDC);
ReleaseDC(pDC); //感觉释放多了
}
void CMy_Draw::Draw_xAxis(CDC *pDC)
{
CString StrScale; // 转换刻度字符串存放点
unsigned short drawCount; // 画王格计数
unsigned short temp;
unsigned int girdSize;
unsigned int xPicRight = Draw_Size.Width() - 10;//图片右边位置
//绘制x轴坐标
pDC->MoveTo(TextAreaWidth,SheetMaxH);
pDC->LineTo(xPicRight,SheetMaxH);
//绘制箭头
pDC->LineTo(xPicRight -10,SheetMaxH-5);
pDC->MoveTo(xPicRight,SheetMaxH);
pDC->LineTo(xPicRight -10,SheetMaxH+5);
//绘制x轴刻度
drawCount = 0;
if(xAxisGrad > xPicRight)
{
xAxisGrad/=10;
girdSize = 10;
}
else
girdSize = 1;
//原点位置为(TextAreaWidth,SheetMaxH)
//x 范围TextAreaWidth -- xPicRight -20
//数量xAxisGrad
//步长xMaxGrad
xMaxGrad = int((xPicRight - TextAreaWidth) / xAxisGrad);
for(int i=TextAreaWidth; i<=xPicRight - 10; i+=xMaxGrad)
{
pDC->SelectObject(pBrack);
pDC->MoveTo(i,SheetMaxH); //移到刻度位置点,
//计算大刻度步长
if(xMaxGrad<2)
temp = xMaxGrad*100;
else
temp = xMaxGrad*10;
if((i-TextAreaWidth)%temp==0)
{
pDC->LineTo(i,SheetMaxH+10); // 整数刻度,绘制长刻度
//输出对应的文本
if(drawCount < 100)
{
//pDC->SelectObject(font1); //选择当前字体
StrScale.Format(" %d", drawCount*girdSize);
pDC->SetTextColor(RGB(25, 155, 12));
pDC->TextOutA(i-10, SheetMaxH+10, StrScale); //修正文本显示坐标3位数内,显示方式
if(Bool_Flag.Show_Max_Grid)
{
pDC->SelectObject(pGray); //使用虚线灰色画笔
pDC->MoveTo(i,SheetMaxH);
pDC->LineTo(i,20);
}
}
else
{
StrScale.Format(" %d", drawCount*girdSize);
pDC->TextOutA(i-12, SheetMaxH+10, StrScale); //修正文本显示
坐标4位数内,显示方式
if(Bool_Flag.Show_Max_Grid)
{
pDC->SelectObject(pGray); //使用虚线灰色画笔
pDC->MoveTo(i, SheetMaxH);
pDC->LineTo(i, 20);
}
}
}
else
{
pDC->LineTo(i,SheetMaxH+5); //小数刻度,绘制短刻度
}
drawCount++;
}
ReleaseDC(pDC);
}
void CMy_Draw::Draw_yAxis(CDC *pDC)
{
unsigned int drawCount;
CString StrScale; //转换刻度字符串存放点
drawCount = 0;
//绘制y轴坐标
pDC->MoveTo(TextAreaWidth, SheetMaxH);
pDC->LineTo(TextAreaWidth, 10); //箭头前面空出10个像素位置
//绘制箭头
pDC->LineTo(TextAreaWidth-5, 20);
pDC->MoveTo(TextAreaWidth, 10);
pDC->LineTo(TextAreaWidth+5, 20);
//原点(TextAreaWidth, SheetMaxH)
//y 范围SheetMaxH-20
// y 方向数量yAxisGrad
// y 方向步长yMaxGrad
yMaxGrad = int(SheetMaxH / yAxisGrad);
for(int i=SheetMaxH; i>=20; i-=yMaxGrad)
{
pDC->SelectObject(pBrack);
StrScale.Format("%d", drawCount / 10);
pDC->MoveTo(TextAreaWidth, i);
if(drawCount % 10==0)
{
pDC->LineTo(TextAreaWidth-10, i); //整数刻度,绘制长刻度
if(Bool_Flag.Show_Max_Grid)
{
pDC->SelectObject(pGray); //使用实线灰色画笔
pDC->MoveTo(TextAreaWidth, i);
pDC->LineTo(Draw_Size.Width()-10, i);
}
pDC->SetTextColor(RGB(255, 0, 0));
pDC->TextOutA(TextAreaWidth-25, i-6, StrScale+"V"); //输出对应的文本}
else
{
pDC->LineTo(TextAreaWidth-5, i); //小数刻度,绘制短刻度
}
drawCount++;
}
ReleaseDC(pDC);
}
void CMy_Draw::Draw_Cross_Cursor(CDC *pDC)
{
int m_intVoltage;
int m_intAngle;
// 十字光标和显示坐标信息
if(Bool_Flag.LButton_Double_Down_Flag)
{
if((LButton_Double_Down_Point.x > TextAreaWidth)
&&(LButton_Double_Down_Point.x < Draw_Size.Width())
&&(LButton_Double_Down_Point.y > 20)
&&(LButton_Double_Down_Point.y < SheetMaxH))
{
if(Bool_Flag.Draw_Line_Choice)
pDC->SelectObject(pGren);
else
pDC->SelectObject(pRed);
pDC->MoveTo(LButton_Double_Down_Point.x, 1);
pDC->LineTo(LButton_Double_Down_Point.x, SheetMaxH-1);
pDC->MoveTo(TextAreaWidth+1, LButton_Double_Down_Point.y);
pDC->LineTo(Draw_Size.Width()-1,LButton_Double_Down_Point.y);
Old_LButton_Double_Down_Point = LButton_Double_Down_Point;
m_intVoltage = yAxisGrad;
m_intVoltage = (SheetMaxH - LButton_Double_Down_Point.y)/m_intVoltage;
m_intVoltage /= 10;
m_intAngle = xAxisGrad;
m_intAngle = (LButton_Double_Down_Point.x - TextAreaWidth)/m_intAngle; #ifdef _DEBUG
_cprintf("Voltage = %0.2f,Angle = %0.2f\r\n",xAxisGrad,m_intAngle);
#endif
UpdateData(FALSE);
}
}
if(Bool_Flag.LButton_Down_Flag)
{
pDC->SelectObject(pBrack);
pDC->MoveTo(Button_Down_Point);
pDC->LineTo(Mouse_Current_Point.x,Button_Down_Point.y);
pDC->MoveTo(Mouse_Current_Point.x,Button_Down_Point.y);
pDC->LineTo(Mouse_Current_Point);
pDC->MoveTo(Mouse_Current_Point);
pDC->LineTo(Button_Down_Point.x,Mouse_Current_Point.y);
pDC->MoveTo(Button_Down_Point.x,Mouse_Current_Point.y);
pDC->LineTo(Button_Down_Point);
}
ReleaseDC(pDC);
}
void CMy_Draw::OnMouseMove(UINT nFlags, CPoint point) {
// TODO: 在此添加消息处理程序代码和/或调用默认值Mouse_Current_Point = point;
if(Bool_Flag.Draw_Line_Choice)
{
Limit_Min = point.x - 5;
Limit_Max = point.x + 5;
LButton_Double_Down_Point = point;
}
if((Bool_Flag.LButton_Down_Flag)
||(Bool_Flag.LButton_Up_Flag))
Draw();
CStatic::OnMouseMove(nFlags, point);
}
void CMy_Draw::OnLButtonDown(UINT nFlags, CPoint point) {
// TODO: 在此添加消息处理程序代码和/或调用默认值if((Bool_Flag.LButton_Double_Down_Flag)
&&(point.x >= Limit_Min)
&&(point.x <= Limit_Max))
{ //先点过双击且单机点在双击点附近
//改变线条选择状态,改变双击点位置
if(Bool_Flag.Draw_Line_Choice)
Bool_Flag.Draw_Line_Choice = FALSE;
else
Bool_Flag.Draw_Line_Choice = TRUE;
LButton_Double_Down_Point = point;
}
else
{
if((Bool_Flag.LButton_Down_Flag == FALSE)
&&(Bool_Flag.Draw_Line_Choice == FALSE)) {
Bool_Flag.LButton_Down_Flag = true;
Button_Down_Point = point;
}
}
Draw();
CStatic::OnLButtonDown(nFlags, point);
}
void CMy_Draw::OnLButtonUp(UINT nFlags, CPoint point) {
// TODO: 在此添加消息处理程序代码和/或调用默认值if(Bool_Flag.LButton_Down_Flag)
{
Bool_Flag.LButton_Up_Flag = true;
Bool_Flag.LButton_Down_Flag = FALSE;
Draw();
}
CStatic::OnLButtonUp(nFlags, point);
}
void CMy_Draw::OnLButtonDblClk(UINT nFlags, CPoint point) {
// TODO: 在此添加消息处理程序代码和/或调用默认值LButton_Double_Down_Point = point;
Limit_Min = LButton_Double_Down_Point.x - 5;
Limit_Max = LButton_Double_Down_Point.x + 5;
Bool_Flag.LButton_Double_Down_Flag = TRUE;
Draw();
CStatic::OnLButtonDblClk(nFlags, point);
}
现在说明一下过程1. 新建一个MFC 应用程序
2. 选择“基于对话框”
3. 添加一个“Picture 控件”
4. 为控件添加一个变量my_Graw
5. 将源文件包含进来,并在drawBmpDlg.h 中包含#include "My Draw.h"
6. 在drawBmpDlg.h头文件中将刚才声明的Picture 控件变量 CStatic my_Graw ; 改成My_Draw my_Graw;
7. drawBmpDlg.h头文件中定义CRect Draw_Size;
8. drawBmpDlg.cpp中OnInitDialog添加额外代码,窗口大小初始化
GetDlgItem(IDC_DRAW)->GetClientRect(&Draw_Size);//获取控件大小
9. 对对话框添加五个消息函数,具体代码参考drawBmpDlg.cpp中内容
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnBnClickedOk();
7. 在drawBmpDlg.cpp 文件void CMy_ClassDlg::OnPaint() 尾部添加my_Graw.Draw();
8. 编译运行
// drawBmpDlg.h : 头文件
// drawBmpDlg.h : 头文件
//
#pragma once
#include "afxwin.h"
// CdrawBmpDlg 对话框
class CdrawBmpDlg : public CDialogEx
{
// 构造
public:
CdrawBmpDlg(CWnd* pParent = NULL); // 标准构造函数
// 对话框数据
enum { IDD = IDD_DRAWBMP_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
// 绘图窗口
CMy_Draw my_Graw;
CRect Draw_Size;
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnBnClickedOk();
};
// drawBmpDlg.cpp : 实现文件
// drawBmpDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "drawBmpDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于应用程序“关于”菜单项的CAboutDlg 对话框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CdrawBmpDlg 对话框
CdrawBmpDlg::CdrawBmpDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CdrawBmpDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CdrawBmpDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_DRAW, my_Graw);
}
BEGIN_MESSAGE_MAP(CdrawBmpDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_LBUTTONDBLCLK()
ON_WM_MOUSEMOVE()
ON_BN_CLICKED(IDOK, &CdrawBmpDlg::OnBnClickedOk) END_MESSAGE_MAP()
// CdrawBmpDlg 消息处理程序
BOOL CdrawBmpDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);