打开APP
未登录
开通VIP,畅享免费电子书等14项超值服
开通VIP
首页
好书
留言交流
下载APP
联系客服
修改窗体非客户区大小更改窗体标题栏高度
9loong
>《用户界面》
2013.08.30
关注
想修改窗体的非客户区,首先就得明白为什么要修改非客户区,什么是非客户区
从窗体或控件来看,非客户区就是无法放置控件的区域,比如窗体的标题栏,和边框,菜单栏也是非客户区,菜单栏不是控件是画上去的
文本框的边框,滚动条区域都是非客户区
为什么要修改非客户区呢??
原因是为了自绘,让边框好看一些,比如要更改窗体标题栏高度,就需要改非客户区,自绘非客户区会响应 WM_NCPAINT消息
在这个消息里,你可以进行窗体,控件,非客户区的自绘
好啦,现在转入正题,要修改非客户大小,必须处理 WM_NCCALCSIZE
有关于 WM_NCCALCSIZE 消息,可以去
www.panshsoft.com
我的网站查询
下在是代码,函数已经获取到 wParam lParam 参数的值,示例,是我网站上,换肤产品中的代码,是通过子类化调用的
/********************************************************************
'**【函 数 名:】OnNcCalcSize
'**【参 数:】wParam,lParam窗口附加参数
'**【返 回 值:】
'**【作 者:】艾俊
'**【日 期:】
'**【全局变量:】
'**【功能描述:】改变窗体非客户区大小
'********************************************************************/
LRESULT
CDrawFrmWnd::OnNcCalcSize(
WPARAM
wParam,
LPARAM
lParam)
{
LONG
ret = USE_DEFAULT_WND_PROC;
RECT Oldrect;
NCCALCSIZE_PARAMS FAR* lpncsp = NULL;
if
((
BOOL
)wParam)
{
lpncsp = (NCCALCSIZE_PARAMS FAR*)lParam;
if
(NULL == lpncsp)
return
USE_DEFAULT_WND_PROC;
memcpy(&Oldrect, &lpncsp -> rgrc[0],
sizeof
(Oldrect));
//保存rgrc[0]的值
//m_WndOldProc 原窗体口处理过程的指针
//m_hWnd 需要修改控件或窗体的句柄
//先让默认的函数处理一下
ret = ::CallWindowProc(m_WndOldProc, m_hWnd, WM_NCCALCSIZE, wParam, lParam);
memcpy(&lpncsp->rgrc[0], &Oldrect ,
sizeof
(Oldrect));
//设置非客户区,为窗体或控件,上,下,左,右,都加上10象素的非客户区
//其中 下,右,是用减的,减就是加
lpncsp->rgrc[0].top += 10;
lpncsp->rgrc[0].bottom -= 10;
lpncsp->rgrc[0].left += 10;
lpncsp->rgrc[0].right -= 10;
memcpy(&lpncsp->rgrc[1], &lpncsp->rgrc[0],
sizeof
(lpncsp->rgrc[0]));
ret = WVR_VALIDRECTS;
//
}
return
ret;
//让CallWindowProc处理
}
这样一来,控件或窗体,非客户区就在原来的基础上加10象素啦,然后,操作系统就会响应WM_NCPAINT消息,你就可以重绘啦。
(###)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报
。
打开APP,阅读全文并永久保存
查看更多类似文章
猜你喜欢
类似文章
【热】
打开小程序,算一算2024你的财运
MFC在VS2008自定义消息
MFC界面设计
ATL Background
跟踪MFC 事件流程.
编译成release版本与debug版本的程序有何执行上的区别? VC/MFC / 基础类...
有关VC知识的一些介绍_evan
更多类似文章 >>
生活服务
热点新闻
留言交流
回顶部
联系我们
分享
收藏
点击这里,查看已保存的文章
导长图
关注
一键复制
下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!
联系客服
微信登录中...
请勿关闭此页面
先别划走!
送你5元优惠券,购买VIP限时立减!
5
元
优惠券
优惠券还有
10:00
过期
马上使用
×