// 使用说明 需要附加入库 Gdiplus.lib
// 需要使用三张图片 分别命名 2.png 3.png 9.png
// 使用VC 或vs 创建空项目win32 ,添加文件winmain.cpp ,把下面内容加到文件中
#include <stdio.h>
#include <stdlib.h>
#include <gdiplus.h>
bool m_bTest = true;
WCHAR strImgName[100];
int m_number = 0;
/* GDI+ startup token */
ULONG_PTR gdiplusStartupToken;
PAINTSTRUCT ps; // 点结构
int m_waveData[300];
//消息回调函数,包含界面消息
LRESULT CALLBACK MyWindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
//主函数入口
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
/*初始化GDIpuls*/
Gdiplus::GdiplusStartupInput gdiInput;
Gdiplus::GdiplusStartup(&gdiplusStartupToken,&gdiInput,NULL);
//初始化图片名称
wcscpy(strImgName,L"2.png");WNDCLASS wndclass; //窗体类
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
wndclass.hCursor = LoadCursor( 0, IDC_HAND );
wndclass.hIcon = LoadIcon( 0, IDI_INFORMATION );
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = MyWindowProc;
wndclass.lpszClassName = TEXT("hg");
wndclass.lpszMenuName = NULL;
wndclass.style = CS_HREDRAW | CS_VREDRAW ; // 指定窗体风格
//注册类
if (!RegisterClass( &wndclass ) )
{
MessageBox( 0, TEXT("reg err"), TEXT("reg err"), 0 );
}
//创建窗体
HWND hwnd = CreateWindow( TEXT("hg"), TEXT("Helloworldhhh"), WS_OVERLAPPEDWINDOW, 0, 0, 1024, 768, NULL,NULL,hInstance, NULL );
if ( !hwnd)
{
MessageBox( hwnd, TEXT("create windows err"), TEXT("create windows err"), 0 );
}
//显示窗体
ShowWindow( hwnd, SW_SHOW );
UpdateWindow( hwnd );
MSG msg;
//消息处理
while ( GetMessage( &msg, 0, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return 0;
}
LRESULT CALLBACK MyWindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
int wmId, wmEvent;
switch ( uMsg )
{
case WM_CLOSE:
{
Gdiplus::GdiplusShutdown(gdiplusStartupToken);
PostQuitMessage(0);
}
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
case WM_RBUTTONDBLCLK: //鼠标右击
//MessageBox(NULL,"dd","ss",MB_OK);
//DestroyWindow(hwnd);
break;
case WM_LBUTTONDOWN: //鼠标左击 切换显示图片
if(m_bTest)
{
wcscpy(strImgName,L"3.png");
m_bTest = false;
}else
{
wcscpy(strImgName,L"2.png");
m_bTest = true;
}
RedrawWindow(hwnd,NULL,NULL,RDW_INVALIDATE | RDW_UPDATENOW);
break;
case WM_KEYDOWN: //键盘消息
{
switch(wParam)
{
case VK_LEFT: //左击
{
wcscpy(strImgName,L"3.png");
}
break;
case VK_RIGHT: //右击
{
wcscpy(strImgName,L"2.png");
}
break;
case VK_ESCAPE:
{
Gdiplus::GdiplusShutdown(gdiplusStartupToken);
PostQuitMessage(0);
}
break;
}
//有界面修改时,执行更新重画,切记勿重画背景
RedrawWindow(hwnd,NULL,NULL,RDW_INVALIDATE | RDW_UPDATENOW);
}
break;
case WM_PAINT:
{
HDC hdc; // DC句柄
HPEN hPen; // 笔句柄
HPEN hPenOld; // 用于保存原笔的句柄
hdc = BeginPaint (hwnd , &ps); // 获得DC句柄,开始绘制,其中hWnd为窗口句柄
using namespace Gdiplus; // 加入命名空间
GetClientRect(hwnd,&rc);
Bitmap bmp(int(rc.right),int(rc.bottom));
Graphics bmpGraphics(&bmp);
bmpGraphics.SetSmoothingMode(SmoothingModeAntiAlias);
/*Drawing on bitmap*/
//SolidBrush bkBrush(Color(0,0,0));
//bmpGraphics.FillRectangle(&bkBrush,0,0,rc.right,rc.bottom);
Gdiplus::Image image2(L"9.png");
Gdiplus::Image image(strImgName);
Gdiplus::Graphics graphics(hdc);
bmpGraphics.DrawImage(&image2,0,0,600,400);
bmpGraphics.DrawImage(&image,100,100,300,100);
/*Important! Create a CacheBitmap object for quick drawing*/
bmpGraphics.DrawImage(&image2,0,0,600,400);
bmpGraphics.DrawImage(&image,100,100,300,100);
Gdiplus::FontFamily fontFamily(L"Times New Roman"); // 创建字体族对象
Gdiplus::Font font(&fontFamily, 20); // 创建5号字大小的Times New Roman字体
Gdiplus::SolidBrush brush(Gdiplus::Color(255, 128, 50)); // 创建绿色的实心刷(写字符串用)
for(int i=0;i<4;i++)
{
bmpGraphics.DrawString(strImgName, -1 ,&font,Gdiplus::PointF(400, 110 *i + 20), &brush);
}
CachedBitmap cachedBmp(&bmp,&graphics);
// 在此处一并提交,以免出现屏幕闪烁
graphics.DrawCachedBitmap(&cachedBmp,0,0);
Gdiplus::Pen myPen(Gdiplus::Color(255, 128, 50));
//for(int i=0;i<300;i++)
//{
// graphics.DrawLine(&myPen,0,0,300,200);
//}
hPen = CreatePen(PS_SOLID, 3, RGB(255, 0, 0) ); // 创建红色画笔,宽3
hPenOld = (HPEN)SelectObject(hdc, hPen); // 选笔入DC
MoveToEx(hdc, 20, 10, NULL); // 最后一个参数是返回用的旧当前点的结构指针
//LineTo(hdc, 200, 100) ; // 画线
DeleteObject(hPen); // 删除创建的笔
EndPaint(hwnd, &ps) ; // 绘制结束
}
break;
//case WM_ERASEBKGND:
// break;
default:
return DefWindowProc( hwnd, uMsg, wParam, lParam );
}
return 0;
}