窗口在初始化时ONPAINT函数被调用两次是什么原因

时间:2022-03-26 18:52:28
如题,在onpaint函数对一个成员变量进行了加1操作,发现对话框初始化完后,这个变量值被加了两次,说明onpaint函数被调了两次,请问为什么会调两次,自己没有加什么重绘函数。

8 个解决方案

#1


累加之类的操作不要在OnPaint里,使用的时机不对,操作系统在任何认为需要重绘的时候都可能发出WM_PAINT消息

#2


引用 1 楼 worldy 的回复:
累加之类的操作不要在OnPaint里,使用的时机不对,操作系统在任何认为需要重绘的时候都可能发出WM_PAINT消息


这个累加只是想看函数调用了几次,就是正常打开这个对话框,这个数就被加了两次,也没找到原因,其他对话框都是一次

#3


要看你对话框中做了什么操作~

#4


引用 3 楼 VisualEleven 的回复:
要看你对话框中做了什么操作~

没有什么别的操作,就是onInitDialog()中有一些初始化工作,但是我断点跟完这个函数,那个变量值也是0,然后运行程序,打开对话框,我在界面显示那个变量,那个变量就是2了,不知道哪里发出了WM_PAINT消息。。

#5


当你在调试界面和IDE切换的时候,可能Paint了好几次了

#6


窗口创建时是否带有 WS_VISIBLE 样式?如果有则 WM_PAINT 会调用一次
再加上窗口创建成功后是否调用了 UpdateWindow ?

#7


SetWindowPos、MoveWindow、Invalidate、InvalidateRect、UpdateWindow、ShowWindow、EnableWindow……
这些函数都可能会导致窗口重绘

#8


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#1


累加之类的操作不要在OnPaint里,使用的时机不对,操作系统在任何认为需要重绘的时候都可能发出WM_PAINT消息

#2


引用 1 楼 worldy 的回复:
累加之类的操作不要在OnPaint里,使用的时机不对,操作系统在任何认为需要重绘的时候都可能发出WM_PAINT消息


这个累加只是想看函数调用了几次,就是正常打开这个对话框,这个数就被加了两次,也没找到原因,其他对话框都是一次

#3


要看你对话框中做了什么操作~

#4


引用 3 楼 VisualEleven 的回复:
要看你对话框中做了什么操作~

没有什么别的操作,就是onInitDialog()中有一些初始化工作,但是我断点跟完这个函数,那个变量值也是0,然后运行程序,打开对话框,我在界面显示那个变量,那个变量就是2了,不知道哪里发出了WM_PAINT消息。。

#5


当你在调试界面和IDE切换的时候,可能Paint了好几次了

#6


窗口创建时是否带有 WS_VISIBLE 样式?如果有则 WM_PAINT 会调用一次
再加上窗口创建成功后是否调用了 UpdateWindow ?

#7


SetWindowPos、MoveWindow、Invalidate、InvalidateRect、UpdateWindow、ShowWindow、EnableWindow……
这些函数都可能会导致窗口重绘

#8


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法