一段代码求c转au3-关于gdi+的【已解决】【自己搞定】
本帖最后由 yamakawa 于 2017-7-24 19:22 编辑// TaiJi.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "TaiJi.h"
/*
* 由于需要用GDI+进行绘图,所以需要先含GDI+库
* 首先,包含Gdiplus.h头文件, 引入Gdiplus命名空间, 包含gdiplus.lib库
* 在stdafx.h头文件中,取消 WIN32_LEAN_AND_MEAN 宏的定义,如果不取消这个宏定义,编译时会报错.
*/
#include <GdiPlus.h>
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")
#define MAX_LOADSTRING 100
// 全局变量:
HINSTANCE hInst; // 当前实例
TCHAR szTitle = TEXT("旋转的太极"); // 标题栏文本
TCHAR szWindowClass; // 主窗口类名
ULONG_PTR GdiplusToken;
// 此代码模块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: 在此放置代码。
MSG msg;
HACCEL hAccelTable;
// 初始化全局字符串
LoadString(hInstance, IDC_TAIJI, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TAIJI));
// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
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(hInstance, MAKEINTRESOURCE(IDI_TAIJI));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
return RegisterClassEx(&wcex);
}
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // 将实例句柄存储在全局变量中
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, 600, 400, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
GdiplusStartupInput gdiplusStartupInput;
const int width = 300;
const int height = 300;
static RECT rect;
static Bitmap *pBufferBmp;
static Graphics *pGrphBmp;
static SolidBrush* pBrsh1;
static SolidBrush* pBrsh2;
switch (message)
{
case WM_CREATE:
//初始化GDI+
GdiplusStartup(&GdiplusToken, &gdiplusStartupInput, NULL);
//获取客户区的大小,计算位图在客户区居中显示的位置
GetClientRect(hWnd, &rect);
rect.left = (rect.right - width) / 2;
rect.right = rect.left + width;
rect.top = (rect.bottom - height) / 2;
rect.bottom = rect.top + height;
//创建一个黑色画刷
pBrsh1 = new SolidBrush(Color::Black);
//创建一个白色画刷
pBrsh2 = new SolidBrush(Color::White);
//创建一个宽高300像素的正方形位图
pBufferBmp = new Bitmap(width, height);
pGrphBmp = Graphics::FromImage(pBufferBmp);
//设置绘制图形时消除锯齿
pGrphBmp->SetSmoothingMode(SmoothingModeAntiAlias);
//设置坐标原点位于位图的中心
pGrphBmp->TranslateTransform(float(width/2), float(height/2));
SetTimer(hWnd, 1, 30, NULL);
break;
case WM_TIMER:
//逆时针每次旋转坐标5度
pGrphBmp->RotateTransform(-5);
//用黄绿色填充位图背景
pGrphBmp->Clear(Color::YellowGreen);
//用黑色画刷绘制左侧的黑色半圆
pGrphBmp->FillPie(pBrsh1, -100, -100, 200, 200, 90, 180);
//用白色画刷绘制右侧的白色半圆
pGrphBmp->FillPie(pBrsh2, -100, -100, 200, 200, 90, -180);
//绘制黑色阴阳鱼的鱼头
pGrphBmp->FillPie(pBrsh1, -51, 0, 100, 100, 90, -180);
//绘制白色阴阳鱼的鱼头
pGrphBmp->FillPie(pBrsh2, -49, -100, 100, 100, 90, 180);
//绘制黑色阴阳鱼的眼睛
pGrphBmp->FillEllipse(pBrsh1, -10, -60, 20, 20);
//绘制白色阴阳鱼的眼睛
pGrphBmp->FillEllipse(pBrsh2, -10, 40, 20, 20);
InvalidateRect(hWnd, &rect, FALSE);
break;
case WM_PAINT:
{
hdc = BeginPaint(hWnd, &ps);
Graphics *pGrph = Graphics::FromHDC(hdc);
pGrph->DrawImage(pBufferBmp, rect.left, rect.top);
EndPaint(hWnd, &ps);
break;
}
case WM_DESTROY:
KillTimer(hWnd, 1);
delete pBrsh1;
delete pBrsh2;
delete pGrphBmp;
delete pBufferBmp;
//释放GDI+
GdiplusShutdown(GdiplusToken);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
源码: http://pan.baidu.com/share/link?shareid=535102&uk=1678089569网上看的一段代码,感觉挺有意思的。哪位高人能帮我转成au3么 pGrphBmp->TranslateTransform(float(width/2), float(height/2));
pGrphBmp->RotateTransform(-5);
主要是这两个。。。。额。。不知道为嘛写的总不对
页:
[1]