游戏窗口化

 

// MyGame.cpp : 通用游戏窗口话程序,一般能改变分辨率的游戏都可以使用
//阿龙软件出品.

#include "stdafx.h"
#include <afxdllx.h>
#include "MyGame.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#pragma data_seg("ShareData")
HHOOK glhHook=NULL;
HINSTANCE glhInstance=NULL;
UINT KeyPressed;
UINT AutoTalkFlag;
HWND hwndmu;
HHOOK hHook;
HINSTANCE pHinstance;
bool bs=false;
WNDPROC oldproc;
#pragma data_seg()

void __declspec(dllexport) WINAPI InstallHook(BOOL,DWORD);

BOOL WINAPI UnInstallHook();
LRESULT CALLBACK HookProc(int ,WPARAM ,LPARAM);
LRESULT CALLBACK MyMsgProc(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam);
bool __stdcall winmu(void);
BOOL WINAPI UnInstallHook();

static AFX_EXTENSION_MODULE MyGameDLL = { NULL, NULL };

extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// Remove this if you use lpReserved
UNREFERENCED_PARAMETER(lpReserved);

if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("MyGame.DLL Initializing!/n");

// Extension DLL one-time initialization
if (!AfxInitExtensionModule(MyGameDLL, hInstance))
return 0;

//new CDynLinkLibrary(MyGameDLL);
pHinstance = hInstance;
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("MyGame.DLL Terminating!/n");
// Terminate the library before destructors are called
//AfxTermExtensionModule(MyGameDLL);
}
return 1; // ok
}
void __declspec(dllexport) WINAPI InstallHook(BOOL IsHook,DWORD dwThreadId)
{
if(IsHook)
{
hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)HookProc,pHinstance,dwThreadId);
}
else
{
UnInstallHook();
}
}
LRESULT CALLBACK HookProc(int ncode,WPARAM wparam,LPARAM lparam)
{
if(ncode<0)
return CallNextHookEx(hHook,ncode,wparam,lparam);
//用一个bool变量让我们的MyGame()只调用一次
if (!bs)
MyGame();
bs=true;
return CallNextHookEx(hHook,ncode,wparam,lparam);
}
bool __stdcall MyGame(void)
{
long style;
long exstyle;
DEVMODE devmode;
hwndmu=GetForegroundWindow();
// hwndmu=(HWND)FindWindow(NULL,"Dweep");
if(EnumDisplaySettings(0, 0, &devmode))
{
devmode.dmPelsWidth=1024;
devmode.dmPelsHeight=768;
devmode.dmBitsPerPel=32;
devmode.dmDisplayFrequency=75;
ChangeDisplaySettings(&devmode,0);
}
//修改窗体的style属性
style= GetWindowLong(hwndmu,GWL_STYLE);
style=style ¦ WS_CAPTION ;
SetWindowLong(hwndmu,GWL_STYLE,style);
//修改窗体的exstyle属性
exstyle=GetWindowLong(hwndmu,GWL_EXSTYLE);
exstyle=exstyle ¦ WS_EX_APPWINDOW ¦ WS_EX_WINDOWEDGE;
SetWindowLong(hwndmu,GWL_EXSTYLE,exstyle);
//设置窗体的位置,取消其最前端显示,
SetWindowPos(hwndmu,HWND_NOTOPMOST,0,0,800,600,SWP_SHOWWINDOW); //
ShowWindow(hwndmu,SW_SHOWNORMAL);
//修改窗体的回调函数地址到我们自己定义的回调函数
oldproc=(WNDPROC)GetWindowLong(hwndmu,GWL_WNDPROC);
if(SetWindowLong(hwndmu,GWL_WNDPROC,(long)MyMsgProc)==0)
return false;
return true;
}
LRESULT CALLBACK MyMsgProc(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam)
{
//消息过滤
switch (umsg)
{
case WM_ACTIVATEAPP:
case WM_ACTIVATE:
case WM_KILLFOCUS:
case WM_SETFOCUS:
case WM_CLOSE:
return 0;

case WM_TIMER:
if(wparam==0x3e9)
KillTimer(hwnd,wparam);
break;
}
return CallWindowProc(oldproc,hwnd,umsg,wparam,lparam);
}
BOOL WINAPI UnInstallHook()
{
UnhookWindowsHookEx(hHook);
return TRUE;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java的图形库来实现小游戏窗口化。Java提供了AWT(Abstract Window Toolkit)和Swing两种图形库,可以用来创建窗口、绘制图形和处理用户输入。 下面是一个简单的示例代码,演示了如何使用Swing库创建一个简单的小游戏窗口: ```java import javax.swing.JFrame; import javax.swing.JPanel; public class GameWindow extends JFrame { private JPanel gamePanel; public GameWindow() { setTitle("小游戏窗口"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); gamePanel = new JPanel(); getContentPane().add(gamePanel); setSize(400, 300); setLocationRelativeTo(null); // 居中显示窗口 setResizable(false); // 禁止调整窗口大小 setVisible(true); } // 游戏逻辑更新方法 public void update() { // 在这里实现游戏的逻辑更新 } // 渲染游戏界面方法 public void render() { // 在这里实现游戏界面的渲染 } public static void main(String[] args) { GameWindow gameWindow = new GameWindow(); while (true) { gameWindow.update(); gameWindow.render(); try { Thread.sleep(16); // 控制游戏更新频率,约60帧每秒 } catch (InterruptedException e) { e.printStackTrace(); } } } } ``` 这个示例创建了一个继承自JFrame的GameWindow类,通过JPanel来承载游戏界面。在`update()`方法中可以实现游戏逻辑的更新,在`render()`方法中实现游戏界面的渲染。在`main()`方法中,我们创建了一个GameWindow对象,并使用一个无限循环来不断更新和渲染游戏。 你可以根据自己的需求在`update()`和`render()`方法中实现具体的游戏逻辑和界面渲染。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值