| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3579 人关注过本帖, 1 人收藏
标题:[WIN32 程序] 写了个实现窗口半透明效果的程序 最初版 望多批评(转载)
只看楼主 加入收藏
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
结帖率:100%
收藏(1)
 问题点数:0 回复次数:10 
[WIN32 程序] 写了个实现窗口半透明效果的程序 最初版 望多批评(转载)
http://www.

转载自己的 也把程序帖一下罢


Dialog_SetLayeredWindowAttributes.rar (457.89 KB)

程序代码:
;MASMPlus 代码模板 - 以对话框做为主窗口的程序
;*****************************************************************************************************************
;作者:zklhp
;Email:zklhp@
;QQ:493165744
;最后更新:2010.4.3
;版权所有    转载请保持完整
;*****************************************************************************************************************

.386
.Model Flat, StdCall
Option Casemap :None

Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
Include comctl32.inc
include USkin.inc

includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
IncludeLib comctl32.lib
includelib USkin.lib

Include rsrc.inc
include macro.asm
;include DSkinLite.inc
;includeLib dskinlite.lib
   
    DlgProc                 PROTO :DWORD,:DWORD,:DWORD,:DWORD
    ID_TIMER1            equ 1001
    WS_EXD_LAYERED    equ 80000h
    DLG_MAIN                equ 100
.data
   
    szAboutText                db 'By zklhp',0dh,0ah,'Email:zklhp@',0dh,0ah
                                db '版权所有    转载请保持完整    谢谢!',0
    szHelpText                db '本软件运行后会自动获取鼠标移过处的窗口 当遇到想要隐藏的窗口时 点击左Ctrl键即可将所设不透明度应用于鼠标所在窗口',0dh,0ah
                                db '不透明值从0到255 数组越小不透明度越高 0为完全隐藏',0dh,0ah
                                db '特别注意 请勿将不透明度设置的过低(10以下就很难看到了) 否则会造成窗口透明过度而隐藏!',0
    x        FLOAT        210.0f
    y        FLOAT        1.0f

.data?
    hInstance                dd ?
    szBufferCaption        db MAX_PATH dup(?)
    szBufferClass            db MAX_PATH dup(?)
    hWindow                    dd ?
    hDlg                        dd ?
    dwAlpha                    dd ?
.CODE
START:
    invoke GetModuleHandle,NULL
    mov hInstance,eax
   
    invoke USkinInit,NULL,NULL,CTXT("VistaPerfection.msstyles")    ;初使化USkin
    invoke USkinApplyColorTheme,x,y

    invoke InitCommonControls
   
    invoke DialogBoxParam,hInstance,IDD_DLG1,0,offset DlgProc,0
    invoke ExitProcess,0
   
_TimerProc    proc uses edi esi ebx, hWnd:HWND, uMsg:UINT, idEvent:UINT, dwTime:DWORD
    LOCAL stMousePos:POINT
   
    invoke GetCursorPos, addr stMousePos
    invoke WindowFromPoint, stMousePos.x, stMousePos.y
    mov hWindow, eax
    invoke GetWindowText, eax, offset szBufferCaption, sizeof szBufferCaption
    invoke SetDlgItemText, hDlg, IDC_CAPTION, offset szBufferCaption
    invoke GetClassName, hDlg, offset szBufferClass, sizeof szBufferClass
    invoke SetDlgItemText, hDlg, IDC_CLASS, offset szBufferClass
   
    ;按下左ctrl则使之半透明
    invoke GetKeyState, VK_LCONTROL
    shr ax, 15
    .if al && !0
        invoke GetWindowLong,hWindow,GWL_EXSTYLE
        or eax,WS_EXD_LAYERED
        invoke SetWindowLong,hWindow,GWL_EXSTYLE,eax
        invoke SetLayeredWindowAttributes,hWindow,0,dwAlpha,LWA_ALPHA
    .endif
   
    ret
_TimerProc endp

