GDI+ 相关用法

#define GDIPVER 0x0110			//定义高版本的GDI+(1.1)
#include <windows.h>
#include <ObjIdl.h>
#include <stdio.h>
#include <GdiPlus.h>
#pragma comment(lib,"GdiPlus.lib")
using namespace Gdiplus;

VOID OnPaint(HDC hDC)
{
	//在此处添加重绘代码
}

LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
	case WM_PAINT:
		{
			PAINTSTRUCT PaintStruct;
			HDC hDC = BeginPaint(hWnd,&PaintStruct);
			OnPaint(hDC);
			EndPaint(hWnd,&PaintStruct);
		}
		break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
	default:
		return DefWindowProc(hWnd, msg, wParam, lParam);
		break;
    }
	return LRESULT(0);
}

INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
	//初使化GDI+	----------------------------------------
	ULONG_PTR GdiplusToken;
	GdiplusStartupInput GdiplusStartupInput;
	Status sResult = GdiplusStartup(&GdiplusToken, &GdiplusStartupInput, NULL);
	if(sResult != Ok)return 0;

    WNDCLASSEX WndClassEx = 
	{
		sizeof(WNDCLASSEX), 
		CS_HREDRAW | CS_VREDRAW,
		WinProc,
		0L,
		0L,
		GetModuleHandle(NULL),
		LoadIcon(NULL, IDI_APPLICATION),
		LoadCursor(NULL,IDC_ARROW),
		(HBRUSH)GetStockObject(WHITE_BRUSH),
		NULL,
		_T("SimpleWindowClass"),
		LoadIcon(NULL, IDI_APPLICATION)
	};
    RegisterClassEx(&WndClassEx);

    HWND hWnd = CreateWindow(
		_T("SimpleWindowClass"),
		_T("Beacon Window"),
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		GetDesktopWindow(),
		NULL,
		WndClassEx.hInstance,
		NULL);

    ShowWindow(hWnd, SW_SHOWDEFAULT);
    UpdateWindow(hWnd);
	
    MSG Msg;
    do
    {
		GetMessage(&Msg, NULL, 0U, 0U);
		TranslateMessage(&Msg);
		DispatchMessage(&Msg);
    }while(Msg.message != WM_QUIT);

    UnregisterClass(
		_T("SimpleWindowClass"),
		WndClassEx.hInstance);
	//关闭GDI+		----------------------------------------
	GdiplusShutdown(GdiplusToken);
    return 0;
}
VOID OnPaint(HDC hDC)
{
	Graphics g(hDC);
    
    /*
	//加载和显示图元文件
	Image i(L"Image.wmf");
	g.DrawImage(&i,60,60);
	*/

	//记录图元文件
	Metafile m(L"SampleMetafile.emf");
	{
		Graphics gm(&m);										//在括号中使程序离开括号即销毁gm

		Pen p(Color(255,0,255,0));
		SolidBrush sb(Color(255,0,0,255));

		//绘制矩形和椭圆
		gm.DrawRectangle(&p,Rect(50,10,25,75));
		gm.DrawEllipse(&p,Rect(100,10,25,75));

		//以指定的平滑模式绘制椭圆
		gm.SetSmoothingMode(SmoothingModeHighQuality);			//设置滤波模式(抗锯齿)
		gm.DrawEllipse(&p,Rect(150,10,25,75));

		//绘制字符串
		FontFamily ff(L"Arial");
		Font f(&ff,24,FontStyleRegular,UnitPixel);
		gm.SetTextRenderingHint(TextRenderingHintAntiAlias);	//设置字体渲染模式
		gm.RotateTransform(30.0f);								//旋转坐标系
		gm.DrawString(L"Smooth Text",-1,&f,PointF(50.0f,50.0f),&sb);
	}

	g.DrawImage(&m,200,100);
}

