VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1190|回复: 12

在程序中,怎样动态的把对话框的非客户区去掉???

[复制链接]

2

主题

8

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-2-7 09:00:01 | 显示全部楼层 |阅读模式
初始化时对话框是有非客户区的,当满足某一个条件的时候,怎样把非客户区去掉????谢谢!!
回复

使用道具 举报

0

主题

17

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-3-27 19:30:01 | 显示全部楼层
SetWindowRgn
回复

使用道具 举报

2

主题

8

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
 楼主| 发表于 2020-3-29 18:30:01 | 显示全部楼层
我是想能不能动态的改变对话框的属性即把对话框的Border属性由Resizing改为Nono
回复

使用道具 举报

0

主题

17

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-4-1 15:45:01 | 显示全部楼层
那样不好,至于为什么,你试一下就明白了:)
回复

使用道具 举报

2

主题

8

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
 楼主| 发表于 2020-4-1 21:00:01 | 显示全部楼层
我就是不知道怎么动态的修改?
回复

使用道具 举报

2

主题

16

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-4-3 18:00:02 | 显示全部楼层
试试:
DWORD oldstyle=GetWindowLong();
DWORD newStyle=WS_XXXX;设置你需要的样式
SetWindowLong(olstyle|newstyle);
回复

使用道具 举报

0

主题

59

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-4-3 21:00:02 | 显示全部楼层
处理WM_NCCALCSIZE消息

void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp)
{
   if( bCalcValidRects )
   {
      int nCYCaption = GetSystemMetrics(SM_CYCAPTION);
      lpncsp->rgrc[0].top -= nCYCaption;
   }
   else
   {
      CDialog::OnNcCalcSize(bCalcValidRects, lpncsp);
   }
}
回复

使用道具 举报

2

主题

16

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-4-3 22:15:01 | 显示全部楼层
或是,这个方法一定成功:
GetClientRect(CRect *rc);
GetWindowRect(CRect *rc);
SetWindowRgn(CRgn *rgn);
回复

使用道具 举报

0

主题

59

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-4-3 23:45:01 | 显示全部楼层
为了方便你可以干脆修改窗口样式

DWORD dwStyle = GetWindowLong(m_hWnd, GWL_STYLE);

dwStyle &= ~WS_CAPTION;

SetWindowLong(m_hWnd, GWL_STYLE, dwStyle);
回复

使用道具 举报

2

主题

8

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
 楼主| 发表于 2020-4-6 16:30:01 | 显示全部楼层
大家的方法都很好,谢谢!
把标题栏去掉以后,窗体还是有客户区与非客户区(上、下、左、右边分别有3个像素)之分,我是想能不能动态的改变对话框把对的属性即话框的Border属性由Resizing改为Nono,这样就能得到我想的效果了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表