之前觉得已经理解了,但怎么理论和实践就是有差距呢,
原因如下:LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
PAINTSTRUCT ps;
switch(msg)
{
case WM_ERASEBKGND: return true;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
::GetClientRect(hwnd,&rect);
hmendc=CreateCompatibleDC(hdc);

hbtm=LoadBitmap(hInst,MAKEINTRESOURCE(bit[0]));

SelectObject(hmendc,hbtm);
GetObject(hbtm,sizeof(BITMAP),&bitmap);

StretchBlt(hdc,0,0,rect.right,rect.bottom,hmendc,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);

::TextOut(hdc,100,100,"图书管理系统",strlen("图书管理系统"));
    ::DeleteObject(hbtm);
DeleteDC(hmendc);
EndPaint(hwnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,msg,wparam,lparam);
}
return 0;
}已知
WM_ERASEBKGND 擦出背景色
WM_PAINT绘制前景色、、、、、、、、、、、、、、、、、、、、、、
窗口刚生成时(即调用UpdateWindows哪个函数时),触发WM_ERASEBKGND消息和WM_PAINT消息,如果没有自定义WM_ERASEBKGND则DefWindowProc()会调用注册窗口类的画刷(wnd.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);),我想在WM_PAINT贴图,代码如上,窗口刚出来时,背景是默认画刷,然后我自定义WM_ERASEBKGND,返回true,通知系统,窗口背景已经擦除,而结果是背景为透明(就是没有调用DefWindowProc()),j就是说不管擦不擦除背景,贴图都不出来,只有第二次产生WM_PAINT(点击最大最小,覆盖等),贴图才出来,这个我就不明白了,不过在WM_PAINT里TextOut文字可以出来,(是不是贴图是背景,文字是前景),还是有点晕,请详细解答