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
- win32SDK中使用bmp和png位图
- mfc中使用bmp和png位图
- 位图的读取,PNG转化为BMP
- VC++6.0 中BMP位图的读取和显示
- 窗体中显示BMP位图
- 使用vc显示bmp位图
- 使用vc显示bmp位图
- 使用SDL_Surface显示BMP位图
- win32SDK中使用图片的api
- VC++图片控件(Picture Control)显示资源位图(BMP)、文件位图(BMP)、其它格式文件图片(JPG\PNG\BMP)的方法
- brew 中png转 bmp(转贴)
- Silverlight中使用GIF、PNG、BMP的方法--使用ImageTools第三方
- 在应用程序资源中加载bmp位图
- 使用16位汇编显示bmp位图
- 使用C++读取8位BMP位图
- 如何使用bmp位图制作字符画
- bmp位图和OpenGL的像素操作
- Windows位图和调色板,bmp文件格式
- Android使用代码实现RelativeLayout,LinearLayout布局
- [IOS]手写板
- 去掉ScrollView拉到尽头顶部和底部渐变效果
- Http/Https、TCP/IP与SOCKET的连接
- 在游戏中屏蔽银行
- win32SDK中使用bmp和png位图
- Win8.1学习之----系统遇到DEP0700和出现“This app can't be activated by the Built-in Administrator”问题
- 腾讯一面二面终面真题
- 骨瓷碗
- INSTALL_PARSE_FAILED_NO_CERTIFICATES
- OpenGL--多级纹理
- IO输入输出流学习笔记(第一篇)(JAVA)
- eCos系统CPU负载测量
- 程序员发展规律