搜档网
当前位置:搜档网 › VC 内存绘图

VC 内存绘图

VC 内存绘图
VC 内存绘图

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);

相关主题