/*
enum QualityMode
{
    QualityModeInvalid   = -1,
    QualityModeDefault   = 0,
    QualityModeLow       = 1,
    QualityModeHigh      = 2
};
enum SmoothingMode							//滤波模式
{
    SmoothingModeInvalid     = QualityModeInvalid,		//保留
    SmoothingModeDefault     = QualityModeDefault,		//不使用
    SmoothingModeHighSpeed   = QualityModeLow,			//低
    SmoothingModeHighQuality = QualityModeHigh,			//高
    SmoothingModeNone,									//不使用
    SmoothingModeAntiAlias,								//8x4抗锯齿
#if (GDIPVER >= 0x0110)
    SmoothingModeAntiAlias8x4 = SmoothingModeAntiAlias,	//8x4抗锯齿
    SmoothingModeAntiAlias8x8							//8x8抗锯齿
#endif //(GDIPVER >= 0x0110) 
};

enum TextRenderingHint						//字体渲染微调
{
    TextRenderingHintSystemDefault = 0,            //使用默认微调
    TextRenderingHintSingleBitPerPixelGridFit,     //使用微调
    TextRenderingHintSingleBitPerPixel,            //不使微调
    TextRenderingHintAntiAliasGridFit,             //使用抗锯齿且使用微调
    TextRenderingHintAntiAlias,                    //使用抗锯齿且不使用微调
    TextRenderingHintClearTypeGridFit              //使用ClearType模式
};

#include <afxwin.h>

class CMFCApp:
	public CWinApp
{
public:
	virtual BOOL InitInstance();
}g_theApp;

class CMainFrame:
	public CFrameWnd
{

public:
	CMainFrame();
private:
	DECLARE_MESSAGE_MAP()
public:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

private:
    CDC     m_memDC;
    CBitmap m_memBitmap;
public:
    afx_msg void OnTimer(UINT_PTR nIDEvent);
};

BOOL CMFCApp::InitInstance()
{
	m_pMainWnd = new CMainFrame();		//创建一个新的框架
	m_pMainWnd->ShowWindow(SW_SHOW);	//显示窗口
	m_pMainWnd->UpdateWindow();			//刷新窗口
	return TRUE;
}

CMainFrame::CMainFrame()
{
	//创建窗口
	Create(
		NULL,						//窗口类名
		_T("Simple MFC Window"),	//窗口标题
		WS_OVERLAPPEDWINDOW,		//窗口样式
		CRect(0,0,640,480));		//窗口矩形
}
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    ON_WM_CREATE()
    ON_WM_TIMER()
END_MESSAGE_MAP()

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    CRect rcClient;
    GetClientRect(rcClient);

    CDC * pDC = this->GetDC();

    if( !m_memDC.CreateCompatibleDC(pDC) )
        ::PostQuitMessage( 0 );
    m_memBitmap.CreateCompatibleBitmap( pDC, rcClient.Width(), rcClient.Height() );
    m_memDC.SelectObject( &m_memBitmap );

    SetTimer( 0, 50, NULL );
    ReleaseDC( pDC );

    return 0;
}


void CMainFrame::OnTimer(UINT_PTR nIDEvent)
{
    static int nRadius = 0;
    ++nRadius;
    if( nRadius > 15 ) nRadius = 0;

    CDC * pPaintDC = GetDC();

    CRect rcClient;
    GetClientRect(rcClient);

    m_memDC.FillSolidRect( &rcClient, RGB(0xFF,0xFF,0xFF) );
    for(int x(0); x < rcClient.Width(); x += 16 )
    {
        for(int y(0); y < rcClient.Height(); y += 16 )
        {
            m_memDC.Ellipse( x, y, x + nRadius, y + nRadius );
        }
    }

    pPaintDC->BitBlt( 0, 0, rcClient.Width(), rcClient.Height(), &m_memDC, 0, 0, SRCCOPY );
    ReleaseDC( pPaintDC );

    CFrameWnd::OnTimer(nIDEvent);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值