`
lzchacker
  • 浏览: 15772 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Swing 毛玻璃

    博客分类:
  • java
 
阅读更多

关于Java如何在windows 7 32bit 实现毛玻璃透明

(2012-01-07 19:54:12)
标签:

杂谈

有图有真相!

关于Java如何在windows <wbr>7 <wbr>32bit <wbr>实现毛玻璃透明

首先学会在JAVA中调用DLL

编译环境:CMD、VS2010.(eclipse无法通过编译!)

本人用代码讲解!

以下是JAVA代码:

第一步:

public class DLLtest {
 public native void displayshow();//用native声明方法
 static {                         //将加载DLL的函数代码放到静态模块中
  System.out.println("进入加载");
  System.loadLibrary("hurry");// 加载DLL文件,hurry既为DLL的名字
 }
 public static void main(String[] args) {
 
  new DLLtest().displayshow();//new出类并调用方法。
  }

}
第二步:到CMD下进行编译 也就是javac DLLtest.java

第三步:编译完后用javah 在编译成.h文件,也就是javah DLLtest

关于Java如何在windows <wbr>7 <wbr>32bit <wbr>实现毛玻璃透明

此时在你类的目录下会多出一个DLLtest.h文件。

关于Java如何在windows <wbr>7 <wbr>32bit <wbr>实现毛玻璃透明
第四步:

将.h文件放到VS2010的include的目录下,关于include目录在哪,自己可以用资源管理器右上角的搜索功能找,这里不多说。

第五步:

编写C++代码,用VS2010写DLL,具体如下:

打开VS2010 新建->项目->在左边选择Win32->Win32项目

名称随便输入例如hurry

然后会出现一个Win32应用程序向导,点下一步,选择DLL->完成!

C语言代码:

#include <Windows.h>
# include "DLLtest.h"

JNIEXPORT void JNICALL Java_DLLtest_displayshow(JNIEnv *env,jobject obj)
{
printf("FUCK!!!我终于TM成功了!!\n");
system("pause");
return;
}
关于Java如何在windows <wbr>7 <wbr>32bit <wbr>实现毛玻璃透明

在解决方案的资源管理器中右键你的CPP文件->属性->找到预编译头->在预编译头中选择不适用预编译头。

最后点编译。

第六步:

将生成的DLL文件放到类的目录中

最后一步:

运行!

关于Java如何在windows <wbr>7 <wbr>32bit <wbr>实现毛玻璃透明

我说的你们听明白了么?

如果听明白了,那么实现毛玻璃的方法就不难了,只简单的调用WIN API而已

先看我JAVA代码

import java.awt.Color;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class AeroTest extends JFrame{
  public native void AeroShow();
 static {
  System.out.println("进入加载");
  System.loadLibrary("AeroCall");
 }

 JPanel redPanel=new JPanel();
 JButton testButton =new JButton("测试组件:按钮");
 public AeroTest(){
  redPanel.add(testButton);
  redPanel.setBackground(Color.red);//务必将面板设置成红色
  this.setTitle("毛玻璃测试");//必须设置标题头
  this.setSize(800,500);
  this.getContentPane().add(redPanel);
  this.setVisible(true);
 }

 public static void main(String[] args) {
  AeroTest AeMain=new AeroTest();
  AeMain.AeroShow();

 }

}

以下是C语言代码


#include <jni.h>
#include "AeroTest.h"
#include <stdio.h>
#include <iostream>
#include <Windows.h>
#include <WinUser.h>
#include <Uxtheme.h>
#include <dwmapi.h>
#pragma comment (lib, "Uxtheme.lib")
#pragma comment (lib, "dwmapi.lib")
using namespace std;
JNIEXPORT void JNICALL Java_AeroTest_AeroShow(JNIEnv *env,jobject obj)
{
HWND hwnd = FindWindow(NULL,L"毛玻璃测试");  //查找 标题为 "毛玻璃测试"的对话框

SetWindowLong(hwnd,GWL_EXSTYLE,
GetWindowLong(hwnd,GWL_EXSTYLE)^0x80000);
SetLayeredWindowAttributes(hwnd,0x0000ff, 255, LWA_ALPHA | LWA_COLORKEY);  //设置透明

MARGINS mar={-1};
DwmExtendFrameIntoClientArea(hwnd, &mar);   //毛玻璃范围

return;
}

 

其实实现的方法很简单,在JAVA中将面板的颜色设置成红色并设置窗口标题,C语言的代码的意思是找到窗口,然后把红色的地方全部变成毛玻璃透明~~~

就是这么简单~懂了么?


 



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics