`
mybwu_com
  • 浏览: 179041 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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轻松实现非客户区按钮示例及源码

    VC轻松实现非客户区按钮示例及源码 有时我们需要在非客户区(例如:标题栏)添加按钮,并对按钮作出响应。为此我封装了两个类CNCButton和CNCButtonManager,CNCButton主要用于按钮绘制,CNCButtonManager用于按钮的...

    vc++ 应用源码包_6

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC...

    vc++ 应用源码包_1

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 ...

    vc++ 应用源码包_2

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 ...

    vc++ 应用源码包_3

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 ...

    vc++ 应用源码包_5

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC...

    vc++ 开发实例源码包

    ----------VC应用开发 [Visual.C..编程技巧精选500例]源代码. 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件...

    java源码包---java 源码 大量 实例

     //给客户发一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...

    java源码包2

     //给客户发一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...

    java源码包3

     //给客户发一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...

    java源码包4

     //给客户发一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java...

    JAVA上百实例源码以及开源项目源代码

     //给客户发一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...

    JAVA上百实例源码以及开源项目

     //给客户发一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...

    asp.net知识库

    ASP.NET2.0中themes、Skins轻松实现网站换肤! ASP.NET 2.0 中的代码隐藏和编译 ASP.NET 2.0 Language Swithcer and Theme Swicher 多语言转换和多样式主题转换 ASP.NET2.0 ObjectDataSource的使用详解(1) ASP.NET...

    VB编程资源大全(控件 其它1)

    在一个里发生的事情也会在另一个中发生,轻松帮助你完成“客户/服务器”设计(276KB) 90,fsanimicon.zip 在任务条上加入动画图标(77KB) 91,trispace.zip 自由软件, 此控件是一个软件 3d 引擎。...

    VB编程资源大全(控件 其它2)

    在一个里发生的事情也会在另一个中发生,轻松帮助你完成“客户/服务器”设计(276KB) 90,fsanimicon.zip 在任务条上加入动画图标(77KB) 91,trispace.zip 自由软件, 此控件是一个软件 3d 引擎。...

    VB编程资源大全(控件 其它3)

    在一个里发生的事情也会在另一个中发生,轻松帮助你完成“客户/服务器”设计(276KB) 90,fsanimicon.zip 在任务条上加入动画图标(77KB) 91,trispace.zip 自由软件, 此控件是一个软件 3d 引擎。...

Global site tag (gtag.js) - Google Analytics