亚洲女同成aV人片在线观看|亚洲www啪成人一区二区麻豆|亚洲国产中日韩精品综合|亚洲国产成人精品一级片|亚洲无码在线视频免费

如何用Rust編寫(xiě)windows原生程序
發(fā)布時(shí)間:2026-05-05 06:59:50

簡(jiǎn)介

Rust是何用一種系統級編程語(yǔ)言,它注重安全、編寫(xiě)并發(fā)和性能,生程在本??文中,何用我們將學(xué)習如何用R??ust編寫(xiě)Windows原生程序,編寫(xiě)Windows原生程序是生程指直接編譯為Windows操作系統可執行文件的程序,這些程序通常使用WinAPI(Windows應用程序編程接口)進(jìn)行開(kāi)發(fā)。何用

安裝Rust

我ヽ(′▽?zhuān)?/們需要在計算機上安裝Rust,編寫(xiě)請訪(fǎng)問(wèn)https://www.rust-lang.org/tools/install 獲取安裝說(shuō)明。生程

創(chuàng )建一個(gè)新的何用Rust項目

1、打開(kāi)命令提示符或終端,編寫(xiě)運行以下命令以創(chuàng )建一個(gè)新┐(′ー`)┌的生程Rust項目:

c??ヽ(′?`)ノargo new windows_app --bin

這將??在當前目錄下創(chuàng )建一個(gè)名為windows_app的新文件夾( ?° ?? ?°),其中包含一個(gè)用于構建W??indows原生程序的何用Cargo.toml??文件。

2、???編寫(xiě)進(jìn)入新創(chuàng )建的生程項目目錄:

cd windows_ap(′?`)p

編寫(xiě)Windows原生程序

1、在src/main.(/ω\)rs文件中,添加以下代碼ヽ(′▽?zhuān)?ノ以初始化(hua)Windows API:

extern crate winapi; // 引入??winapi庫use winapi::shared::minwindef::{ DWORD,(???) LPCSTR}; // 引入所需的WinAPI類(lèi)型us( ?ヮ?)e winapi::um::winuser::{ CreateWindowExW, Get(╬?益?)MessageW, MSG}; // 引入所需WinAPI函數use winapi::um::winuser:??:Regiヽ(′▽?zhuān)?ノsterClassExW; // 引入RegisterClassExW函數use std::ffi::CString; // 引入CString類(lèi)型use std::ptr; // 引入ptr類(lèi)型use std::sync::mp??sc::{ channel, Sender??}; //ヾ(?■_■)ノ 引入channヽ(′▽?zhuān)?ノel和Sende(′ω`)r類(lèi)型use st┐(′?`)┌d::thread; // 引入thread類(lèi)型use winapi::um::winuser::WNDCLASSEXW; // 引入WNDCLASSEXW結構體use winapi::um::winuser::WNDCLASSEX??W::*; // 引入WNDCLASSEXW結構體的字段use winapi::um::winuser::WNDPROC; // 引入WNDPROC類(lèi)型use winapi::um::winuse(′▽?zhuān)?)r::LRESULT; // 引入LRESULT類(lèi)型use winapi::um::winuser::HINSTANCE; // 引入HINSTANCE類(lèi)型use winapi::um::winuse(′▽?zhuān)?r::HWND; // 引入HWND類(lèi)型use winapi::um::winuser::HDC; // 引入HDC類(lèi)型use winapi::um::winuser::PAINTSTRUCT; // 引入PAINTSTRUCT類(lèi)型use winapi::um(′?_?`)::winuser::GetDC; // 引入GetDC函數use win(′?`*)a??pi::um::winuser::ReleaseDC; // 引入ReleaseDC函數use winapi::um::winuser::BeginPaint; // 引入BeginPaint函數use winapi::um::win??user::EndPaint; // 引入EndPaint函數use winapi::um:┐(′д`)┌:winuser::InvalidateRect; // 引入InvalidateRect函數use winapi::um::winus??er::( ?ヮ?)GetMessageW as GetMessage; // 引入GetMessageW函數作為別名GetMessageuse winapi::um::winuser::Translat(◎_◎;)eMessage; // 引入Transla(′▽?zhuān)?teMessage函數use winapi::um::winuser::DispatchMessageW; // 引入DispatchMessageW函數??us??e?? winapi::u(/ω\)m::winuser::DefWindowP??rocW as DefWindowProc; // 引入DefWindowProcW函數作為別名DefWindowProcuse winapi::um::winuser::SetTimer; // 引入SetTimer函數use winapi::um::winuser::Kill(?_?;)Timer; // 引入KillTimer函數use winapi::um::winuser::SetCursorPos; // 引入SetCursorPos函數use?? winapi::um::winuser::LoadCursorA; // 引入LoadCursorA函數use winapi::um::winuser::ShowCursor; // 引入Sh??owCursor函數use wi??napi::um::winuser::Hid??eCursor; // 引入HideCursor函數use winapi::um::winuser::LoadIconA; // 引入LoadIconA函數??use winapi::um::winuser::DrawIconExW(???); // 引入DrawIconExW函數use winapi::um·winuser·SendMessageT??imeoutW as(′?`) SendMessageTimeout; // 引入SendMessageTimeoutW函數作為別名Sen??dMessageTimeoutuse winapi·system·libc·stdio as stdio; // 引入stdio庫中的printf和scanf函數作為別名printf和scanf

