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);
// 	//取得客户区矩形,并从WINDOWDC中排除不予绘制
// 	RECT ClientRect;
// 	GetClientRect(&ClientRect);
// 	OffsetRect(&ClientRect, BorderLeftWidth, BorderTopHeight);
// 	ExcludeClipRect(WindowDC, ClientRect.left, ClientRect.top, ClientRect.right, ClientRect.bottom);
	//窗体宽度和高度
// 	int width, height;
// 	width = WindowRect.right;
// 	height = WindowRect.bottom;
// 	//填充背景
// 	Bitmap bmp(width, height);
// 	Graphics* g = Graphics::FromImage(&bmp);
// 	SolidBrush sbr(Color(255,120,120,120));
// 	g->FillRectangle(&sbr, 0, 0, width, height);
//
// 	Image *pImage = NULL;
// 	skinApp.LoadPng(1, (void*&)pImage);
//
// 	g->DrawImage(pImage, 0, 0);

// 	int x_CtrBox = width - CtrBoxWidth - 5;
// 	int y_CtrBox = 0;
// 	Pen pen(Color(255,128,128,128), 1);
// 	g->DrawRectangle(&pen, x_CtrBox, y_CtrBox, CtrBoxWidth, CtrBoxHeight);
// 	//最小化按钮
// 	pen.SetWidth(2);
// 	g->DrawLine(&pen, x_CtrBox + 3, y_CtrBox + CtrBoxHeight / 2,
// 		x_CtrBox + CtrBoxWidth / 3 - 3, y_CtrBox + CtrBoxHeight / 2);
	//最大化按钮
// 	g->DrawLine(&pen,
// 		x_CtrBox + CtrBoxWidth + 3,
// 		y_CtrBox + 5,
// 		CtrBoxWidth / 3 - 6,
// 		CtrBoxWidth / 3 - 6);
	//关闭按钮
// 	g->DrawLine(&pen,
// 		x_CtrBox + CtrBoxWidth / 3 * 2 + 3,
// 		y_CtrBox + 3,
// 		x_CtrBox + CtrBoxWidth - 3,
// 		y_CtrBox + CtrBoxHeight - 3);
// 	g->DrawLine(&pen,
// 		x_CtrBox + CtrBoxWidth - 3,
// 		y_CtrBox + 3,
// 		x_CtrBox + CtrBoxWidth / 3 * 2 + 3,
// 		y_CtrBox + CtrBoxHeight - 3);

	Graphics g2(WindowDC);

	SolidBrush sbr(Color(255,120,120,120));
	//左侧边框
    g2.FillRectangle(&sbr, 0, BorderTopHeight, BorderLeftWidth, WindowRect.bottom);
	//右侧边框
	g2.FillRectangle(&sbr, WindowRect.right - BorderLeftWidth, BorderTopHeight, WindowRect.right - BorderLeftWidth, WindowRect.bottom);
	//下边框
	g2.FillRectangle(&sbr, 0, WindowRect.bottom - BorderLeftWidth, WindowRect.right, WindowRect.bottom);

	Image *pImage = NULL;
	CDefaultSkinApp::LoadPng(1, (void*&)pImage);

	Image *pImg = pImage->GetThumbnailImage(WindowRect.right, BorderTopHeight, NULL, NULL);
	TRACE(_T("WindowRect.right = %d\n"), WindowRect.right);
	g2.DrawImage(pImg, 0, 0, pImg->GetWidth(), pImg->GetHeight());
	delete pImg;

	::ReleaseDC(m_hWnd, WindowDC);

}
时间: 2024-09-16 03:08:14

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

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

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

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

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

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

VC 轻松实现非客户区按钮

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

如何按非客户区移动窗体

看到一介绍如何按非客户区移动窗体,既重载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会好很多,调整过于平凡也会偶尔闪烁.还有没有别的解决办法? 解决方案 解决方案二:非客户区难不成不是值的标题栏?边框?

轻松实现非客户区按钮

一.简介 有时我们需要在非客户区(例如:标题栏)添加按钮,并对按钮作出响应,如下图所示: 为此我封装了两个类CNCButton和CNCButtonManager,CNCButton主要用于按钮绘制,CNCButtonManager用于按钮的管理并对非客户区的消息进行处理.如下是几个主要的非客户区消息: WM_NCHITTEST WM_NCACTIVATE WM_NCPAINT

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

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

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

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