之前我发布了一个关于How to create non-client area?的问题,我得到了答案。现在,我想阻止用户在特定客户区添加控件。因此,用户只能在客户区的已分配部分添加控件。
控件应该看起来像这样。
CLASS DESIGN& CODES
XWizardControl:是将放置在表单上的主要用户控件。
XWizardPageWindow:是包含所有XWizardPages
的容器。此控件将放在XWizardControl
上。用户将从Control Collection对话窗口添加页面。
XWizardPageCollection:是XWizardPage
。
XWizardPage:用户将在此处放置其他控件。
XWizardPageDesigner: XWizardPage
控件的控件设计师
答案 0 :(得分:0)
您正在错误地设置非客户矩形。
“在输入时,结构包含窗口的建议窗口矩形。退出时,结构应包含相应窗口客户区域的屏幕坐标。” - MSDN -
另请注意,RECT
结构是ltrb
矩形,而不是xywh
矩形。
<强>不正确强>
您不应将值明确设置为:
ncRect.top = 68; //<----
ncRect.left = 176; //<----
ncRect.bottom -= 68;
ncParams.rectProposed.top = 68; //<----
ncParams.rectProposed.left = 176; //<----
ncParams.rectProposed.bottom -= 68;
<强>正确强>
而是在矩形中添加(+=
)或减去(-=
):
ncRect.top += 30; //<---- 30px top-margin
ncRect.left += 50; //<---- 50px left-margin
ncRect.bottom -= 20; //<---- 20px bottom-margin
ncParams.rectProposed.top += 30;
ncParams.rectProposed.left += 50;
ncParams.rectProposed.bottom -= 20;
注意强>
如果您没有正确绘制非客户区域,并且控件放在位置-5, -5
,那么控件可能看起来好像是里面非客户区域。