在OnSize中用MoveWindow设置CDateTimeCtrl的窗口大小,每设置一次窗口的长宽会各缩小4个点,请问是什么原因呢?

King_hhuang 2011-02-16 03:07:21
代码如下,在OnSize中:


CRect rcClient;
GetClientRect(rcClient);

CRect rcControl,rcBdate;
CDateTimeCtrl* pBdate = (CDateTimeCtrl*) this->GetDlgItem(IDC_DATETIME_BDATE);
if(!::IsWindow(pBdate->GetSafeHwnd()))
return;

pBdate->GetClientRect(&rcControl);
CString str;
str.Format("W:%d H:%d",rcControl.Width(),rcControl.Height());
AfxMessageBox(str);

rcBdate.left = rcClient.left + 100;
rcBdate.right = rcBdate.left + rcControl.Width();
rcBdate.top = rcClient.top + 100;
rcBdate.bottom = rcBdate.top + rcControl.Height();

pBdate->MoveWindow(rcBdate);
...全文
174 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
King_hhuang 2011-02-18
  • 打赏
  • 举报
回复
没有其他代码了,我直接做了个最简单的程序,就用来测试这个,还是有这样的问题
ji1bing 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 king_hhuang 的回复:]
引用 2 楼 ji1bing 的回复:
问题出在这里:

C/C++ code

GetClientRect(rcClient);



GetClientRect函数获得的是窗口客户区的矩形位置,而对于CDateTimeCtr这个控件来说,它存在非客户区,所以没有获取的大小都小于整个控件的大小,而你又MoveWindow,窗口自然越来越小了。

改成:

C/C++ c……
[/Quote]

之前也遇到了这个问题,也是CDateTimeCtrl控件。后来就是吧GetClientRect改成了GetWindowRect就好了
你的还不好就不知道怎么回事了,你再看看代码其他部分。
CDateTimeCtl存在非客户区,GetClientRect和GetWindowRect得到的矩形宽和高值应该是不同的。
King_hhuang 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ji1bing 的回复:]
问题出在这里:

C/C++ code

GetClientRect(rcClient);



GetClientRect函数获得的是窗口客户区的矩形位置,而对于CDateTimeCtr这个控件来说,它存在非客户区,所以没有获取的大小都小于整个控件的大小,而你又MoveWindow,窗口自然越来越小了。

改成:

C/C++ code

GetWin……
[/Quote]

我试过了,效果还是一样,还是会缩小
King_hhuang 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ji1bing 的回复:]
问题出在这里:

C/C++ code

GetClientRect(rcClient);



GetClientRect函数获得的是窗口客户区的矩形位置,而对于CDateTimeCtr这个控件来说,它存在非客户区,所以没有获取的大小都小于整个控件的大小,而你又MoveWindow,窗口自然越来越小了。

改成:

C/C++ code

GetWin……
[/Quote]

为啥CDateTimeCtr这个控件来说,它存在非客户区呢,它跟其他控件有什么区别吗?其他的控件都可以这么做啊
ji1bing 2011-02-17
  • 打赏
  • 举报
回复
问题出在这里:

GetClientRect(rcClient);


GetClientRect函数获得的是窗口客户区的矩形位置,而对于CDateTimeCtr这个控件来说,它存在非客户区,所以没有获取的大小都小于整个控件的大小,而你又MoveWindow,窗口自然越来越小了。

改成:

GetWindowRect(rcClient);
ScreentoClient(rcClient);
King_hhuang 2011-02-16
  • 打赏
  • 举报
回复
如果是其他控件,像CButton、CStatic等大小都不会自动变化,为啥就是这个CDateTimeCtrl每次移动长宽会自动缩小4个点呢?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