win64

Crates.iowin64
lib.rswin64
version0.0.4
created_at2024-08-10 17:47:06.395319+00
updated_at2025-07-07 14:09:39.833074+00
descriptionHand-crafted, idiomatic Rust wrappers for Win32
homepage
repositoryhttps://github.com/GTLugo/win64-rs
max_upload_size
id1332583
size86,448
Gabriel Lugo-Maldonado (GTLugo)

documentation

README

win64

Hand-crafted, idiomatic Rust wrappers for Win32

The idea for this library is to offer safer wrappers for the windows and windows-sys crates that offer low-level control while also helping to prevent invalid states.

use win64::prelude::*;

struct State;

impl WindowProcedure for State {
  fn on_message(&mut self, window: &Window, message: &Message) -> Option<LResult> {
    match message {
      Message::Create(_) | Message::SettingChange(_) => {
        window.dwm_set_window_attribute(DwmWindowAttribute::UseImmersiveDarkMode(is_os_dark_mode()));
      }
      Message::Destroy => {
        window.quit();
      }
      Message::Paint => {
        window.begin_paint(|hdc, ps| {
          hdc.fill_rect(ps.paint, Brush::color_window());
        });
      }
      _ => (),
    }
    None
  }
}

fn main() -> Result<(), Error> {
  let args = Args::get();

  let class = WindowClass::builder()
    .name("Window Class")
    .instance(Some(args.instance))
    .register()?;

  let hwnd = class
    .window_builder()
    .procedure(State)
    .name("Window")
    .style(WindowStyle::OverlappedWindow | WindowStyle::Visible)
    .size(PhysicalSize::new(800, 500))
    .create()?;

  for msg in Msg::get(MsgQueue::CurrentThread, None).flatten() {
    msg.translate();
    msg.dispatch();
  }

  Ok(())
}

[!WARNING] While efforts are put in place to maintain compatibility, this crate is largely untested on versions of Windows older than Windows 11. Here be dragons.

Features

  • safe: This is a set of new API wrappers that aim to provide stronger checks against improper usage
  • rwh_05 / rwh_06: Implements the raw_window_handle traits on the window handle type.

[!NOTE] No AI-generated code.

Commit count: 0

cargo fmt