use std::time::{Duration, Instant}; use win64::prelude::*; use windows::core::HSTRING; use self::win32::SetWindowTextW; fn main() { let window = Window::new( &WindowClass::new(&WindowClassDescriptor::default()), &WindowDescriptor::default() .with_title("Test") .with_size(Some((800, 500))), UserData::new(), ) .unwrap(); let mut then = Instant::now(); let mut delta = Duration::ZERO; let mut timer = Duration::ZERO; let period = Duration::from_secs_f64(0.2); MessagePump::poll().for_each(|_| { let now = Instant::now(); delta = now - then; then = now; timer += delta; if timer > period { let _ = unsafe { SetWindowTextW( window.as_handle(), &HSTRING::from(format!("{:?} fps", 1. / (delta.as_secs_f64() * 1000.))), ) }; timer = Duration::ZERO; } }); } struct UserData {} impl UserData { fn new() -> Self { Self {} } } impl WindowProcedure for UserData { fn on_message(&mut self, window: Window, message: Message) -> ProcedureResult { if let win32::WM_DESTROY = message.id() { window.quit() } self.default_window_procedure(window, message) } }