轻松实现非客户区按钮

一、简介

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

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

WM_NCHITTEST

WM_NCACTIVATE

WM_NCPAINT

时间: 2025-01-21 07:27:48

轻松实现非客户区按钮的相关文章

VC 轻松实现非客户区按钮

源代码下载 一.简介 有时我们需要在非客户区(例如:标题栏)添加按钮,并对按钮作出响应,如下图所示: 为此我封装了两个类CNCButton和CNCButtonManager,CNCButton主要用于按钮绘制,CNCButtonManager用于按钮的管理并对非客户区的消息进行处理.如下是几个主要的非客户区消息: WM_NCHITTEST WM_NCACTIVATE WM_NCPAINT 二.使用 2.1 首先我们需要引用两个类的头文件 #include"NCButtonManager.h&qu

界面-求助:mfc非客户区自绘请求高手指点,不知道该怎么做

问题描述 求助:mfc非客户区自绘请求高手指点,不知道该怎么做 50C 想美化一下界面,查资料说要重绘非客户区,看的晕头转向,麻烦高手给指点一下思路,最好有代码可以参考一下 解决方案 WM_NCPAINT这个就是重绘飞客户区的消息,响应在这个消息在里面绘图就好了. 解决方案二: http://blog.csdn.net/faihtua/article/details/8082264 解决方案三: 参考:VC 轻松实现非客户区按钮http://blog.csdn.net/testcs_dn/art

VC 窗体非客户区的绘制

VC 窗体非客户区的绘制 OnNcPaint(UINT message, WPARAM wParam, LPARAM lParam) . void CSkinAndLangDlg::OnNcPaint(UINT message, WPARAM wParam, LPARAM lParam) { HDC WindowDC = ::GetWindowDC(m_hWnd); // //取得整个窗体矩形 RECT WindowRect; GetWindowRect(&WindowRect); Offset

c++-MFC非客户区的刷新及防闪烁问题

问题描述 MFC非客户区的刷新及防闪烁问题 弄重绘标题栏的时候遇到了问题.. 按钮贴图什么的都好了.但是在标题栏写"菜单"项的时候遇到了刷新的问题. "菜单"项我是用pDC->DrawText()写上去的("菜单"是两个字而不是按钮啥的). 希望的效果是实时追踪鼠标的位置,若鼠标指在"菜单"所在矩形区域时就把俩字变色显示 于是我就先把之前写的字覆盖掉再重新写 但是这样就出现闪烁了.. 各位有没有好办法解决一下.. 解决方

如何按非客户区移动窗体

看到一介绍如何按非客户区移动窗体,既重载WM_NCHITTEST,返回HTCAPTION.但我认为有一点不妥就是没有了鼠标右键功能.这里我介绍一种方法,即可已在客户区移动窗体又可以实现鼠标右键功能. 1.新建一工程DLG.采用默认设置. 2.添加消息处理函数: void CDlgDlg::OnLButtonDown(UINT nFlags, CPoint point) { PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,poin

wpf 能不能直接在非客户区绘图

问题描述 如题,非客户区,除了Hook,能不能通过drawvisual绘制?还有,现在我用了Hook,用c++写的,用了双缓冲,BitBlt直接拷贝的,但是调整窗体大小时会闪烁,换成gdiplus会好很多,调整过于平凡也会偶尔闪烁.还有没有别的解决办法? 解决方案 解决方案二:非客户区难不成不是值的标题栏?边框?

修改窗体非客户区大小更改窗体标题栏高度

想修改窗体的非客户区,首先就得明白为什么要修改非客户区,什么是非客户区 从窗体或控件来看,非客户区就是无法放置控件的区域,比如窗体的标题栏,和边框,菜单栏也是非客户区,菜单栏不是控件是画上去的 文本框的边框,滚动条区域都是非客户区 为什么要修改非客户区呢?? 原因是为了自绘,让边框好看一些,比如要加高窗体标题栏,就需要改非客户区,自绘非客户区会响应 WM_NCPAINT消息 在这个消息里,你可以进行窗体,控件,非客户区的自绘 好啦,现在转入正题,要修改非客户大小,必须处理 WM_NCCALCSI

VC 窗体非客户区的绘制 OnNcPaint(UINT message, WPARAM wParam, LPARAM lParam)

void CSkinAndLangDlg::OnNcPaint(UINT message, WPARAM wParam, LPARAM lParam) { HDC WindowDC = ::GetWindowDC(m_hWnd); // //取得整个窗体矩形 RECT WindowRect; GetWindowRect(&WindowRect); OffsetRect(&WindowRect, -WindowRect.left, - WindowRect.top); // //取得客户区矩

mfc-MFC怎么将客户区变成非客户区

问题描述 MFC怎么将客户区变成非客户区 我用BCG库的停靠窗口在顶部创建了一个窗口,然后隐藏了原来的标题栏,菜单和工具栏,然后我想让在顶部的那个停靠窗口成为新的标题栏形势的非客户区,请问该怎么做,OnNCHitTest改写没用 解决方案 请详细描述你的问题呢.... 解决方案二: 你创建的是什么窗口?CDockablePane?