c++windows编程加载图片

// yidongtupian.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "yidongtupian.h"

#include "windows.h"
#include <stdio.h>

#define MAX_LOADSTRING 100

HINSTANCE hInst;
HBITMAP girl[4],bg;
HDC hdc,mdc,bufdc;
HWND hWnd;
DWORD tPre,tNow;
int num,dir,x,y;
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void MyPaint(HDC hdc);

int APIENTRY WinMain(HINSTANCE hInstance,
					 HINSTANCE hPrevInstance,
					 LPSTR lpCmdLine,
					 int nCmdShow)
{
	MSG msg;
	MyRegisterClass(hInstance);
	if (!InitInstance (hInstance, nCmdShow))
	{
	    return FALSE;
	}
    GetMessage(&msg,NULL,NULL,NULL);
	while( msg.message!=WM_QUIT )
	{
		if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		} 
		else
		{
			tNow=GetTickCount();
            if (tNow-tPre>=40)
            {
				MyPaint(hdc);
            }
		}
	}
	return msg.wParam;
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
	WNDCLASSEX wcex;
	wcex.cbSize=sizeof(WNDCLASSEX);
	wcex.style= CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc= (WNDPROC)WndProc;
	wcex.cbClsExtra=0;
	wcex.cbWndExtra=0;
	wcex.hInstance=hInstance;
	wcex.hIcon=NULL;
	wcex.hCursor=NULL;
	wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
    wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName=NULL;
	wcex.lpszClassName=TEXT("canvas");
	wcex.hIconSm=NULL;
	return RegisterClassEx(&wcex);
}
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    HBITMAP bmp;
	hInst=hInstance;
	hWnd=CreateWindow(TEXT("canvas"),TEXT("绘图窗口"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
    if (!hWnd)
	{
	    return FALSE;
	}
	MoveWindow(hWnd,10,10,640,480,true);
	ShowWindow(hWnd, nCmdShow);
	UpdateWindow(hWnd);
	hdc = GetDC(hWnd);
	mdc = CreateCompatibleDC(hdc);
	bufdc = CreateCompatibleDC(hdc);
	bmp = CreateCompatibleBitmap(hdc,640,480);
	SelectObject(mdc,bmp);
    x = 300;
	y = 260;
	dir = 0;
	num = 0;
	girl[0] =(HBITMAP)LoadImage(NULL,TEXT("C:/Users/dell/Desktop/新建文件夹/girl0.bmp"),IMAGE_BITMAP,59,59,LR_LOADFROMFILE);
    girl[1] =(HBITMAP)LoadImage(NULL,TEXT("C:/Users/dell/Desktop/新建文件夹/girl1.bmp"),IMAGE_BITMAP,59,59,LR_LOADFROMFILE);
    girl[2] =(HBITMAP)LoadImage(NULL,TEXT("C:/Users/dell/Desktop/新建文件夹/girl2.bmp"),IMAGE_BITMAP,59,59,LR_LOADFROMFILE);
    girl[3] =(HBITMAP)LoadImage(NULL,TEXT("C:/Users/dell/Desktop/新建文件夹/girl3.bmp"),IMAGE_BITMAP,59,59,LR_LOADFROMFILE);
    bg =(HBITMAP)LoadImage(NULL,TEXT("C:/Users/dell/Desktop/新建文件夹/bg.bmp"),IMAGE_BITMAP,640,480,LR_LOADFROMFILE);
    MyPaint(hdc);
    return TRUE;
}
void MyPaint(HDC hdc)
{
	int w,h;
	SelectObject(bufdc,bg);
    BitBlt(mdc,0,0,640,480,bufdc,0,0,SRCCOPY);
	SelectObject(bufdc,girl[dir]);
    switch(dir)
	{
		case 0:
			w = 55;
			h = 74;
			break;
		case 1:
			w = 53;
			h = 77;
			break;
		case 2:
			w = 60;
			h = 74;
			break;
		case 3:
			w = 60;
			h = 74;
			break;
	}
	BitBlt(mdc,x,y,w,h,bufdc,num*w,h,SRCAND);
	BitBlt(mdc,x,y,w,h,bufdc,num*w,0,SRCPAINT);
	BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
	tPre=GetTickCount();
    num++;
	if (num==8)
	{
		num=0;
	}
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,LPARAM lParam)
{
	switch(message)
	{
       case WM_KEYDOWN:
		   switch (wParam)
		   {
		   case VK_ESCAPE:
			   PostQuitMessage( 0 );
			   break;
		   case VK_UP:
			   switch(dir)
			   {
			    case 0:
					 y -= 1;  
					 break;
				case 1:
					 x -= 1;
					 y -= 1;
					 break;
				case 2:
					 x += 1;
					 y -= 1;
					 break;
			    case 3:
					 x += 1;
			         y -= 1;
				     break;
				}
			   if(y < 0)
				   y = 0;
			   dir = 0;
			   break;
			   case VK_DOWN:
			   switch(dir)
			   {
				case 0:
					   x += 1;
	                   y += 1;
			           break;
				case 1:
					   y += 1;
					   break;
				case 2:
					   x += 1;
					   y += 1;
					   break;
			    case 3:
					   x += 1;
					   y += 1;
					   break;
			   }
			    if(y > 375)
				       y = 375;
			           dir = 1;
			           break;
			   case VK_LEFT:
				   switch(dir)
				   {
				   case 0:
					   x -= 1;
					   break;
				   case 1:
					   x -= 1;
                       y += 1;
					   break;
				   case 2:
					   x -= 1;
					   break;
				   case 3:
					   x -= 1;
					   break;
				   }
				   if(x < 0)
					   x = 0;
				       dir = 2;
				   break;
				   case VK_RIGHT:
				   switch(dir)
				   {
				    case 0:
					x += 1;
					break;
					case 1:
					x += 1;
				    y += 1;
					break;
					case 2:
						x += 1;
						break;
					case 3:
						x += 1;
						break;
				   }
				   if(x > 575)
					   x = 575;
				       dir = 3;
				   break;
		   }
               break;
		   case  WM_DESTROY:
			   int i;
			   DeleteDC(mdc);
			   DeleteDC(bufdc);
			   for (i=0;i<4;i++)
			   {
				   DeleteObject(girl[i]);
			   }
			   DeleteObject(bg);
			   ReleaseDC(hWnd,hdc);
			   PostQuitMessage(0);
			   break;
		   default:
			   return DefWindowProc(hWnd,message,wParam,lParam);
		   
	}
	return 0;
}


















  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值