⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mywindow.cpp

📁 一个可用delphi来开发java的JNI开发包delphi接口
💻 CPP
字号:
#include <windows.h>
#include <assert.h>
#include "jawt_md.h"
#include "MyWindow.h"

#define X(x) (int)(xLeft + (x)*xScale/100) // 缩放宏
#define Y(y) (int)(yTop + (y)*yScale/100) // 以使尺度在 0-100 之间
#define CX(x) (int)((x)*xScale/100)
#define CY(y) (int)((y)*yScale/100)

void DrawSmiley(HWND hWnd, HDC hdc);
HRGN hrgn = NULL;

JNIEXPORT void JNICALL
Java_MyWindow_paint(JNIEnv* env, jobject canvas, jobject graphics)
{
        JAWT awt;
        JAWT_DrawingSurface* ds;
        JAWT_DrawingSurfaceInfo* dsi;
        JAWT_Win32DrawingSurfaceInfo* dsi_win;
        jboolean result;
        jint lock;

        // 获取 AWT 
        awt.version = JAWT_VERSION_1_3;
        result = JAWT_GetAWT(env, &awt);
        assert(result != JNI_FALSE);
        // 获取绘图界面
        ds = awt.GetDrawingSurface(env, canvas);
        if(ds == NULL)
            return;
        // 锁定绘图表面
        lock = ds->Lock(ds);
        assert((lock & JAWT_LOCK_ERROR) == 0);

        // 获取绘图表面的信息
        dsi = ds->GetDrawingSurfaceInfo(ds);

        // 获取特定平台的绘图信息
        dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;

        HDC hdc = dsi_win->hdc;
        HWND hWnd = dsi_win->hwnd;
        //////////////////////////////
        // !!! 在此处进行绘图 !!! //
        //////////////////////////////
        if(hrgn == NULL)
        {
                RECT rcBounds;
                GetWindowRect(hWnd,&rcBounds);
                long xLeft = 0; // 用于缩放宏
                long yTop = 0;
                long xScale = rcBounds.right-rcBounds.left;
                long yScale = rcBounds.bottom-rcBounds.top;
                hrgn = CreateEllipticRgn(X(10), Y(15), X(90), Y(95));
                SetWindowRgn(GetParent(hWnd),hrgn,TRUE);
                InvalidateRect(hWnd,NULL,TRUE);
        } else {
                DrawSmiley(hWnd,hdc);
        }
        // 释放绘图表面的信息
        ds->FreeDrawingSurfaceInfo(dsi);
        // 为绘图表面解锁
        ds->Unlock(ds);
        // 释放绘图表面
        awt.FreeDrawingSurface(ds);
}

void DrawSmiley(HWND hWnd, HDC hdc)
{
        RECT rcBounds;
        GetWindowRect(hWnd,&rcBounds);
        long xLeft = 0; // 用于缩放宏
        long yTop = 0;
        long xScale = rcBounds.right-rcBounds.left;
        long yScale = rcBounds.bottom-rcBounds.top;

        // 基于控制大小的画笔宽度
        int iPenWidth = max(CX(5), CY(5));
        HBRUSH brushBlack;
        HBRUSH brushYellow;
        HPEN penBlack = CreatePen(PS_SOLID, iPenWidth, RGB(0x00,0x00,0x00));
        // 用于绘制填充椭圆的空画笔
        HPEN penNull = CreatePen(PS_NULL, 0, (COLORREF)0);

        brushBlack = CreateSolidBrush(RGB(0x00,0x00,0x00));
        brushYellow = CreateSolidBrush(RGB(0xff,0xff,0x00));

        HPEN pPenSave = (HPEN)SelectObject(hdc, penBlack);
        HBRUSH pBrushSave = (HBRUSH)SelectObject(hdc,brushYellow);
        Ellipse(hdc,X(10), Y(15), X(90), Y(95)); // 头部

        Arc(hdc,X(25), Y(10), X(75), Y(80), // 嘴部(微笑)
           X(35), Y(70), X(65), Y(70));

        SelectObject(hdc,&penNull); // 无绘图宽度
        SelectObject(hdc,&brushBlack);

        Ellipse(hdc,X(57), Y(35), X(65), Y(50));
        Ellipse(hdc,X(35), Y(35), X(43), Y(50)); // 右眼
        Ellipse(hdc,X(46), Y(50), X(54), Y(65)); // 鼻子

        SetBkMode(hdc,TRANSPARENT); // 使用前景颜色

        SelectObject(hdc,pBrushSave);
        SelectObject(hdc,pPenSave);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -