为什么InvalidateRect刷新后,位图就不显示了呢?急急急,新手刚入门,老师说必须用win32 api来编。

LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam){staticintcxCli... LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxClient, cyClient ;
HDC hdc;
static int i=1;
static HDC hdcmem;//wo kao,wei shen me???!!!
PAINTSTRUCT ps;
HBITMAP hbm;
switch (message)
{
case WM_SIZE:
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;
break ;

case WM_CREATE:
hdc=GetDC(hwnd);
hdcmem=CreateCompatibleDC(hdc);
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
if(i==1)
{
hbm=(HBITMAP)LoadImage(NULL,"1.bmp",IMAGE_BITMAP,cxClient,cyClient,LR_LOADFROMFILE);//加载一张指定了路径的bmp图片,此图片大小为63*128,用这个函数之前需要知道这张图的大小,分别填写在第4、5个参数里
}
else if(i==2)
{
hbm=(HBITMAP)LoadImage(NULL,"2.bmp",IMAGE_BITMAP,cxClient,cyClient,LR_LOADFROMFILE);
}
。。。。。
else if(i==10)
{
hbm=(HBITMAP)LoadImage(NULL,"10.bmp",IMAGE_BITMAP,cxClient,cyClient,LR_LOADFROMFILE);
}
SelectObject(hdcmem,hbm);
BitBlt(hdc,0,0,cxClient,cyClient,hdcmem,0,0,SRCAND);//显示这张图
EndPaint(hwnd,&ps);
i++;
if(i==11) i=1;
Sleep(1000);
InvalidateRect(hwnd,NULL,1);
break;

case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
break;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}是打算轮流显示营造出动态效果的,但刷新一次后就不显示图了,求大神帮看看啊,急急急,无比感激谢谢。
展开
 我来答
百度网友495e229
推荐于2016-08-11 · TA获得超过699个赞
知道小有建树答主
回答量:332
采纳率:87%
帮助的人:127万
展开全部
我感觉在endpaint之后调用 好像不合适吧
endpaint放到invalidateRect后面试试
追问
还是不行额。。。。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式