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_SPREAD 0 //平铺模式
- #define DRAW_MODE_CENTENT 1 //居中模式
- #define DRAW_MODE_ELONGGATE 2 //拉伸模式
- //全局变量定义
- CImage m_Imagebmp; //bmp图片
- Image * m_pImage=NULL; //png图片
- HWND g_hwnd; //窗口句柄
- TCHAR szWindowClass[]=TEXT("哈哈");
- //全局函数定义
- //窗口回调
- LRESULT CALLBACK WndProc(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;
- }