程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 匯編語言 >> MASM32編程實現窗口漸入漸出效果

MASM32編程實現窗口漸入漸出效果

編輯:匯編語言

因為工作太忙,好久沒寫程序代碼了,不過編寫程序的樂趣令我樂此不疲。

天天跟電腦打交道,一忙起來就忘了休息,弄得眼睛都花了~

為了保護眼睛,偶決定寫一個定時強制休息的程序~

雖然現在這類程序已有不少,不過DIY一下還是不錯的~

先考慮實現倒計時提示窗口,打算讓該窗口漸入漸出~

這裡用封裝在user32.dll中的API函數AnimateWindow來實現。

函數原型為:

BOOLAnimateWindow(
   HWNDhwnd,//指定產生動畫窗口的句柄;
   DWORDdwTime,//指明動畫持續的時間(以微秒計),完成一個動畫的標准時間為200微秒;
   DWORDdwFlags//指定動畫類型。這個參數可以是一個或多個標志的組合。
 );

dwFlags有效值::

AW_SLIDE:使用滑動類型。缺省為滾動類型。使用AW_CENTER標志時被忽略;

AW_ACTIVATE:激活窗口。在使用了AW_HIDE標志後不能使用這個標志;

AW_BLEND:實現淡出效果。只有當hWnd為頂層窗口的時候才可以使用此標志;

AW_HIDE:隱藏窗口,缺省則顯示窗口;

AW_CENTER:若使用了AW_HIDE標志,則使窗口向內重疊,即收縮窗口;若未使用AW_HIDE標志,則使窗口向外擴展,即展開窗口;

AW_HOR_POSITIVE:自左向右顯示窗口。該標志可以在滾動動畫和滑動動畫中使用。當使用AW_CENTER標志時,該標志將被忽略;

AW_VER_POSITIVE:自頂向下顯示窗口。該標志可以在滾動動畫和滑動動畫中使用。當使用AW_CENTER標志時,該標志將被忽略;

AW_VER_NEGATIVE:自下向上顯示窗口。該標志可以在滾動動畫和滑動動畫中使用。當使用AW_CENTER標志時,該標志將被忽略;

返回值:如果函數成功,返回值為非零;如果函數失敗,返回值為零。

注:如果

1、窗口使用了窗口邊界;

2、窗口已經可見仍要顯示窗口;

3、窗口已經隱藏仍要隱藏窗口。

函數調用將失敗。

演示代碼(下載地址:download.csdn.net/source/636309):

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
FileName: AninWin.asm
Author: Purple Endurer
Functiion: Demo the way to use AnimateWindow()
DevEnv: Win XP SP2 + MASM32 v7
log
------------------------------
2008-09-18 Created!
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.586
.model flat, stdcall
option casemap:none
------------------
incboth macro incl
include d:\masm32\include\incl.inc
includelib d:\masm32\lib\incl.lib
endm
include d:\masm32\include\windows.inc
incboth kernel32
incboth user32
incboth gdi32
incboth comctl32
incboth shell32
prototypes
DlgProc PROTO :HWND, :UINT, :WPARAM, :LPARAM
.const
IDD_dlgSetState equ 1000
.data
g_szAnimWin db "AnimateWindow", 0
g_szUser32Dll db "user32.dll", 0
g_szEditCls db "edit", 0
.data?
hInstance HINSTANCE ?
pAnimateWindow DD ?
.code
start:
invoke GetModuleHandle, NULL
mov [hInstance], eax
invoke DialogBoxParam, [hInstance], IDD_dlgSetState, NULL, OFFSET DlgProc, NULL
invoke ExitProcess, NULL
invoke InitCommonControls
DlgProc proc hWnd:HWND, wMsg:UINT, lParam:LPARAM, wParam:WPARAM
.if wMsg == WM_INITDIALOG
--- 獲取AnimateWindow()地址
invoke SendMessage, [hWnd], WM_SETTEXT, NULL, OFFSET g_szAnimWin
invoke GetModuleHandle, OFFSET g_szUser32Dll
invoke GetProcAddress, eax, OFFSET g_szAnimWin
mov [pAnimateWindow], eax
--- 如果取得地址,則漸入顯示對話框窗口
.if [pAnimateWindow]
push AW_BLEND + AW_ACTIVATE
push 400h time
push [hWnd] window Handle
call [pAnimateWindow]
.endif
invoke InvalidateRect, hWnd, 0, TRUE
.elseif wMsg == WM_CLOSE
--- 如果取得地址,則漸出關閉對話框窗口
.if [pAnimateWindow]
push AW_BLEND + AW_HIDE
push 400h
push [hWnd]
call [pAnimateWindow]
.endif
invoke EndDialog, [hWnd], NULL
.else
mov eax, FALSE
ret
.endif
xor eax, eax
ret
DlgProc endp
end start
rsrc.rc
#include "\masm32\include\resource.h"
#define IDC_lblAppInfo 3009
#define IDD_dlgSetState 1000
IDD_dlgSetState DIALOG 10, 10, 120, 114
STYLE 0x0004 | DS_CENTER | WS_CAPTION | DS_SYSMODAL | WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
CAPTION "Get Color"
FONT 9, "宋體"
{
LTEXT "[email protected]\n2004.04.02 廣西河池\n開發環境:MASM32 V8", IDC_lblAppInfo, 0, 75, 105, 30, WS_DISABLED + SS_CENTER
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved