1、在窗口函数里面不处理消息直接return 0;那么在创建窗口的时候就会失败,返回非0就没有问题,为什么呢?
2、如果窗口函数最后返回的不是return DefWindowProc();而是其他的0,或者其他数,那好像就会不断的发送WM_PAINT消息,比如下面的代码,窗口就会不断的刷新。
case WM_PAINT:
// hdc = BeginPaint(hWnd, &ps);
RECT rt;
HDC hdc;
HPEN hpen;
HBRUSH hbrush;
HPEN holdpen;
POINT pt[500];
// ::InvalidateRect(hWnd,NULL,true);
hdc=::GetDC(hWnd);
::SetMapMode(hdc,MM_LOMETRIC); //坐标映射方式
::SetWindowExtEx(hdc,500,500,NULL); //单位长度
::SetViewportExtEx(hdc,500,-500,NULL); //定义域值域
::SetViewportOrgEx(hdc,250,250,NULL); //原点坐标
hbrush=::CreateSolidBrush(RGB(255,255,255));
hpen=::CreatePen(PS_SOLID,0,RGB(0,0,0));
::SelectObject(hdc,hbrush);
::SelectObject(hdc,hpen);
::GetWindowRect(hWnd,&rt);
::SetPixel(hdc,50,50,RGB(255,0,0));
::Ellipse(hdc,200,200,-200,-200); //半径200像素,中心(250,250)
hbrush=::CreateSolidBrush(RGB(255,0,0));
::SelectObject(hdc,hbrush);
::Ellipse(hdc,10,10,-10,-10); //表盘中心点半径4像素 //画表盘数字
int i;

for(i=0;i<12;i++)
{
::Ellipse(hdc,200*::sin(i*3.14*2/12)+20,200*::cos(i*3.14*2/12)+20,
200*::sin(i*3.14*2/12)-20,200*::cos(i*3.14*2/12)-20);
//::TextOut(hdc,150*::sin(i*2*3.14/12),150*::cos(i*2*3.14/12),p[i],p[i].GetLength());
}
//指针走动
::MoveToEx(hdc,0,0,NULL);
::LineTo(hdc,200*::sin(j*3.14*2/60),200*::cos(j*3.14*2/60));
::ReleaseDC(hWnd,hdc);
// TODO: 在此添加任意绘图代码...
// EndPaint(hWnd, &ps);
return 1;
为什么呢?

解决方案 »

  1.   

    1.DefWindowProc的返回值根据MSDN里的说法是不同的msg就有不同的返回值,应该是创建窗口的时候需要到这个返回值,然后你返回0,就失败了。
    2.你试试把beginpaint和endpaint这两句代码的注释去掉,看看还会不会不断刷新。我觉得是因为无效区域一直没有被清除,所以导致程序会不断发送WM_PAINT来刷新区域,endpaint中会在paint之后把无效区域清除的。
      

  2.   

    BeginPaintEndPaint调用这2个就不会不断发送 WM_PAINT  消息了 ,应为这个消息你没处理 所以肯定会一直发送啊
      

  3.   

    1、在窗口函数里面不处理消息直接return 0;那么在创建窗口的时候就会失败,返回非0就没有问题,为什么呢?
    ===========
    对于你不处理的消息,应该交给DefWindowProc来处理,因为有很多消息,你对它不感兴趣,但是这个消息却是必须的,也有可能由这个消息引发下一个消息,所以交由DefWindowPorc来进行默认处理不会出问题。另外也不是所有消息return 0都会出错,很多消息return 0是可以的。
    2、如果窗口函数最后返回的不是return DefWindowProc();而是其他的0,或者其他数,那好像就会不断的发送WM_PAINT消息,比如下面的代码,窗口就会不断的刷新。 
    ================================
    你举的例子并不关DefWindowProc的事,你的代码中注释了BeginPaint和EndPaint,无效区不能变为有效区,系统就会不停地发WM_PAINT