如何在win32中在不覆盖标题栏的情况下围绕窗口绘制矩形
How can I paint a rectangle around a window without overriding the title bar in win32
我想在窗口周围画一个矩形,但不想覆盖标题栏。到目前为止,我在窗口回调函数中写的是:
case WM_NCPAINT:
{
HDC hdc;
RECT rect;
HPEN pen;
hdc=GetDCEx(hWnd,(HRGN)wParam,DCX_WINDOW|DCX_CACHE|DCX_INTERSECTRGN|DCX_LOCKWINDOWUPDATE);
GetWindowRect(hWnd,&rect);
pen=CreatePen(PS_SOLID, 10, RGB(255, 0, 0));//red pen 10 pixels in size
SelectObject(hdc,pen);
Rectangle(hdc,0,0,(rect.right-rect.left),(rect.bottom-rect.top));
DeleteObject(pen);
ReleaseDC(hWnd,hdc);
}
break;
但是,这会用白色画笔绘制窗口标题栏。
我怎么能不在标题栏上画画呢?我正在失去标题栏文本和菜单。。。
在创建钢笔之前,我尝试过使用HOLLOW_BRUSH,如下所示:
HBRUSH b=CreateSolidBrush(HOLLOW_BRUSH);
SelectObject(hdc,b);
但这只会导致标题栏根本没有画出来(是黑色的)。
通过处理WM_NCPAINT
消息,您告诉窗口管理器您负责绘制整个非客户端区域,因此窗口管理器不会为您绘制任何区域。
如果你想绘制原始标题栏,那么你需要首先调用DefWindowProc()
,然后在它绘制的内容的"顶部"绘制自己的内容。
如果您希望用一个矩形同时绘制整个非客户端区域,则可能还需要使用ExcludeClipRect()
来防止客户端区域被绘制。
相关文章:
- 如何在Qt中打开新窗口的情况下更改UI?
- 在没有任何外部库的情况下,是否可以在c++/linux的窗口中显示bmp图像
- 如何在没有窗口类的情况下编写QT系统托盘应用程序,并将其与另一个进程集成
- 如何在不使用透明胶片的情况下创建Qt投影?(因为窗口管理器不支持)
- 是否可以在不重新打开重新打开 win32 窗口的情况下执行需要提升的任务
- 如何在不显示文本的情况下分配Win32编辑控件的窗口名称
- Visual Studio:如何在没有控制台窗口的情况下启动项目
- Qt-如何在不使用插槽的情况下检测自定义事件循环中的关闭窗口
- 在没有锁定应用程序的情况下生成控制台窗口
- 在没有项目的情况下使用 Dev c++ 在窗口中绘制文本
- (威纳皮C++)如何在没有全局变量的情况下将数据从一个窗口传递到另一个窗口
- 如何在过剩的情况下获取当前窗口模式
- 您可以在不使用核心音频 API 的情况下更改窗口中音量混合器/sndvol 中列出的程序名称吗?
- 如何在Windows中不显示cmd窗口的情况下运行带参数的外部程序
- 如何在不影响 ALT+F4 或在任务栏中关闭窗口的情况下重新调整窗口关闭按钮的用途?
- 如何在不重新绘制的情况下更改窗口矩形
- 如何使用Windows应用商店C++在没有窗口句柄的情况下渲染路径几何体
- 如何在不终止应用程序的情况下关闭GLUT窗口
- ncurses:是否可以在不删除边框的情况下刷新窗口
- 如何使Qt QMainWindow在有窗口覆盖的情况下用鼠标点击时处于焦点并覆盖