DlgProc proc hWnd,uMsg,wParam,lParam
   
    .if uMsg==WM_INITDIALOG
        push hWnd
        pop hDlg
        invoke LoadIcon,hInstance,101
        invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,eax
        invoke SetTimer,hWnd,ID_TIMER1,200d,offset _TimerProc
        invoke SendDlgItemMessage, hWnd, IDC_TRB1, TBM_SETRANGEMIN, NULL, 0
        invoke SendDlgItemMessage, hWnd, IDC_TRB1, TBM_SETRANGEMAX, NULL, 255
       
        invoke SendDlgItemMessage, hWnd, IDC_TRB1, TBM_SETPOS, TRUE, 255
        invoke SetDlgItemInt,hWnd,IDC_EDT1,255,0
       
        mov dwAlpha,255
       
    .elseif    uMsg == WM_HSCROLL
        invoke SendDlgItemMessage, hWnd, IDC_TRB1, TBM_GETPOS, NULL, NULL
        mov dwAlpha,eax
        invoke SetDlgItemInt,hWnd,IDC_EDT1,dwAlpha,0
    .elseif uMsg==WM_COMMAND
        mov eax,wParam
        and eax,0ffffh
        .if eax==IDOK
            invoke SendMessage,hWnd,WM_COMMAND,IDC_BTN1,0
        .elseif eax==IDC_BTN1
            invoke MessageBox,hWnd,offset szAboutText,CTXT('关于'),0
        .elseif eax==IDC_BTN3
            invoke MessageBox,hWnd,offset szHelpText,CTXT('帮助'),0
        .elseif eax==IDC_BTN2
            invoke EndDialog,hWnd,wParam
        .elseif eax==IDCANCEL
            invoke SendMessage,hWnd,WM_CLOSE,0,0
        .endif
    .elseif uMsg==WM_CLOSE
        invoke EndDialog,hWnd,wParam
    .else
        mov eax,FALSE
        ret
    .endif
    mov eax,TRUE
    ret
DlgProc endp

END START





[ 本帖最后由 zklhp 于 2010-4-7 14:12 编辑 ]
搜索更多相关主题的帖子: 初版 半透明 窗口 效果 批评 
2010-04-05 11:08
mysteryice
Rank: 2
等 级:论坛游民
帖 子:30
专家分:26
注 册:2010-4-4
收藏
得分:0 
只能看看了。。。
2010-04-05 16:51
powerfree
Rank: 2
等 级:论坛游民
帖 子:12
专家分:17
注 册:2008-11-2
收藏
得分:0 

2010-04-05 18:32
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
.........
2010-04-05 19:33
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
呵呵,不错啊
2010-04-07 09:42
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用zklhp在2010-4-5 11:08:33的发言:

http://www.

转载自己的 也把程序帖一下罢



 
;MASMPlus 代码模板 - 以对话框做为主窗口的程序
;*****************************************************************************************************************
;作者:zklhp
;Email:zklhp@
;QQ:493165744
;最后更新:2010.4.3
;版权所有    转载请保持完整
;*****************************************************************************************************************
 
.386
.Model Flat, StdCall
Option Casemap :None
 
Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
Include comctl32.inc
include USkin.inc
 
includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
IncludeLib comctl32.lib
includelib USkin.lib
 
Include rsrc.inc
include macro.asm
;include DSkinLite.inc
;includeLib dskinlite.lib
   
    DlgProc                 PROTO :DWORD,:DWORD,:DWORD,:DWORD
    ID_TIMER1            equ 1001
    WS_EXD_LAYERED    equ 80000h
    DLG_MAIN                equ 100
.data
   
    szAboutText                db 'By zklhp',0dh,0ah,'Email:zklhp@  QQ:493165744',0dh,0ah
                                db '版权所有    转载请保持完整    谢谢!',0
    szHelpText                db '本软件运行后会自动获取鼠标移过处的窗口 当遇到想要隐藏的窗口时 点击左Ctrl键即可将所设不透明度应用于鼠标所在窗口',0dh,0ah
                                db '不透明值从0到255 数组越小不透明度越高 0为完全隐藏',0dh,0ah
                                db '特别注意 请勿将不透明度设置的过低(10以下就很难看到了) 否则会造成窗口透明过度而隐藏!',0
    x        FLOAT        210.0f
    y        FLOAT        1.0f
 
