AnimateWindow调用背部景图片不显示
AnimateWindow调用后背景图片不显示
想要用AnimateWindow函数动态显示窗口,制造点炫酷的感觉,结果,炫倒是炫了,炫的不完美。背景图没显示啊白白的一个窗口。求解啊,各位大神。部分代码如下:
------解决方案--------------------
DeleteDC(hdc);
getdc 不用deletedc删除!
------解决方案--------------------
法1:
在AnimateWindow后面增加InvalidateRect
法2:增加消息WM_PRINTCLIENT处理
------解决方案--------------------
想要用AnimateWindow函数动态显示窗口,制造点炫酷的感觉,结果,炫倒是炫了,炫的不完美。背景图没显示啊白白的一个窗口。求解啊,各位大神。部分代码如下:
void Welcome()
{
WNDCLASS welcome;
HWND hwnd;
MSG msg;
welcome.cbClsExtra=0;
welcome.cbWndExtra=0;
welcome.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
welcome.hCursor=LoadCursor(bground,MAKEINTRESOURCE(IDC_CURSOR1));
welcome.hIcon=LoadIcon(NULL,IDI_APPLICATION);
welcome.hInstance=program;
welcome.lpfnWndProc=WelcomeProc;
welcome.lpszClassName=L"Welcome";
welcome.lpszMenuName=0;
welcome.style=CS_HREDRAW|CS_VREDRAW;
RegisterClass(&welcome);
hwnd=CreateWindow(L"Welcome",L"Welcome",WS_POPUP,0,0,320,480,NULL,NULL,program,NULL);
AnimateWindow(hwnd,2000,AW_CENTER);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,NULL,NULL))
{
if(welcome_flag==0)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
LRESULT CALLBACK WelcomeProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
HDC hdc_paint;
HBITMAP bitmap;
PAINTSTRUCT ps;
switch(msg)
{
case WM_PAINT:
BeginPaint(hwnd,&ps);
hdc=GetDC(hwnd);
hdc_paint=CreateCompatibleDC(hdc);
bitmap=LoadBitmap(bground,MAKEINTRESOURCE(IDB_BITMAP4));
SelectObject(hdc_paint,bitmap);
BitBlt(hdc,0,0,320,480,hdc_paint,0,0,SRCCOPY);
DeleteDC(hdc_paint);
DeleteDC(hdc);
EndPaint(hwnd,&ps);
return 0;
case WM_RBUTTONDOWN:
DestroyWindow(hwnd);
welcome_flag=0;
return 0;
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}
------解决方案--------------------
DeleteDC(hdc);
getdc 不用deletedc删除!
------解决方案--------------------
法1:
在AnimateWindow后面增加InvalidateRect
AnimateWindow(hwnd,2000,AW_CENTER);
UpdateWindow(hwnd); // 这个不起作用啊
InvalidateRect(hWnd, NULL, FALSE);
法2:增加消息WM_PRINTCLIENT处理
case WM_PRINTCLIENT:
hdc=(HDC)wParam;
hdc_paint=CreateCompatibleDC(hdc);
bitmap=LoadBitmap(bground,MAKEINTRESOURCE(IDB_BITMAP4));
HBITMAP bm=(HBITMAP)SelectObject(hdc_paint,bitmap);
BitBlt(hdc,0,0,320,480,hdc_paint,0,0,SRCCOPY);
SelectObject(hdc_paint,bm); //
DeleteObject(bitmap); // 漏了这个释放
DeleteDC(hdc_paint);
return 0;
------解决方案--------------------