win32SDK中使用bmp和png位图

来源:互联网 发布:微软最牛程序员 编辑:程序博客网 时间:2024/05/20 11:48

Win32SDK.h

#pragma once#include <windows.h>#include <tchar.h>#include <assert.h>#include <GdiPlus.h>#include <AtlImage.h>#pragma comment(lib,"gdiplus.lib")//命名空间using namespace Gdiplus;//绘画模式#define DRAW_MODE_SPREAD0//平铺模式#define DRAW_MODE_CENTENT1//居中模式#define DRAW_MODE_ELONGGATE2//拉伸模式//全局变量定义CImagem_Imagebmp;//bmp图片Image *m_pImage=NULL;//png图片HWNDg_hwnd;//窗口句柄TCHARszWindowClass[]=TEXT("哈哈");//全局函数定义//窗口回调LRESULT CALLBACKWndProc(HWND, UINT, WPARAM, LPARAM);//创建事件bool OnCreate(HWND hwnd);//绘画背景VOID DrawViewImage(HDC DC, CImage & BitImage, BYTE cbDrawMode);//绘画PNG图像bool DrawImagePng(HDC DC, INT nXPos, INT nYPos);


Win32SDK.cpp

#include "Win32SDK.h"int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){WNDCLASSEX wcex={0};wcex.cbSize = sizeof(WNDCLASSEX);wcex.style= CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc= WndProc;wcex.cbClsExtra= 0;wcex.cbWndExtra= 0;wcex.hInstance= hInstance;wcex.hIcon= LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION));wcex.hCursor= LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName= NULL;wcex.lpszClassName= szWindowClass;wcex.hIconSm= LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION));RegisterClassEx(&wcex);HWND hWnd;hWnd = CreateWindow(szWindowClass, TEXT("标题"), WS_OVERLAPPEDWINDOW,0, 0, 600, 400, NULL, NULL, hInstance, NULL);if (!hWnd)return FALSE;ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);MSG msg={0};while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return (int) msg.wParam;}LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;switch (message){case WM_CREATE:OnCreate(hWnd);break;case WM_COMMAND:{wmId    = LOWORD(wParam);wmEvent = HIWORD(wParam);// 分析菜单选择:switch (wmId){case IDOK:break;default:return DefWindowProc(hWnd, message, wParam, lParam);}}break;case WM_PAINT:{hdc = BeginPaint(hWnd, &ps);// TODO: 在此添加任意绘图代码...DrawViewImage(hdc,m_Imagebmp,DRAW_MODE_CENTENT);DrawImagePng(hdc,0,0);EndPaint(hWnd, &ps);}break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;}bool OnCreate(HWND hwnd){g_hwnd=hwnd;//窗口居中int x=GetSystemMetrics(SM_CXSCREEN);int y=GetSystemMetrics(SM_CYSCREEN);RECT WindowRect;GetWindowRect(hwnd,&WindowRect);int cx=(x-WindowRect.right)/2;int cy=(y-WindowRect.bottom)/2;SetWindowPos(hwnd,NULL,cx,cy,NULL,NULL,SWP_SHOWWINDOW|SWP_NOSIZE);//加载 bmp文件m_Imagebmp.Load(TEXT("res\\bmp\\VIEW_BACK.bmp"));//加载 png文件CT2CW strFileName(TEXT("res\\png\\READY.png"));m_pImage=Image::FromFile((LPCWSTR)strFileName);//错误判断if ((m_pImage==NULL)||(m_pImage->GetLastStatus()!=Ok)) {try { delete m_pImage; } catch (...) { assert(FALSE); } m_pImage=NULL;return false;}return true;}//绘画背景VOID DrawViewImage( HDC DC, CImage & BitImage, BYTE cbDrawMode ){//获取位置CRect rcClient;GetClientRect(g_hwnd,&rcClient);//无效区域RECT rcDirty={0};GetClipBox(DC,&rcDirty);//绘画位图switch (cbDrawMode){case DRAW_MODE_SPREAD://平铺模式{//加载资源INT nImageWidth=BitImage.GetWidth();INT nImageHeight=BitImage.GetHeight();//绘画位图for (INT nXPos=0;nXPos<rcClient.right;nXPos+=nImageWidth){for (INT nYPos=0;nYPos<rcClient.bottom;nYPos+=nImageHeight){BitImage.BitBlt(DC,nXPos,nYPos);}}return;}case DRAW_MODE_CENTENT://居中模式{//变量定义INT nImageWidth=BitImage.GetWidth();INT nImageHeight=BitImage.GetHeight();//位置计算INT nXPos=(rcClient.Width()-BitImage.GetWidth())/2;INT nYPos=(rcClient.Height()-BitImage.GetHeight())/2;//绘画位图BitImage.BitBlt(DC,nXPos,nYPos);return;}case DRAW_MODE_ELONGGATE://拉伸模式{//变量定义INT nImageWidth=BitImage.GetWidth();INT nImageHeight=BitImage.GetHeight();//绘画位图BitImage.StretchBlt(DC,0,0,rcClient.Width(),rcClient.Height(),0,0,nImageWidth,nImageHeight);return;}}return;}//绘画PNG图像bool DrawImagePng( HDC DC, INT nXPos, INT nYPos ){//加载判断assert(m_pImage!=NULL);if (m_pImage==NULL) return false;//创建屏幕assert(DC!=NULL);Graphics graphics(DC);//获取属性INT nImageWidth=m_pImage->GetWidth();INT nImageHeight=m_pImage->GetHeight();//构造位置RectF rcDrawRect;rcDrawRect.X=(REAL)nXPos;rcDrawRect.Y=(REAL)nYPos;rcDrawRect.Width=(REAL)nImageWidth;rcDrawRect.Height=(REAL)nImageHeight;//绘画图像graphics.DrawImage(m_pImage,rcDrawRect,0,0,(REAL)nImageWidth,(REAL)nImageHeight,UnitPixel);return true;}


 

0 0
原创粉丝点击