如何在Rust的Windows crate中调用GetStockObject Win32 API
Rust windows crate 调用GetStockObject获取白色画刷实现方案
首先在Cargo.toml中添加windows crate依赖,启用必须的Win32 GDI相关特性:
[dependencies] windows = { version = "0.52", features = ["Win32_Foundation", "Win32_Graphics_Gdi"] }
代码实现
导入所需依赖项后直接调用对应Win32接口即可,完全不需要用到CreateSolidColorBrush:
use windows::Win32::Foundation::HGDIOBJ; use windows::Win32::Graphics::Gdi::{GetStockObject, WHITE_BRUSH, HBRUSH}; fn get_white_brush() -> HBRUSH { // 等效C代码:HBRUSH hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); unsafe { let stock_obj: HGDIOBJ = GetStockObject(WHITE_BRUSH); HBRUSH(stock_obj.0) } }
注意事项
GetStockObject返回值类型为通用GDI对象句柄HGDIOBJ,需要手动提取句柄值转换为HBRUSH类型,对应C语言中的强制类型转换操作- 调用
GetStockObject需要包裹在unsafe块中,符合Windows crate对FFI调用的安全约束 - 该方式获取的系统存量画刷不需要手动调用
DeleteObject释放资源,遵循原生Win32 API的资源管理规则 - 得到的
HBRUSH可以直接用于窗口类注册、GDI绘制等所有原生Win32场景,用法和C/C++开发完全一致
内容的提问来源于stack exchange,提问作者MRahilly
相关产品推荐
相关产品推荐

