Bitblt更换位图(SDK程序)

sunlau29 2008-03-06 02:24:12
使用SDK写了一个图片程序,想实现在按下键盘任意键时候切换图片:

LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
static HBITMAP hBitmapImage;
static HINSTANCE hInstance;
static int l_siClientW,l_siClientH,l_siBitmapW,l_siBitmapH;
BITMAP O_Image;
HDC hdc,hdcImage;
int l_iBitmapX,l_iBitmapY;
PAINTSTRUCT ps;


switch(uMsg)
{
case WM_CREATE:
hInstance=((LPCREATESTRUCT)lParam)->hInstance;

hBitmapImage=(HBITMAP)::LoadImage(NULL,"McDou.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(!hBitmapImage) MessageBox(NULL,"","",MB_OK);
GetObject(hBitmapImage,sizeof(BITMAP),&O_Image);
l_siBitmapW=O_Image.bmWidth;
l_siBitmapH=O_Image.bmHeight;

return 0;

case WM_SIZE:

l_siClientW=LOWORD(lParam);
l_siClientH=HIWORD(lParam);
return 0;

case WM_PAINT:

hdc=BeginPaint(hWnd,&ps);

hdcImage=CreateCompatibleDC(hdc);
SelectObject(hdcImage,hBitmapImage);

l_iBitmapX=(l_siClientW-l_siBitmapW)/2;
l_iBitmapY=(l_siClientH-l_siBitmapH)/2;

BitBlt(hdc,l_iBitmapX,l_iBitmapY,l_siBitmapW,l_siBitmapH,hdcImage,0,0,SRCCOPY);

DeleteDC(hdcImage);
EndPaint(hWnd,&ps);
return 0;

case WM_KEYDOWN:
hBitmapImage=(HBITMAP)::LoadImage(NULL,"G.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(!hBitmapImage) MessageBox(NULL,"","",MB_OK);
GetObject(hBitmapImage,sizeof(BITMAP),&O_Image);
l_siBitmapW=O_Image.bmWidth;
l_siBitmapH=O_Image.bmHeight;
return 0;

case WM_DESTROY:

case WM_CLOSE:
DeleteObject(hBitmapImage);
PostQuitMessage(0);
return 0;

}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

没成功,请高手指点(评论我折段代码的实用性或先进性的免回)。
...全文
90 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunlau29 2008-03-06
  • 打赏
  • 举报
回复
Thanks
用户 昵称 2008-03-06
  • 打赏
  • 举报
回复
在wm_keydown时,用beginpaint等api得到一个dc,往这个dc上bitblt图片,然后invalidate
guanghong 2008-03-06
  • 打赏
  • 举报
回复
case WM_KEYDOWN:
hBitmapImage=(HBITMAP)::LoadImage(NULL,"G.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE ¦LR_CREATEDIBSECTION);
if(!hBitmapImage) MessageBox(NULL,"","",MB_OK);
GetObject(hBitmapImage,sizeof(BITMAP),&O_Image);
l_siBitmapW=O_Image.bmWidth;
l_siBitmapH=O_Image.bmHeight;
//BitBlt(hdc,l_iBitmapX,l_iBitmapY,l_siBitmapW,l_siBitmapH,hdcImage,0,0,SRCCOPY);
//或者在这里发出WM_PAINT的消息,刷新窗口
return 0;

你只是load图片了,并没有往上贴图
程序没仔细看,还有没有其他问题就不知道了

19,468

社区成员

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

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