变量类型:
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; //保存当前颜色的使用状况显示
在类向导中加入直线ID的 ID_GONGJU_ZHIXIAN 的按钮消息中的 UPDATA_COMMAND_UI 的一个函数中,加入以下代码、
pCmdUI->SetCheck(m_gongju == ID_GONGJU_ZHIXIAN?1:0);
//如果不是等于直线ID的话,那么SetCheck为0,则不打勾。。
在类向导中加入直线ID的 ID_GONGJU_JUXING 的按钮消息中的 UPDATA_COMMAND_UI 的一个函数中,加入以下代码、
pCmdUI->SetCheck(m_gongju == ID_GONGJU_JUXING?1:0);
//如果不是等于矩形ID的话,那么SetCheck为0,则不打勾。。
在类向导中加入直线ID的 ID_GONGJU_TUOYUA的按钮消息中的 UPDATA_COMMAND_UI 的一个函数中,加入以下代码、
pCmdUI->SetCheck(m_gongju == ID_GONGJU_TUOYUAN?1:0);
//如果不是等于椭圆ID的话,那么SetCheck为0,则不打勾。。
在类向导中加入直线ID的 ID_YANSE_HONGSE的按钮消息中的 UPDATA_COMMAND_UI 的一个函数中,加入以下代码、
pCmdUI->SetCheck(m_gongjuyanse == ID_YANSE_HONGSE?1:0);
//如果不是等于红色ID的话,那么SetCheck为0,则不打勾。。
在类向导中加入直线ID的 ID_YANSE_HEISE的按钮消息中的 UPDATA_COMMAND_UI 的一个函数中,加入以下代码、
pCmdUI->SetCheck(m_gongjuyanse == ID_YANSE_HEISE?1:0);
//如果不是等于黑色ID的话,那么SetCheck为0,则不打勾。。
在类向导中加入直线ID的 ID_YANSE_LANSE的按钮消息中的 UPDATA_COMMAND_UI 的一个函数中,加入以下代码、
pCmdUI->SetCheck(m_gongjuyanse == ID_YANSE_LANSE?1:0);
//如果不是等于蓝色ID的话,那么SetCheck为0,则不打勾。。
在类向导中加入直线ID的 ID_YANSE_HEISE的按钮消息中的 COMMAND 的一个函数中,加入以下代码、
m_dangqianyanse = RGB(0,0,0);
m_gongjuyanse = ID_YANSE_HEISE;
在类向导中加入直线ID的 ID_YANSE_LANSE的按钮消息中的 COMMAND 的一个函数中,加入以下代码、
m_dangqianyanse = RGB(0,0,255);
m_gongjuyanse = ID_YANSE_LANSE;
在类向导中加入直线ID的 ID_YANSE_HONGSE的按钮消息中的 COMMAND 的一个函数中,加入以下代码、
m_dangqianyanse = RGB(255,0,0);
m_gongjuyanse = ID_YANSE_HONGSE;
在类向导中加入直线ID的 ID_GONGJU_ZHIXIAN的按钮消息中的 COMMAND 的一个函数中,加入以下代码、
m_gongju = ID_GONGJU_ZHIXIAN;
在类向导中加入直线ID的 ID_GONGJU_JUXING的按钮消息中的 COMMAND 的一个函数中,加入以下代码、
m_gongju = ID_GONGJU_JUXING;
在类向导中加入直线ID的 ID_GONGJU_TUOYUA的按钮消息中的 COMMAND 的一个函数中,加入以下代码、
m_gongju = ID_GONGJU_TUOYUAN;