以下哪种事件发生时,会有WM_PAINT消息发出?

来源:百度知道 编辑:UC知道 时间:2024/06/28 15:48:39
A) 线程启动 B) 鼠标点击 C) 程序退出 D) 窗口移动
关于窗口移动,我在OnPaint函数最开始加了MESSAGEBOX,只有最开始创建的时候出了一堆信息,然后用鼠标拖着乱动,一直没有MESSAGEBOX出现
使用SPY++测试也是没有重绘的
当然一个窗口移动覆盖另一个窗口必然会引起另一个窗口的重绘……

奇怪你 “OnPaint函数最开始加了MESSAGEBOX”程序还能动?
关闭MESSAGEBOX的时候又会触发 WM_PAINT的,也就是说会是一个死循环的。

ABC 都不会直接产生WM_PAINT,D如果当前窗口部分被其他窗口覆盖的话会产生WM_PAINT,如果未被覆盖,当前窗口就不产生PAINT消息。

窗口移动肯定要重绘的
void CDateLedDlg::OnPaint()
{
if (IsIconic())
{
//MessageBox(...)这边的有可能不被调用
//
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//MessageBox(...)这边的肯定会被调用
}
}

选 A)线程启动
鼠标点击一般不会发WM_PAINT,除非引起其它事件
程序退出不会
窗口移动一般也不会,用SPY++试试就知道了。

D 窗口移动了,当然