AnimateWindow调用后背景图片不显示

xiayuxuan91 2013-03-27 09:21:16
想要用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);
}
...全文
182 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiayuxuan91 2013-03-30
  • 打赏
  • 举报
回复
引用 2 楼 sha_jinhao 的回复:
DeleteDC(hdc); getdc 不用deletedc删除!
是的是的,晕,搞错了~~瞎写一通,见笑了
xiayuxuan91 2013-03-30
  • 打赏
  • 举报
回复
的确要处理WM_PRINTCLIENT消息,正是这样子的。 菜鸟在此谢过各位大神。
stjay 2013-03-27
  • 打赏
  • 举报
回复
引用 3 楼 stjay 的回复:
法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;
MSDN说的做法是处理WM_PRINTCLIENT 不过两个都加上比较好,有些控件会出问题,WM_PRINTCLIENT里处理不了
stjay 2013-03-27
  • 打赏
  • 举报
回复
法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;
jimette 2013-03-27
  • 打赏
  • 举报
回复
DeleteDC(hdc); getdc 不用deletedc删除!
xiayuxuan91 2013-03-27
  • 打赏
  • 举报
回复
在线等待各位大神,自己先顶一个~~求大神~~

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