C#无边框窗体实现拖动大小加入了WS_THICKFRAME风格后如何去掉边框

 我来答
仓鼠
2013-02-19 · 知道合伙人IT服务行家
仓鼠
知道合伙人IT服务行家
采纳数:23 获赞数:163
安全客作者,信息安全研究员。

向TA提问 私信TA
展开全部
  如果想无边框,直接去掉WS_THICKFRAME不就行了嘛。那为什么还要有WS_THICKFRAME风格,再费劲去掉边框了?
  没有WS_THICKFRAME会带来很多问题:
  1.没有WS_THICKFRAME,有WS_SYSMENU,就没办法通过相应WM_NCHITTEST,去处理窗口的缩放。
  2.没有WS_THICKFRAME,也没有WS_SYSMEN,在xp系统下任务栏就没有右键菜单弹出。
  3.没有WS_THICKFRAME,也没有WS_SYSMEN,在xp系统任务栏里,想把右键菜单弹出是有方法,不过是个偏方,方法如下:
  1)响应MS没有对外公开的0x313消息,在这个消息里面给主窗口加上WS_SYSMENU风格。
  2)在任务栏菜单弹出来后,响应WM_INITMENUPOPUP消息,在这个消息里通过 HIWORD(lParam)
  来判断是否为1,如果是1就表示是系统的菜单弹出(这个消息最后要给系统回调函数处理,不能直接return了);这个时候去掉WS_SYSMENU风格。这样一来一去,可以既弹出任务栏右键菜单,也不影响窗口缩放的处理。
  4.现在任务栏右键菜单能弹出来了,可是还有一个问题,在xp系统下,当你窗口最大化了,你移动窗口,还是能移动。。。。
  这个问题,你也可以通过其他方式去不让窗口在最大化时移动。但是你发现,在win7系统下,“窗口移动到边缘时自动排列窗口”的功能不能正常工作了。
  也就是说,去掉WS_THICKFRAME会带来很多问题,但是你又想WS_THICKFRAME的情况下去掉边框,自己去画UI,哈哈,当你看到这里,恭喜你,有方法可以解决:
  响应WM_NCCALCSIZE消息,消息响应函数如下(我这里给出的是wtl的):
  LRESULT OnNcCalcSize( UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/ )
  {
  NCCALCSIZE_PARAMS* lpncsp = (NCCALCSIZE_PARAMS*)lParam;
  if((BOOL)wParam)
  {
  lpncsp->rgrc[2] = lpncsp->rgrc[1];
  lpncsp->rgrc[1] = lpncsp->rgrc[0];
  }
  return TRUE;
  }
  就这样一个消息拦截处理下,搞定。。。。。。
追问
问题一样,解决方法用C#怎么解决
狮是搞完泪18
推荐于2016-07-20 · TA获得超过270个赞
知道小有建树答主
回答量:257
采纳率:0%
帮助的人:259万
展开全部
把WS_BORDER样式去掉
SetWindowLong(this.Handle, GWL_STYLE, (uint)(GetWindowLong(this.Handle, GWL_STYLE) & ~WS_BORDER ));
WS_BORDER = 0x00C00000L;
GWL_STYLE = (-16);
哦,忘了一件事,你还要实现拖拽功能是吧,在Form的MouseDown里执行2个API,模拟拖拽
WM_NCLBUTTONDOWN = 0xA1;
HT_CAPTION = 0x2;
[DllImport("user32.dll")]
private extern static bool ReleaseCapture();
[DllImport("user32.dll")]
private extern static int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

//可以通过点击客户区,实现窗体的拖拽
void Form_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(this.Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式