.data?
    hInstance                dd ?
    szBufferCaption        db MAX_PATH dup(?)
    szBufferClass            db MAX_PATH dup(?)
    hWindow                    dd ?
    hDlg                        dd ?
    dwAlpha                    dd ?
.CODE
START:
    invoke GetModuleHandle,NULL
    mov hInstance,eax
   
    invoke USkinInit,NULL,NULL,CTXT("VistaPerfection.msstyles")    ;初使化USkin
    invoke USkinApplyColorTheme,x,y
 
    invoke InitCommonControls
   
    invoke DialogBoxParam,hInstance,IDD_DLG1,0,offset DlgProc,0
    invoke ExitProcess,0
   
_TimerProc    proc uses edi esi ebx, hWnd:HWND, uMsg:UINT, idEvent:UINT, dwTime:DWORD
    LOCAL stMousePos:POINT
   
    invoke GetCursorPos, addr stMousePos
    invoke WindowFromPoint, stMousePos.x, stMousePos.y
    mov hWindow, eax
    invoke GetWindowText, eax, offset szBufferCaption, sizeof szBufferCaption
    invoke SetDlgItemText, hDlg, IDC_CAPTION, offset szBufferCaption
    invoke GetClassName, hDlg, offset szBufferClass, sizeof szBufferClass
    invoke SetDlgItemText, hDlg, IDC_CLASS, offset szBufferClass
   
    ;按下左ctrl则使之半透明
    invoke GetKeyState, VK_LCONTROL
    shr ax, 15
    .if al && !0
        invoke GetWindowLong,hWindow,GWL_EXSTYLE
        or eax,WS_EXD_LAYERED
        invoke SetWindowLong,hWindow,GWL_EXSTYLE,eax
        invoke SetLayeredWindowAttributes,hWindow,0,dwAlpha,LWA_ALPHA
    .endif
   
    ret
_TimerProc endp
 
DlgProc proc hWnd,uMsg,wParam,lParam
   
    .if uMsg==WM_INITDIALOG
        push hWnd
        pop hDlg
        invoke LoadIcon,hInstance,101
        invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,eax
        invoke SetTimer,hWnd,ID_TIMER1,200d,offset _TimerProc
        invoke SendDlgItemMessage, hWnd, IDC_TRB1, TBM_SETRANGEMIN, NULL, 0
        invoke SendDlgItemMessage, hWnd, IDC_TRB1, TBM_SETRANGEMAX, NULL, 255
        
        invoke SendDlgItemMessage, hWnd, IDC_TRB1, TBM_SETPOS, TRUE, 255
        invoke SetDlgItemInt,hWnd,IDC_EDT1,255,0
        
        mov dwAlpha,255
        
    .elseif    uMsg == WM_HSCROLL
        invoke SendDlgItemMessage, hWnd, IDC_TRB1, TBM_GETPOS, NULL, NULL
        mov dwAlpha,eax
        invoke SetDlgItemInt,hWnd,IDC_EDT1,dwAlpha,0
    .elseif uMsg==WM_COMMAND
        mov eax,wParam
        and eax,0ffffh
        .if eax==IDOK
            invoke SendMessage,hWnd,WM_COMMAND,IDC_BTN1,0
        .elseif eax==IDC_BTN1
            invoke MessageBox,hWnd,offset szAboutText,CTXT('关于'),0
        .elseif eax==IDC_BTN3
            invoke MessageBox,hWnd,offset szHelpText,CTXT('帮助'),0
        .elseif eax==IDC_BTN2
            invoke EndDialog,hWnd,wParam
        .elseif eax==IDCANCEL
            invoke SendMessage,hWnd,WM_CLOSE,0,0
        .endif
    .elseif uMsg==WM_CLOSE
        invoke EndDialog,hWnd,wParam
    .else
        mov eax,FALSE
        ret
    .endif
    mov eax,TRUE
    ret
DlgProc endp
 
END START

晕 打错符号了~
2010-04-07 14:13
x64asm
Rank: 2
来 自:X64ASM
等 级:论坛游民
威 望:1
帖 子:45
专家分:36
注 册:2010-5-20
收藏
得分:0 
貌似无法对CONSOLE窗口进行操作...
另外 窗口类取的不正确

