RPP 1.86 gamma 开源发布

本文介绍了一款Windows程序设计工具的更新内容,包括JIT打包模式、新增的Windows窗体模式、简化数组初始化、方便调用外部API等新特性,并提供了下载链接。详细展示了如何使用这些功能创建和运行简单的窗口程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更新如下:

1.增加JIT打包模式,打包生成EXE可以脱离RPP环境运行。

2.增加windows窗体模式(即WinMain),可开发windows窗口程序。

3.数组初始化更方便。

4.调用外部API更方便,如 stdcall["MessageBoxA",0,"abc","123",0] 可简写为 @MessageBoxA(0,"abc","123",0)


下载地址:

http://pan.baidu.com/s/1pJI5IPl



/*
该程序只能用win_jit模式运行(Ctrl+F5)
代码来自《windows程序设计》第三章
*/

mac c_text "HelloWin"

void main()
{
	WNDCLASSA wndclass
	wndclass.style=OR(CS_HREDRAW,CS_VREDRAW)
	wndclass.lpfnWndProc=&proc_r
	wndclass.cbClsExtra=0
	wndclass.cbWndExtra=0
	wndclass.hInstance=rf.get_hins
	wndclass.hIcon=@LoadIconA(null,IDI_APPLICATION)
	wndclass.hCursor=@LoadCursorA(null,IDC_ARROW)
	wndclass.hbrBackground=@GetStockObject(WHITE_BRUSH)
	wndclass.lpszMenuName=null
	wndclass.lpszClassName=c_text
	@RegisterClassA(&wndclass)
	void* hwnd=@CreateWindowExA(0,c_text,c_text,WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
		null,null,rf.get_hins,null)
	@ShowWindow(hwnd,SW_SHOW)
	@UpdateWindow(hwnd)
	MSG msg
	while @GetMessageA(&msg,null,0,0)
		@TranslateMessage(&msg)
		@DispatchMessageA(&msg)
}

int proc(void* hwnd,int message,int wParam,int lParam)
{
	switch message
	case WM_CREATE
		return 0
	case WM_PAINT
		PAINTSTRUCT ps
		void* hdc=@BeginPaint(hwnd,&ps)
		RECT rect
		@GetClientRect(hwnd,&rect)
		@DrawTextA(hdc,c_text,-1,&rect,OR(OR(
			DT_SINGLELINE,DT_CENTER),DT_VCENTER))
		@EndPaint(hwnd,&ps)
		return 0
	case WM_DESTROY
		@PostQuitMessage(0)
		return 0
	return @DefWindowProcA(hwnd,message,wParam,lParam)
}

//C++回调RPP时需要保护寄存器,其实这段代码可用元编程自动生成
int proc_r(void* hwnd,int message,int wParam,int lParam)
{
	push ebx
	push esi
	push edi
	int ret=proc(hwnd,message,wParam,lParam)
	pop edi
	pop esi
	pop ebx
	mov eax,ret
}

struct PAINTSTRUCT
{
	void* hdc
	bool fErase
	RECT rcPaint
	bool fRestore
	bool fIncUpdate
	uchar rgbReserved[32]
}

struct MSG
{
	void* hwnd
	int message
	int wParam
	int lParam
	uint time
	POINT pt
	uint lPrivate
}

struct POINT
{
	int x
	int y
}

struct RECT
{
	int left
	int top
	int right
	int bottom
}

struct WNDCLASSA
{
	uint style
	void* lpfnWndProc
	int cbClsExtra
	int cbWndExtra
	void* hInstance
	void* hIcon
	void* hCursor
	void* hbrBackground
	char* lpszMenuName
	char* lpszClassName
}

#define CS_VREDRAW 0x0001
#define CS_HREDRAW 0x0002
#define IDI_APPLICATION 32512
#define IDC_ARROW 32512
#define WHITE_BRUSH 0
#define WS_OVERLAPPEDWINDOW 13565952
#define CW_USEDEFAULT 0x80000000
#define SW_SHOW 5
#define WM_CREATE 0x0001
#define WM_DESTROY 0x0002
#define WM_PAINT 0x000F

#define DT_CENTER 0x00000001
#define DT_RIGHT 0x00000002
#define DT_VCENTER 0x00000004
#define DT_BOTTOM 0x00000008
#define DT_WORDBREAK 0x00000010
#define DT_SINGLELINE 0x00000020



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值