wxPython實現視窗在工作列中閃爍

2021-12-29 19:41:24 字數 2733 閱讀 8915

為提醒使用者注意,通常採用視窗閃爍的效果來達到這一目的,就像即時聊天工具qq, jabber等,當收到好友發來的訊息時通常會閃爍托盤中的圖示,如果聊天視窗是開啟的,那麼就會閃爍開啟的聊天視窗在工作列中的按鈕,甚至有時連視窗的標題欄都會閃爍。

其實實現這樣的閃爍功能是很簡單的,如果對windows api熟悉的話,就會對flashwindow函式不會陌生,該函式可以實現簡單的視窗閃爍功能,只是視窗只閃爍一下,函式宣告如下:

[c++]

bool winapi flashwindow( 

_in_  hwnd hwnd, 

_in_  bool binvert 

); bool winapi flashwindow(

_in_  hwnd hwnd,

_in_  bool binvert

); 如果要定義視窗閃爍的次數和頻率可以使用另乙個函式flashwindowex,宣告如下:

[c++]

bool winapi flashwindowex( 

_in_  pflashwinfo pfwi 

); bool winapi flashwindowex(

_in_  pflashwinfo pfwi

);該函式接收乙個結構體引數pflashwinfo,結構體的宣告如下:

[c++]

typedef struct flashwinfo, *pflashwinfo; 

typedef struct flashwinfo, *pflashwinfo;主要的引數是dwflags,該引數有多個組合,分別為:

flashw_all(0x00000003):同時閃爍視窗標題欄和工作列按鈕,等於flashw_caption | flashw_tray;

flashw_caption(0x00000001):閃爍視窗標題欄;

flashw_stop(0):停止閃爍,系統重置視窗到初始狀態

flashw_timer(0x00000004):不停的閃爍,知道flashw_top標記被設定

flashw_timernofg(0x0000000c):不停閃爍,直到視窗前端顯示

flashw_tray(0x00000002):閃爍視窗在工作列的按鈕;

引數ucount表示閃爍的次數,當然如果dwflags的值有flashw_timer或flashw_stop時,該引數就無效了。dwtimeout是閃爍頻率(毫秒)。

這裡使用python+wxpython編寫如何使用函式flashwindowex來實現視窗的閃爍效果。**如下:

[python]

# -*- coding:utf-8 -*-  

'''''

filename : winapi.py

''' 

from ctypes import * 

import win32con 

__all__ = ['flash'] 

flashwindowex = windll.user32.flashwindowex 

class flashwinfo(structure): 

_fields_ = [('cbsize', c_uint), 

('hwnd', c_uint), 

('dwflags', c_uint), 

('ucount', c_uint), 

('dwtimeout', c_uint)] 

def flash(hwnd): 

'''''flash a window with caption and tray.''' 

info = flashwinfo(0, hwnd, win32con.flashw_all | win32con.flashw_timernofg, 0, 0) 

info.cbsize = sizeof(info) 

flashwindowex(byref(info)) 

# -*- coding:utf-8 -*-

'''    filename : winapi.py

'''from ctypes import *

import win32con

__all__ = ['flash']

flashwindowex = windll.user32.flashwindowex

class flashwinfo(structure):

_fields_ = [('cbsize', c_uint),

('hwnd', c_uint),

('dwflags', c_uint),

('ucount', c_uint),

('dwtimeout', c_uint)]

def flash(hwnd):

'''flash a window with caption and tray.'''

info = flashwinfo(0, hwnd, win32con.flashw_all | win32con.flashw_timernofg, 0, 0)

info.cbsize = sizeof(info)

flashwindowex(byref(info))使用方法,在wx.frame視窗中呼叫該函式:

[python]

import winapi 

winapi.flash(self.gethandle()) 

import winapi

winapi.flash(self.gethandle()) 函式flash就是實現了閃爍視窗標題欄和工作列按鈕,直到視窗被啟用,閃爍才停止。

wxPython實現視窗在工作列中閃爍

為提醒使用者注意,通常採用視窗閃爍的效果來達到這一目的,就像即時聊天工具qq,jabber等,當收到好友發來的訊息時通常會閃爍托盤中的圖示,如果聊天視窗是開啟的,那麼就會閃爍開啟的聊天視窗在工作列中的按鈕,甚至有時連視窗的標題欄都會閃爍。其實實現這樣的閃爍功能是很簡單的,如果對windows api...

wxPython實現分隔視窗

1 分割視窗 分隔視窗 wx.splitterwindow 就是將視窗分成兩部分,即左右或上下兩部分,如下圖所示視窗,整體上分為左右兩個視窗,右視窗又分為上下兩視窗,兩個視窗之間的分隔線是可以拖動的,稱為 窗框 sash wx.splitterwindow中乙個常用的方法有 如下圖為乙個分割視窗,採...

WxPython 一 視窗分割

分隔視窗 wx.splitterwindow 就是將視窗分成兩部分,即左右或上下兩部分,兩個視窗之間的分隔線是可以拖動的,稱為 窗框 sash splitterwindow中一般常用的方法有兩種 水平分割跟垂直分割 splitvertically leftwindow,rightwindow,sas...