[ 本帖最后由 x64asm 于 2010-5-20 07:38 编辑 ]

姓名:旖旎[x64asm]
QQ:6405035,6405038
2010-05-20 07:33
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用x64asm在2010-5-20 07:33:23的发言:

貌似无法对CONSOLE窗口进行操作...
另外 窗口类取的不正确

貌似无法对CONSOLE窗口进行操作...

这个倒是~

窗口类的话 要是点在窗口内部当然不行了~ 点在标题栏那可以啊~
2010-05-20 11:52
A_new
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-7-15
收藏
得分:0 
这段代码
        invoke GetWindowLong,hWindow,GWL_EXSTYLE
        or eax,WS_EXD_LAYERED
        invoke SetWindowLong,hWindow,GWL_EXSTYLE,eax
        invoke SetLayeredWindowAttributes,hWindow,0,dwAlpha,LWA_ALPHA

换换位置
程序代码:
.if    eax==WM_INITDIALOG
        invoke GetWindowLong,hWin, GWL_STYLE
        or eax,WS_EX_LAYERED
        invoke SetWindowLong,hWin,GWL_STYLE,eax;// 设置分层属性
        INVOKE SendDlgItemMessage,hWin,IDC_TRB,TBM_SETRANGEMIN,NULL,0;设置滑动条变化范围
        INVOKE SendDlgItemMessage,hWin,IDC_TRB,TBM_SETRANGEMAX,NULL,255
        invoke SendDlgItemMessage,hWin,IDC_TRB,TBM_SETPOS,TRUE,100;设置滑动条初始值

放在然后再
.elseif eax==WM_HSCROLL
            invoke SendDlgItemMessage,hWin,IDC_TRB,TBM_GETPOS,NULL,NULL
            mov dwAlpha,eax
            invoke SetLayeredWindowAttributes,hWin,0,dwAlpha,LWA_ALPHA

怎么就不行了望指教
2015-01-07 18:46
A_new
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-7-15
收藏
得分:0 
以下是引用zklhp在2010-4-5 11:08:33的发言:

http://www.

转载自己的 也把程序帖一下罢



 
;MASMPlus 代码模板 - 以对话框做为主窗口的程序
;*****************************************************************************************************************
;作者:zklhp
;Email:zklhp@
;QQ:493165744
;最后更新:2010.4.3
;版权所有    转载请保持完整
;*****************************************************************************************************************
 
.386
.Model Flat, StdCall
Option Casemap :None
 
Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
Include comctl32.inc
include USkin.inc
 
includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
IncludeLib comctl32.lib
includelib USkin.lib
 
Include rsrc.inc
include macro.asm
;include DSkinLite.inc
;includeLib dskinlite.lib
   
    DlgProc                 PROTO :DWORD,:DWORD,:DWORD,:DWORD
    ID_TIMER1            equ 1001
    WS_EXD_LAYERED    equ 80000h
    DLG_MAIN                equ 100
.data
   
    szAboutText                db 'By zklhp',0dh,0ah,'Email:zklhp@  QQ:493165744',0dh,0ah
                                db '版权所有    转载请保持完整    谢谢!',0
    szHelpText                db '本软件运行后会自动获取鼠标移过处的窗口 当遇到想要隐藏的窗口时 点击左Ctrl键即可将所设不透明度应用于鼠标所在窗口',0dh,0ah
                                db '不透明值从0到255 数组越小不透明度越高 0为完全隐藏',0dh,0ah
                                db '特别注意 请勿将不透明度设置的过低(10以下就很难看到了) 否则会造成窗口透明过度而隐藏!',0
    x        FLOAT        210.0f
    y        FLOAT        1.0f
 
.data?
    hInstance                dd ?
    szBufferCaption        db MAX_PATH dup(?)
    szBufferClass            db MAX_PATH dup(?)
    hWindow                    dd ?
    hDlg                        dd ?
    dwAlpha                    dd ?