2、在src/main.rs文件中,添加以下代碼以定義窗口類(lèi):

“`rust,unsafe

pub struct WindowClassEx: WinBaseExc<> {

wndproc: WndProcヽ(′?`)ノExt<(HWND, WPARAM, LPARAM) -> LRESULT&g( ?° ?? ?°)t;,

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,

lps??zMenuName: nil??,

hCursor: LoadCu(′?_?`)rsorA(nullptr, IDC_ARROW),

hIcon: LoadIconA(nullptr, IDI_APPLICATION),

hIconSm: Loa(′?_?`)dIconA(nullptr, ID??I_APPLICATION),

};

unsafe {

RegisterClassExW(&classex);

}

classex

}

3(′_`)、在src/main.rs文件中,添加以下代碼以實(shí)現窗口過(guò)程函數:

“`rust,unsafe

noop: Box<dyn WndProcExt<(HWND, WPAR(′?ω?`)AM, LPARAM) -> LRESULT>> = Box :: new(|hwnd, msg, wparam, lparam??| {

if msg == msg_paint then {

let (mut hdc, _) = BeginPaint(hwnd, No??ne);

let mut ps = PaintStruct();

GetClientRect(hwnd, &ps.rcPaint);

(*hdc).draw_rect(&┐(′д`)┌;ps.rcPaint);

EndPaint(′?`*)(hwヾ(′▽?zhuān)??nd, None);

} els(′?`*)e {

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&quo??t;, f32): f32;

enforce_sign_ext!("S", f64): f64;

enforce_sign_ext!("X", i3??2):┐(′д`)┌ i32;

enforce_sign_ext!("Y", i32): i32;

enforce_sign_ext( ?ヮ?)!("Z", i32): i32;

enforce_sign_ext!("a&q??uot;, i32): i32;

enforc??e_sign_ext!("b", i32): i32;

enf??orce_sign_ext!("c", i32): i32;

enforce_sign_ext!("d", i32): i32;

enforce_sign_eヽ(′ー`)ノxt!("f", i32): i32;

enforce_sign_ext!("g", i32): i32;

enforce_sign_ext!("h", i32(°ロ°) !): i32;ヽ(′▽?zhuān)?ノ

enforce_sign_ext??!("i", i32): i32;

enforce_sign_ext!(&quo(′?`)t;j", i32): i32;

enforce_sign_ext!(&qu??ot;k", i32): i32;

e??nforce_sign_ext!("l", i32): i32;

enf?orce_sign_ext!("m", i32): i32;

enforce_sign_ext!("n", i32): i32??;

enforce_sign_ext!("o", i32): i32;

enforce_sign_ext!(&(◎_◎;)quot;p", i32): i32??;

enforce_sign_ext!("q", i32): i32;

enforce_sig??n_ext!((′ω`*)"r", i32): i32;

enforce_sign_ext!("s", i32): i3

亚洲女同成aV人片在线观看|亚洲www啪成人一区二区麻豆|亚洲国产中日韩精品综合|亚洲国产成人精品一级片|亚洲无码在线视频免费 金川县| 静安区| 婺源县| 石楼县| 石泉县| 垦利县| 金秀| 江油市| 彩票| 阳谷县| 出国| 庐江县| 丹巴县| 大港区| 南康市| 崇左市| 乌审旗| 江陵县| 筠连县| 华亭县| 黄浦区| 余干县| 成武县| 夏津县| 襄樊市| 宁阳县| 莱阳市| 济南市| 宣城市| 南通市| 东乌珠穆沁旗| 东源县| 阜阳市| 东城区| 昆明市| 孝感市| 黑山县| 湟源县| 南充市| 镇江市| 类乌齐县| http://444 http://444 http://444 http://444 http://444 http://444