Rust是一种系统级编程语言,它注重安全、并发和性能,在本文中,我们将学习如何用Rust编写Windows原生程序,Windows原生程序是指直接编译为Windows操作系统可执行文件的程序,这些程序通常使用WinAPI(Windows应用程序编程接口)进行开发。
在陵水黎族等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、成都网站设计 网站设计制作按需规划网站,公司网站建设,企业网站建设,成都品牌网站建设,全网营销推广,外贸网站建设,陵水黎族网站建设费用合理。
我们需要在计算机上安装Rust,请访问https://www.rust-lang.org/tools/install 获取安装说明。
1、打开命令提示符或终端,运行以下命令以创建一个新的Rust项目:
cargo new windows_app --bin
这将在当前目录下创建一个名为windows_app
的新文件夹,其中包含一个用于构建Windows原生程序的Cargo.toml
文件。
2、进入新创建的项目目录:
cd windows_app
1、在src/main.rs
文件中,添加以下代码以初始化Windows API:
extern crate winapi; // 引入winapi库 use winapi::shared::minwindef::{DWORD, LPCSTR}; // 引入所需的WinAPI类型 use winapi::um::winuser::{CreateWindowExW, GetMessageW, MSG}; // 引入所需WinAPI函数 use winapi::um::winuser::RegisterClassExW; // 引入RegisterClassExW函数 use std::ffi::CString; // 引入CString类型 use std::ptr; // 引入ptr类型 use std::sync::mpsc::{channel, Sender}; // 引入channel和Sender类型 use std::thread; // 引入thread类型 use winapi::um::winuser::WNDCLASSEXW; // 引入WNDCLASSEXW结构体 use winapi::um::winuser::WNDCLASSEXW::*; // 引入WNDCLASSEXW结构体的字段 use winapi::um::winuser::WNDPROC; // 引入WNDPROC类型 use winapi::um::winuser::LRESULT; // 引入LRESULT类型 use winapi::um::winuser::HINSTANCE; // 引入HINSTANCE类型 use winapi::um::winuser::HWND; // 引入HWND类型 use winapi::um::winuser::HDC; // 引入HDC类型 use winapi::um::winuser::PAINTSTRUCT; // 引入PAINTSTRUCT类型 use winapi::um::winuser::GetDC; // 引入GetDC函数 use winapi::um::winuser::ReleaseDC; // 引入ReleaseDC函数 use winapi::um::winuser::BeginPaint; // 引入BeginPaint函数 use winapi::um::winuser::EndPaint; // 引入EndPaint函数 use winapi::um::winuser::InvalidateRect; // 引入InvalidateRect函数 use winapi::um::winuser::GetMessageW as GetMessage; // 引入GetMessageW函数作为别名GetMessage use winapi::um::winuser::TranslateMessage; // 引入TranslateMessage函数 use winapi::um::winuser::DispatchMessageW; // 引入DispatchMessageW函数 use winapi::um::winuser::DefWindowProcW as DefWindowProc; // 引入DefWindowProcW函数作为别名DefWindowProc use winapi::um::winuser::SetTimer; // 引入SetTimer函数 use winapi::um::winuser::KillTimer; // 引入KillTimer函数 use winapi::um::winuser::SetCursorPos; // 引入SetCursorPos函数 use winapi::um::winuser::LoadCursorA; // 引入LoadCursorA函数 use winapi::um::winuser::ShowCursor; // 引入ShowCursor函数 use winapi::um::winuser::HideCursor; // 引入HideCursor函数 use winapi::um::winuser::LoadIconA; // 引入LoadIconA函数 use winapi::um::winuser::DrawIconExW; // 引入DrawIconExW函数 use winapi::um·winuser·SendMessageTimeoutW as SendMessageTimeout; // 引入SendMessageTimeoutW函数作为别名SendMessageTimeout use winapi·system·libc·stdio as stdio; // 引入stdio库中的printf和scanf函数作为别名printf和scanf
2、在src/main.rs
文件中,添加以下代码以定义窗口类:
“`rust,unsafe
pub struct WindowClassEx: WinBaseExc<> {
wndproc: WndProcExt<(HWND, WPARAM, LPARAM) -> LRESULT>,
impl WindowClassEx {
fn register(name: &str)
-> Self {
let mut classex = Self {
wndproc: DefaultWndProc,
cbSize: size_t(sizeof(classex)),
hInstance: unsafe { get_default_proc_address(get_windows_module()) as HINSTANCE },
lpszClassName: name.to_owned(),
lpfnWndProc: unbox_default(DefaultWndProc),
hbrBackground: nil,
lpszMenuName: nil,
hCursor: LoadCursorA(nullptr, IDC_ARROW),
hIcon: LoadIconA(nullptr, IDI_APPLICATION),
hIconSm: LoadIconA(nullptr, IDI_APPLICATION),
};
unsafe {
RegisterClassExW(&classex);
}
classex
}
3、在src/main.rs
文件中,添加以下代码以实现窗口过程函数:
“`rust,unsafe
noop: Box
if msg == msg_paint then {
let (mut hdc, _) = BeginPaint(hwnd, None);
let mut ps = PaintStruct();
GetClientRect(hwnd, &ps.rcPaint);
(*hdc).draw_rect(&ps.rcPaint);
EndPaint(hwnd, None);
} else {
DefWindowProc(hwnd, msg, wparam, lparam);
}
Ok(0)
})
enforce_sign_ext!("O", i32): i32;
enforce_sign_ext!("P", i32): i32;
enforce_sign_ext!("Q", i64): i64;
enforce_sign_ext!("R", f32): f32;
enforce_sign_ext!("S", f64): f64;
enforce_sign_ext!("X", i32): i32;
enforce_sign_ext!("Y", i32): i32;
enforce_sign_ext!("Z", i32): i32;
enforce_sign_ext!("a", i32): i32;
enforce_sign_ext!("b", i32): i32;
enforce_sign_ext!("c", i32): i32;
enforce_sign_ext!("d", i32): i32;
enforce_sign_ext!("e", i32): i32;
enforce_sign_ext!("f", i32): i32;
enforce_sign_ext!("g", i32): i32;
enforce_sign_ext!("h", i32): i32;
enforce_sign_ext!("i", i32): i32;
enforce_sign_ext!("j", i32): i32;
enforce_sign_ext!("k", i32): i32;
enforce_sign_ext!("l", i32): i32;
enforce_sign_ext!("m", i32): i32;
enforce_sign_ext!("n", i32): i32;
enforce_sign_ext!("o", i32): i32;
enforce_sign_ext!("p", i32): i32;
enforce_sign_ext!("q", i32): i32;
enforce_sign_ext!("r", i32): i32;
enforce_sign_ext!("s", i32): i3
文章题目:如何用Rust编写windows原生程序
URL分享:http://www.gawzjz.com/qtweb2/news7/11807.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联