.CODE
START:
    invoke GetModuleHandle,NULL
    mov hInstance,eax
   
    invoke USkinInit,NULL,NULL,CTXT("VistaPerfection.msstyles")    ;初使化USkin
    invoke USkinApplyColorTheme,x,y
 
    invoke InitCommonControls
   
    invoke DialogBoxParam,hInstance,IDD_DLG1,0,offset DlgProc,0
    invoke ExitProcess,0
   
_TimerProc    proc uses edi esi ebx, hWnd:HWND, uMsg:UINT, idEvent:UINT, dwTime:DWORD
    LOCAL stMousePos:POINT
   
    invoke GetCursorPos, addr stMousePos
    invoke WindowFromPoint, stMousePos.x, stMousePos.y
    mov hWindow, eax
    invoke GetWindowText, eax, offset szBufferCaption, sizeof szBufferCaption
    invoke SetDlgItemText, hDlg, IDC_CAPTION, offset szBufferCaption
    invoke GetClassName, hDlg, offset szBufferClass, sizeof szBufferClass
    invoke SetDlgItemText, hDlg, IDC_CLASS, offset szBufferClass
   
    ;按下左ctrl则使之半透明
    invoke GetKeyState, VK_LCONTROL
    shr ax, 15
    .if al && !0
        invoke GetWindowLong,hWindow,GWL_EXSTYLE
        or eax,WS_EXD_LAYERED
        invoke SetWindowLong,hWindow,GWL_EXSTYLE,eax
        invoke SetLayeredWindowAttributes,hWindow,0,dwAlpha,LWA_ALPHA
    .endif
   
    ret
_TimerProc endp
 
DlgProc proc hWnd,uMsg,wParam,lParam
   
    .if uMsg==WM_INITDIALOG
        push hWnd
        pop hDlg
        invoke LoadIcon,hInstance,101
        invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,eax
        invoke SetTimer,hWnd,ID_TIMER1,200d,offset _TimerProc
        invoke SendDlgItemMessage, hWnd, IDC_TRB1, TBM_SETRANGEMIN, NULL, 0
        invoke SendDlgItemMessage, hWnd, IDC_TRB1, TBM_SETRANGEMAX, NULL, 255
        
        invoke SendDlgItemMessage, hWnd, IDC_TRB1, TBM_SETPOS, TRUE, 255
        invoke SetDlgItemInt,hWnd,IDC_EDT1,255,0
        
        mov dwAlpha,255
        
    .elseif    uMsg == WM_HSCROLL
        invoke SendDlgItemMessage, hWnd, IDC_TRB1, TBM_GETPOS, NULL, NULL
        mov dwAlpha,eax
        invoke SetDlgItemInt,hWnd,IDC_EDT1,dwAlpha,0
    .elseif uMsg==WM_COMMAND
        mov eax,wParam
        and eax,0ffffh
        .if eax==IDOK
            invoke SendMessage,hWnd,WM_COMMAND,IDC_BTN1,0
        .elseif eax==IDC_BTN1
            invoke MessageBox,hWnd,offset szAboutText,CTXT('关于'),0
        .elseif eax==IDC_BTN3
            invoke MessageBox,hWnd,offset szHelpText,CTXT('帮助'),0
        .elseif eax==IDC_BTN2
            invoke EndDialog,hWnd,wParam
        .elseif eax==IDCANCEL
            invoke SendMessage,hWnd,WM_CLOSE,0,0
        .endif
    .elseif uMsg==WM_CLOSE
        invoke EndDialog,hWnd,wParam
    .else
        mov eax,FALSE
        ret
    .endif
    mov eax,TRUE
    ret
DlgProc endp
 
END START
把 invoke GetWindowLong,hWindow,GWL_EXSTYLE
        or eax,WS_EXD_LAYERED
        invoke SetWindowLong,hWindow,GWL_EXSTYLE,eax
        invoke SetLayeredWindowAttributes,hWindow,0,dwAlpha,LWA_ALPHA
放在if eax==IDOK这里怎么就不半透明了RPWT?
2015-01-12 18:59
快速回复:[WIN32 程序] 写了个实现窗口半透明效果的程序 最初版 望多批评(转载)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028325 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved