MFC画图

变量类型:

COLRREF .//颜色类型,适用于保存颜色 (实例1

CPen //画笔类型,系统封装的画笔 (实例1

CRect //类似于Rect结构 (实例1

Rect //用来操作坐标的结构体

CClientDC //用于GDI图像操作在窗口的客户区操作 (实例1

CMenu //用于创建菜单对象,右键弹出贴图菜单等等。。。 (实例 2

CBitmap //封装了图形设备接口GDI 位图,用于操作位图等等。。。。。。 (实例 3

CToolBar //带有一行位图按钮和可选分隔线的控件条。这些按钮可以像普通按钮、核选按钮或单选按钮那样动作 (实例4)

CStatusBar //带有一行文本输出窗格的控件,或者称为指示器。这些输出窗格常被用作消息行和状态指示器。例如:简单解释所选菜单命令的菜单帮助消息行 (实例4

API 函数:

RGB //颜色设置,其中包括几种颜色值(红,绿,蓝) (实例1

CreatePen //画笔初始化函数,适用于画笔初始化 (实例1

GetClientRect //获取窗口的客户区坐标 (实例1

FillRect //填充矩形使用的画笔左侧和顶部边界 (实例1

GetStockObject //画刷的字体及颜色 (实例1

SelectObject //得到指定的对象的功能 (实例1

MoveTo //获取指定的坐标点 (实例1

LineTo //绘制一个指定坐标点除外的图像 (实例1

Rectangle //绘制一个矩形的图像 (实例1

Ellipse //绘制一个椭圆的图像 (实例1

--------------------------------------------------

---------------------------------------------------------------

LoadMenu //用于加载可执行EXE菜单资源文件等等。。(实例 2

AfxThrowResourceException //抛出一个资源异常,创建菜单的时候需要用到。。。(实例 2

GetSubMenu //取得菜单的句柄,下拉式菜单等。。。(实例 2

ASSERT //断言,用于捕捉错误和假设(实例 2

ClientToScreen //把客户区坐标转换成灾屏幕的坐标(实例 2

TrackPopupMenu //在指定的位置显示菜单(菜单可自定义的哦)(实例 2

LoadBitmap //从位图资源中加载一个文件 。。 ( 实例3

ModifyMenu //改变现有菜单项,外观等、行为等、。。 ( 实例3

Create //动态创建数据窗口对象,用于创建窗口 ( 实例4

LoadToolBar //用于加载工具栏资源名称,或者加载工具栏的ID( 实例4

EnableDocking //设定工具栏可以停靠在父窗口中的位置。。自定义( 实例4

DockControlBar //设定控制栏停靠在窗口的框架上( 实例4

SetBarStyle //设置控制栏的风格( 实例4

GetBarStyle //确定目前窗口的风格及设置( 实例4

SetCheck //设置或重置一个单选框按钮或复选框检查状态( 实例5

实例1(实现化图像的功能)

MainFrame头文件中,加入以下代码,记得要在public下哦。

int m_xiankuan; //设置个线宽的变量

COLORREF m_dangqianyanse; //设置个当前颜色的变量

MFC中,CMainFrame.CPP文件中的CMainFrame初始化函数中CMainFrame::CMainFrame() 添加以下代码:

m_dangqianyanse = RGB(0,0,0); //初始化当前颜色

m_xiankuan = 1; //初始化线宽

在菜单项目按钮消息的函数下添加以下代码:

CPen huabi; //设定个画笔变量

CPen *huabizhizhen; //设定个画笔指针

huabi.CreatePen(PS_SOLID, m_xiankuan, m_dangqianyanse); //初始化画笔;

CClientDC dc(this); //设定一个GDI在窗口客户区操作的对象

CRect rect; //设定坐标变量

GetClientRect(&rect); //获取窗口的客户区坐标

dc.FillRect(&rect, CBrush::FromHandle((HBRUSH)::GetStockObject(WHITE_BRUSH))); // 填充画笔多余空间的颜色

huabizhizhen = dc.SelectObject(&huabi); //得到画笔对象的功能

dc.Ellipse(50,30,300,200); //绘制一个椭圆形的图像,里面的值是参数,详解MSDN

dc.SelectObject(huabi); //重新获取画笔对象的功能

dc.Rectangle(50,30,300,200); //绘制一个矩形的图像 里面的值是参数,详解MSDN

dc.MoveTo(50,30); //获取指定坐标点 里面的值是参数,详解MSDN

dc.LineTo(300,200); //绘制指定坐标点除外的图像,也就是线条了。里面的值是参数,详解MSDN

-----------------------------------------------------

------------------------------------------------------------------------------------

实例、2 (让鼠标右键弹出自定义菜单)

在类向导中加入 View类的右键消息WM_RBUTTONDOWN 的一个函数中,加入以下代码、

CMenu dMenu; //设定一个创建于操作菜单的对象

if(!dMenu.LoadMenu(IDR_MENU1)) //加载菜单资源 IDR_MENU1就是菜单的ID

AfxThrowResourceException(); //抛出一个资源异常

CMenu *pPopupMenu = dMenu.GetSubMenu(0); //取得菜单的句柄,0 表示全选

ASSERT(pPopupMenu != NULL); //断言,用于捕捉错误和假设,可省略

ClientToScreen(&point); //把客户区坐标转换成灾屏幕的坐标 point 指的是坐标参数

pPopupMenu>TrackPopupMenu(TPM_CENTERALIGN|TPM_RIGHTBUTTON,point.x ,point.y ,AfxGetMainWnd()); //在指定的位置显示菜单,point.x ,point.y 则表示在鼠标的位置显示。。

(建议、该程序需要在VC++中,经过实例才可以发现从中的过程)

-------------------------------------------

--------------------------------------------------------------------------------------

实例、3 (让鼠标右键菜单实图片美化)

MainFrame头文件中,加入以下代码,记得要在public下哦。

CBitmap zhixian; //设定一个操作位图的变量

CBitmap zhengfang; //设定一个操作位图的变量

CBitmap tuoyuan; //设定一个操作位图的变量

MFC中,CMainFrame.CPP文件中的CMainFrame初始化函数中CMainFrame::CMainFrame() 添加以下代码:

zhixian.LoadBitmap(IDB_ZHIXIAN); //从资源中载入一个位图文件给变量zhixian

zhengfang.LoadBitmap(IDB_ZHENGFANG); //从资源中载入一个位图文件给zhengfang

tuoyuan.LoadBitmap(IDB_TUOYUAN); //从资源中载入一个位图文件给变量tuoyuan

MFC中,CMainFrame类的 菜单对象 WM_INITMENU 对象中添加以下代码:

pMenu>ModifyMenu(ID_GONGJU_ZHIXIAN,MF_BITMAP,ID_GONGJU_ZHIXIAN,&zhixian);

//在菜单项ID_GONGJU_ZHIXIAN界面中显示 zhixian 位图图像

pMenu>ModifyMenu(ID_GONGJU_JUXING,MF_BITMAP,ID_GONGJU_JUXING,&zhengfang);

//在菜单项ID_GONGJU_JUXING界面中显示 zhengfang 位图图像

pMenu>ModifyMenu(ID_GONGJU_TUOYUAN,MF_BITMAP,ID_GONGJU_TUOYUAN,&tuoyuan);

//在菜单项ID_GONGJU_TUOYUAN界面中显示 tuoyuan 位图图像

------------------------------------------------------

--------------------------------------------------------------------------------------------------------------

实例、4 (标准的快捷菜单及状态条)

程序开始前、先打开 查看--资源符号--新建--命名ID 状态条、、ID_ZHUANGTAITIAO, //自定义的状态条

MainFrame头文件中,加入以下代码,记得要在public下哦。

CToolBar gongjulan; //创建按钮快捷菜单控制栏

CStatusBar baocungongjulan; //创建菜单按钮消息命令提示栏

MainFrame.CPP文件中的消息机制响应下加入以下代码:

static UINT IcndicatorIDs[]= 创建一个NINT结构的变量

{

ID_SEPARATOR, //在状态条左边部分生成空白,给菜单命令和工具命令的提示信息留下位置

ID_ZHUANGTAITIAO, //自定义的状态条

ID_INDICATOR_CAPS, //键盘的大小写

ID_INDICATOR_NUM, //数字键

ID_INDICATOR_SCRL, //滚动条键

};

MFC中,CMainFrame类的 菜单对象 WM_CREATE 有窗口都能响应的消息中添加以下代码:

if(!gongjulan.Create(this)||!gongjulan.LoadToolBar(IDR_GONGJULAN))

//判断创建工具条成果与否

return -1; //如果不成功则返回-1

gongjulan.EnableDocking(CBRS_ALIGN_ANY); //如果正常创建成功、则设定该语句允许工具栏处于停靠状态和它在父窗口中停靠的位置

