我想知道是否有可能设置一个无边框的形式的客户区。比如说,我定义了一个这样的形式:
验证码
public class MyForm : Form
{
public MyForm()
{
this.FormBorderStyle = FormBorderStyle.None;
}
}
结果
我想做的是指定工作区,这样表单就有一个框架(像标准的windows框架,但自定义绘制)。
结果
从本质上讲,蓝色区域将成为非客户区,灰色区域将保留为客户区。
我已经尝试设置客户区,但这似乎只是调整整个形式,因此,是不会留下一个“非客户”区
这可能吗?
1条答案
按热度按时间vnjpjtjt1#
这是可能的,但是我不知道这在WindowStyle设置为Borderless的Windows窗体上的效果如何。使用Puprike(平台插件)函数,你可以删除窗口主题,这将给你一个给予非常基本的Windows窗体外观。然后,您可以使用各种Pockerke函数来操作Windows窗体的非工作区。
我建议你通读这些主题。它们是为使用C++的Win32应用程序设计的,但Pockerke是使用托管代码(C#)调用这些本机API的过程。
WM_NCCALCSIZE:https://msdn.microsoft.com/en-us/library/windows/desktop/ms632634(v=vs.85).aspx
WM_NCPAINT:https://msdn.microsoft.com/en-us/library/windows/desktop/dd145212(v=vs.85).aspx
GetDCEx:https://msdn.microsoft.com/en-us/library/windows/desktop/dd144873(v=vs.85).aspx
GetWindowDC:https://msdn.microsoft.com/en-us/library/windows/desktop/dd144947(v=vs.85).aspx
设置窗口主题:https://msdn.microsoft.com/en-us/library/windows/desktop/bb759827(v=vs.85).aspx
这个例子非常非常粗糙,但它提供了基本的功能。我不知道SetWindowTheme在Windows 8或8.1上是如何工作的,但在Windows 7中,它为Windows提供了“经典”主题。