如何设置Winform控件的ClientRectangle
2006-11-29 22:44
190 查看
最近学习制作WinForm控件,自己动手写控件的时候才发现System.Windows.Forms.Control 竟然没有提供默认的border绘制。记得以前用API做控件的时候,只需要设置空间窗口的WS_BORDER 风格就可以。遍寻无方,只有自己绘制了,这里有出现一个,如果border在客户区,那么在OnPaint方法里不得不每次都要考虑Border所占用的区域,而且,如果从这个类派生的话,将无法获得准确的客户区。
现在要解决的问题就是如何重新设置客户区的矩形区域的尺寸,查看了一下Control类的ClientRectangle属性:
public Rectangle ClientRectangle { get; }是个只读属性,看来是不能通过这个属性达到目的了。再查找Control类的文档,也没有这方面的说明,没有办法,只能用API搞定了。可以通过计算非客户区尺寸来设置客户区尺寸,Border在非客户绘制。下面就是主要的代码,就是通过重载WndProc方法,捕捉WM_NCCALCSIZE消息,实现自己的逻辑。
protected override void WndProc(ref Message m)
public IntPtr NCPaint(IntPtr region)
现在要解决的问题就是如何重新设置客户区的矩形区域的尺寸,查看了一下Control类的ClientRectangle属性:
public Rectangle ClientRectangle { get; }是个只读属性,看来是不能通过这个属性达到目的了。再查找Control类的文档,也没有这方面的说明,没有办法,只能用API搞定了。可以通过计算非客户区尺寸来设置客户区尺寸,Border在非客户绘制。下面就是主要的代码,就是通过重载WndProc方法,捕捉WM_NCCALCSIZE消息,实现自己的逻辑。
protected override void WndProc(ref Message m)
public IntPtr NCPaint(IntPtr region)
相关文章推荐
- 如何设置LVS,让Director能将来自同一个Client的请求发给同一个RealServer
- Exchage 2007 Client Application Functions(5) -- 如何设置邮件为已读
- 如何手动设置使domino server/Notes Client Hang
- Apache HttpAsyncClient 如何设置per request timeout
- oracle xe client 如何设置 tnsnames.ora(解决无法使用pl/sql developer的问题)
- httpclient 如何设置多个checkbox
- 如何把Volley改成一个爬虫--HttpClient设置
- 如何设置USERENV('CLIENT_INFO')的值
- kshell 如何传递参数给shell和调用参数 以及设置参数的默认值
- c#中DataGridView 如何设置 才能选中一行 设置鼠标事件
- 如何设置路由器
- ExtJS Combobox 如何设置默认和取值问题
- 如何用WcfTestClient.exe测试C#写的WebService服务
- 如何将ToolBar 样式设置Title文字水平居中
- 如何设置域用户PSO密码策略
- QT中如何设置窗体的背景图片。
- 如何设置Android系统中的BT2.1 device到SSP的DEBUG模式
- 在windows/MFC编程中如何设置窗口半透明
- OC 如何设置UITableViewCell之间的间距