VC编程之VC 轻松实现非客户区按钮
小标 2018-11-27 来源 : 阅读 1495 评论 0

摘要:本文主要向大家介绍了VC编程之VC 轻松实现非客户区按钮,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程之VC 轻松实现非客户区按钮,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

VC编程之VC 轻松实现非客户区按钮

一、简介
有时我们需要在非客户区(例如:标题栏)添加按钮,并对按钮作出响应,如下图所示:

为此我封装了两个类CNCButton和CNCButtonManager,CNCButton主要用于按钮绘制,CNCButtonManager用于按钮的管理并对非客户区的消息进行处理。如下是几个主要的非客户区消息:
WM_NCHITTEST
WM_NCACTIVATE
WM_NCPAINT

二、使用

2.1 首先我们需要引用两个类的头文件
#include"NCButtonManager.h"
#include "NCButton.h"
2.2 为按钮定义ID
#define ID_BUTTON1  100
#define ID_BUTTON2  101
#define ID_BUTTON3  102
2.3 添加按钮和管理类成员变量
// Implementation
public:
       CNCButtonm_NcButton1;
       CNCButtonm_NcButton2;
       CNCButtonm_NcButton3;
       CNCButtonManagerm_NcButtonManager;
2.4 创建按钮
// 按钮的位置和尺寸
POINT ptBtn1Offset = {120, 10};
POINT ptBtn2Offset = {20, 32};
POINT ptBtn3Offset = {190, 10};
SIZE sizeBtn1 = {60, 14};
SIZE sizeBtn2 = {16, 14};
SIZE sizeBtn3 = {16, 14};
 
// 创建按钮
m_NcButton1.Create("",this->m_hWnd, ptBtn1Offset, sizeBtn1, ID_BUTTON1);
m_NcButton2.Create("", this->m_hWnd,ptBtn2Offset, sizeBtn2, ID_BUTTON2);
m_NcButton3.Create("",this->m_hWnd, ptBtn3Offset, sizeBtn3, ID_BUTTON3);
      
// 设置文字、提示、按钮位图
m_NcButton1.SetText("VC知识库", "宋体", 12);
m_NcButton1.SetTooltip("VC知识库欢迎您!");
m_NcButton2.SetButtonBitmap(IDB_PEN1,BTNBMP_NORMAL); // 正常位图
m_NcButton2.SetButtonBitmap(IDB_PEN2,BTNBMP_MOUSEOVER); // 鼠标移到上面时的位图
m_NcButton2.SetTooltip("pen");
 
m_NcButton3.SetButtonBitmap(IDB_PEN1,BTNBMP_NORMAL);
m_NcButton3.SetButtonBitmap(IDB_PEN2,BTNBMP_MOUSEOVER);
m_NcButton3.SetTooltip("pen");
 
// 添加到管理类
m_NcButtonManager.AddButton(&m_NcButton1);
m_NcButtonManager.AddButton(&m_NcButton2);
m_NcButtonManager.AddButton(&m_NcButton3);
2.5 消息的处理 

2.5.1 将消息转发给管理类
LRESULTCMainFrame::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{     
       LRESULTlResult = CFrameWnd::DefWindowProc(message, wParam, lParam);
       if(!IsWindow(this->m_hWnd))
              returnlResult;
 
       LRESULTlMyResult = m_NcButtonManager.DefWindowProc(this->m_hWnd, message, wParam,lParam);
       if(lMyResult!= 0)
              returnlMyResult;
       else
              returnlResult;    
}
2.5.2 添加消息处理函数
// Operations
public:
       voidOnNcButton1Clicked();
 
voidCMainFrame::OnNcButton1Clicked()
{
       AfxMessageBox("VC知识库欢迎您! www.vckbase.com");
}
2.5.3 消息映射
BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)
       //{{AFX_MSG_MAP(CMainFrame)
              ON_BN_CLICKED(ID_BUTTON1,OnNcButton1Clicked)
              ON_BN_CLICKED(ID_BUTTON2,OnNcButton2Clicked)
              ON_BN_CLICKED(ID_BUTTON3,OnNcButton3Clicked)
       ON_WM_CREATE()
       //}}AFX_MSG_MAP
END_MESSAGE_MAP()
总结:本文提供的两个类可以方便地往非客户区(如:标题栏)添加按钮,欢迎批评指正!    

以上就介绍了VC/MFC的学习,希望对VC/MFC有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言VC/MFC频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程