当改变窗口大小时用哪个函数只触发一次

yowen 2010-07-28 02:52:21
用 OnSize(UINT nType, int cx, int cy),发现每改变一次窗口大小,OnSize 会被执行多次,有什么办法只执行一次?
...全文
266 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2010-07-29
  • 打赏
  • 举报
回复
WM_WINDOWPOSCHANGED消息
jogger007 2010-07-29
  • 打赏
  • 举报
回复
OnSize中判断鼠标左键是否被释放
if (释放)
{
// here do what you want
}
xxd_qd 2010-07-29
  • 打赏
  • 举报
回复
楼主问得问题很奇怪,每次改变窗口大小,Windows都只会发送一次WM_SIZE消息,也就只会执行一次OnSize,你怎么会执行多次?除非是你的代码里另有其它改变窗口大小的代码,并且恰好在你改变窗口大小的时候运行。另外,你去看一下是不是在windows的显示效果里设置了“拖动时显示窗口内容”?
gz_qmc 2010-07-28
  • 打赏
  • 举报
回复
定义用这个:
afx_msg void OnSizing(UINT fwSide, LPRECT pRect);

消息映射用这个:
ON_WM_SIZING()

实现用这个:
void CMainFrame::OnSizing(UINT fwSide, LPRECT pRect)
{
//如果要限制窗口尺寸请在这里操作pRect
CFrameWnd::OnSizing(fwSide, pRect);
//这里添加你需要的代码
}
wltg2001 2010-07-28
  • 打赏
  • 举报
回复
这样不行呀,那我再改变一次窗口大小,不是执行不了,我的意思不是程序运行一次执行一次,而是窗口改变一次大小执行一次
=============
每改变一次应该只执行一次啊,怎么会执行多次呢?
yowen 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fangongdalu7148 的回复:]
引用楼主 yowen 的回复:
用 OnSize(UINT nType, int cx, int cy),发现每改变一次窗口大小,OnSize 会被执行多次,有什么办法只执行一次?

void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
if(bl)//bl 是类……
[/Quote]

这样不行呀,那我再改变一次窗口大小,不是执行不了,我的意思不是程序运行一次执行一次,而是窗口改变一次大小执行一次
zgsdzhaolanxiang1 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 yowen 的回复:]
用 OnSize(UINT nType, int cx, int cy),发现每改变一次窗口大小,OnSize 会被执行多次,有什么办法只执行一次?
[/Quote]
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
if(bl)//bl 是类成员变量。
TRACE("大小改变一次\n");
bl=false;
// TODO: Add your message handler code here

}
yowen 2010-07-28
  • 打赏
  • 举报
回复
我是想大小改变后执行一次,另外 我跟踪 nType 的值发现每次的值都是 0
wltg2001 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 yowen 的回复:]
用 OnSize(UINT nType, int cx, int cy),发现每改变一次窗口大小,OnSize 会被执行多次,有什么办法只执行一次?
[/Quote]
OnSize是响应WM_SIZE消息,因为WM_SIZE消息发送了多次,所以就会执行多次,你想只执行一次,那么你到底是想在什么状态下执行呢
cdutboy 2010-07-28
  • 打赏
  • 举报
回复
那是因为OnSize的 UINT nType值有几种,你只处理其中一种,其他直接返回就可以了
yowen 2010-07-28
  • 打赏
  • 举报
回复
难道没有办法?
zwfgdlc 2010-07-28
  • 打赏
  • 举报
回复
试下用SetWindowPos()
BOOL SetWindowPos(
const CWnd* pWndInsertAfter,
int x,
int y,
int cx,
int cy,
UINT nFlags
);
hastings 2010-07-28
  • 打赏
  • 举报
回复
难道:加个bool值
WM_NCLBUTTONDOWN时设为true;
WM_NCLBUTTONUP时设为false;
然后OnSize时根据true或false来确定执行不执行代码?
等待LX高手~~~

15,979

社区成员

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

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