EnableDocking(CBRS_ALIGN_ANY); //允许工具栏处于停靠状态和它在父窗口中停靠的位置CBRS_ALIGN_ANY表示停靠在上边框上

DockControlBar(&gongjulan); //设定工具栏停靠在窗口的框架上

gongjulan.SetBarStyle(gongjulan.GetBarStyle()|CBRS_TOOLTIPS|CBRS_FLYBY);

//确定目前窗口风格的及设置CBRS_TOOLTIPS使工具提示信息,CBRS_FLYBY按下键时把信息在状态条显示出来。。。

if(!baocungongjulan.Create(this)||!baocungongjulan.SetIndicators(IcndicatorIDs,sizeof(IcndicatorIDs)/sizeof(UINT))) //判断是否创建命令信息状态条成功,

return -1; //如果不成功就退出!

-------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------

实例、5

MainFrame头文件中,加入以下代码,记得要在public下哦。

UINT m_gongju; //保存当前工具的使用状况显示

UINT m_gongjuyanse; //保存当前颜色的使用状况显示

在类向导中加入直线IDID_GONGJU_ZHIXIAN 的按钮消息中的 UPDATA_COMMAND_UI 的一个函数中,加入以下代码、

pCmdUI->SetCheck(m_gongju == ID_GONGJU_ZHIXIAN?1:0);

//如果不是等于直线ID的话,那么SetCheck0,则不打勾。。

在类向导中加入直线IDID_GONGJU_JUXING 的按钮消息中的 UPDATA_COMMAND_UI 的一个函数中,加入以下代码、

pCmdUI->SetCheck(m_gongju == ID_GONGJU_JUXING?1:0);

//如果不是等于矩形ID的话,那么SetCheck0,则不打勾。。

在类向导中加入直线IDID_GONGJU_TUOYUA的按钮消息中的 UPDATA_COMMAND_UI 的一个函数中,加入以下代码、

pCmdUI->SetCheck(m_gongju == ID_GONGJU_TUOYUAN?1:0);

//如果不是等于椭圆ID的话,那么SetCheck0,则不打勾。。

在类向导中加入直线IDID_YANSE_HONGSE的按钮消息中的 UPDATA_COMMAND_UI 的一个函数中,加入以下代码、

pCmdUI->SetCheck(m_gongjuyanse == ID_YANSE_HONGSE?1:0);

//如果不是等于红色ID的话,那么SetCheck0,则不打勾。。

在类向导中加入直线IDID_YANSE_HEISE的按钮消息中的 UPDATA_COMMAND_UI 的一个函数中,加入以下代码、

pCmdUI->SetCheck(m_gongjuyanse == ID_YANSE_HEISE?1:0);

//如果不是等于黑色ID的话,那么SetCheck0,则不打勾。。

在类向导中加入直线IDID_YANSE_LANSE的按钮消息中的 UPDATA_COMMAND_UI 的一个函数中,加入以下代码、

pCmdUI->SetCheck(m_gongjuyanse == ID_YANSE_LANSE?1:0);

//如果不是等于蓝色ID的话,那么SetCheck0,则不打勾。。

在类向导中加入直线IDID_YANSE_HEISE的按钮消息中的 COMMAND 的一个函数中,加入以下代码、

m_dangqianyanse = RGB(0,0,0);

m_gongjuyanse = ID_YANSE_HEISE;

在类向导中加入直线IDID_YANSE_LANSE的按钮消息中的 COMMAND 的一个函数中,加入以下代码、

m_dangqianyanse = RGB(0,0,255);

m_gongjuyanse = ID_YANSE_LANSE;

在类向导中加入直线IDID_YANSE_HONGSE的按钮消息中的 COMMAND 的一个函数中,加入以下代码、

m_dangqianyanse = RGB(255,0,0);

m_gongjuyanse = ID_YANSE_HONGSE;

在类向导中加入直线IDID_GONGJU_ZHIXIAN的按钮消息中的 COMMAND 的一个函数中,加入以下代码、

m_gongju = ID_GONGJU_ZHIXIAN;

在类向导中加入直线IDID_GONGJU_JUXING的按钮消息中的 COMMAND 的一个函数中,加入以下代码、

m_gongju = ID_GONGJU_JUXING;

在类向导中加入直线IDID_GONGJU_TUOYUA的按钮消息中的 COMMAND 的一个函数中,加入以下代码、

m_gongju = ID_GONGJU_TUOYUAN;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值