用MASM32編寫全屏視窗程式
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 檔名: FullScr.asm
; 作 者:Purple Endurer([email protected])
; 功 能: 演示程式在視窗模式和全屏模式間切換
; Date log
;-------------------------------------------------
;2006-07-03 利用SetTimer()和GetAsyncKeyState()增加Esc鍵
; 作為從全屏切換回視窗模式的熱鍵!
; 在全屏模式下,視窗接收不到WM_KEYDOWN訊息!
;2006-06-30 建立!可在全屏和視窗模式間切換!
; 在一個國外MASM32論壇上,看到有網友討論如何用
; MASM32編寫全屏視窗程式。於是在
; 用VC 6.0寫flash播放器——5、全屏播放
; (http://blog.csdn.net/purpleendurer/archive/2005/12/07/545717.aspx)
; 的程式碼基礎上改寫。
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.386
.model flat, stdcall
option casemap:none
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/gdi32.inc
include /masm32/include/kernel32.inc
include /masm32/include/shell32.inc
includelib /masm32/lib/user32.lib
includelib /masm32/lib/gdi32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/shell32.lib
WinMain proto :DWORD, :DWORD, :DWORD, :DWORD
SetFullScr PROTO :HWND
SetWinMode PROTO :HWND
SwitchMode PROTO :HWND
m_m2m MACRO d1, d2
push d2
pop d1
ENDM
;.const
c_ButtonID equ 1
c_TimerID equ 1
.data
g_szWinClsName db "DemoWinClass", 0
g_szAppName db "全屏顯示演示程式 by PurpleEndurer", 0
g_szBtnClsName db "button", 0
g_szFullScr db "全屏顯示!", 0
g_szSetWinMode db "視窗顯示! 按Esc鍵返回!", 0
g_szFailWinMode db "設定為視窗模式失敗!", 0
g_szFailFullScrMode db "設定為全屏模式失敗!", 0
g_bIsFull dword FALSE
.data?
g_hInstance HINSTANCE ?
g_hwndButton HANDLE ?
g_stOriginPos WINDOWPLACEMENT <>
.code
start:
invoke GetModuleHandle, NULL
mov g_hInstance, eax
invoke WinMain, g_hInstance, NULL, NULL, SW_SHOWDEFAULT
invoke ExitProcess, eax
WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
m_m2m wc.cbSize, SIZEOF WNDCLASSEX
m_m2m wc.style, CS_HREDRAW or CS_VREDRAW
m_m2m wc.lpfnWndProc, OFFSET WndProc
m_m2m wc.cbClsExtra, NULL
m_m2m wc.cbWndExtra, NULL
m_m2m wc.hInstance, g_hInstance
m_m2m wc.hbrBackground, COLOR_WINDOW+1
m_m2m wc.lpszMenuName, NULL
m_m2m wc.lpszClassName, OFFSET g_szWinClsName
invoke LoadIcon, NULL, IDI_APPLICATION
mov wc.hIcon, eax
mov wc.hIconSm, eax
invoke LoadCursor, NULL, IDC_ARROW
mov wc.hCursor, eax
invoke RegisterClassEx, addr wc
INVOKE CreateWindowEx, NULL, ADDR g_szWinClsName, ADDR g_szAppName, /
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, /
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, /
hInst, NULL
mov hwnd, eax
invoke ShowWindow, hwnd, SW_SHOWNORMAL
invoke UpdateWindow, hwnd
.WHILE TRUE
invoke GetMessage, ADDR msg, NULL, 0, 0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
mov eax, msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_DESTROY
invoke PostQuitMessage, NULL
.ELSEIF uMsg==WM_CREATE
;建立按鈕
invoke CreateWindowEx, NULL, ADDR g_szBtnClsName, ADDR g_szFullScr, /
WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,/
25, 25, 560, 50, hWnd, c_ButtonID, g_hInstance, NULL
mov g_hwndButton, eax
.ELSEIF uMsg==WM_COMMAND
mov eax, wParam
.IF lParam!=0
.IF ax==c_ButtonID
shr eax, 16
.IF ax==BN_CLICKED
invoke SwitchMode, hWnd
.ENDIF
.ENDIF
.ENDIF
.ELSEIF uMsg==WM_TIMER
invoke GetAsyncKeyState, VK_ESCAPE;Esc鍵
test eax, 08000h
jz @F
invoke SwitchMode, hWnd
@@:
.ELSE
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
ret
.ENDIF
xor eax, eax
ret
WndProc endp
SwitchMode proc hWnd: HWND
.if g_bIsFull==TRUE
invoke KillTimer, hWnd, c_TimerID ;清除定時器
invoke SetWinMode, hWnd ;設定為視窗模式
.IF eax==0
invoke MessageBox, hWnd, ADDR g_szFailWinMode, ADDR g_szAppName, MB_ICONERROR
ret
.ENDIF
m_m2m g_bIsFull, FALSE
invoke SetWindowText, g_hwndButton, ADDR g_szFullScr ;修改按鈕的文字
.else
invoke SetFullScr, hWnd ;設定為全屏模式
.IF eax==0
invoke MessageBox, hWnd, ADDR g_szFailFullScrMode, ADDR g_szAppName, MB_ICONERROR
ret
.ENDIF
m_m2m g_bIsFull, TRUE
invoke SetTimer, hWnd, c_TimerID, 100, NULL ;啟動定時器,以捕獲Esc鍵
invoke SetWindowText, g_hwndButton, ADDR g_szSetWinMode ;修改按鈕的文字
.endif
ret
SwitchMode endp
;/////////////////////////////////////////////////////////////////////////
;功能:將hWnd指定的視窗切換到全屏模式
; 返回值:若失敗,eax=0;若成功,eax !=0
;/////////////////////////////////////////////////////////////////////////
SetFullScr PROC hWnd: HWND
LOCAL hDC: HWND
LOCAL dwHorzres, dwVertres: DWORD
invoke GetWindowPlacement, hWnd, ADDR g_stOriginPos
invoke GetWindowLong, hWnd, GWL_STYLE
push edi
mov edi, WS_CAPTION
not edi
and eax, edi
push edi
invoke SetWindowLong, hWnd, GWL_STYLE, eax;//去掉標題欄
invoke GetDC, hWnd
mov hDC, eax
invoke GetDeviceCaps, hDC, HORZRES
mov dwHorzres, eax
invoke GetDeviceCaps, hDC, VERTRES
mov dwVertres, eax
xor eax, eax
invoke MoveWindow, hWnd, eax, eax, dwHorzres, dwVertres, TRUE
xor eax, eax
invoke SetWindowPos, hWnd, HWND_TOPMOST, eax, eax, dwHorzres, dwVertres, SWP_SHOWWINDOW ;全屏顯示
ret
SetFullScr ENDP
;/////////////////////////////////////////////////////////////////////////
; 功能:將hWnd指定的視窗切換到視窗模式
; 返回值:若失敗,eax=0;若成功,eax !=0
;/////////////////////////////////////////////////////////////////////////
SetWinMode PROC hWnd: HWND
invoke GetWindowLong, hWnd, GWL_STYLE
or eax, WS_CAPTION
invoke SetWindowLong, hWnd, GWL_STYLE, eax ;//恢復標題欄
invoke ShowWindow, hWnd, SW_HIDE
invoke SetWindowPlacement, hWnd, ADDR g_stOriginPos
ret
SetWinMode ENDP
end start
相關推薦
用MASM32編寫全屏視窗程式
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
用python編寫一個屏保程式(背單詞)
大家好,我是一名即將畢業的大學生,第一次在CSDN上發表文章,之前在其他的部落格上也寫過,但是總的來說,這個平臺的資源要多一些(個人覺得),所以有很多不懂的地方希望大家多多指教。 今天我要給大家分享的是一款自己寫的屏保程式,大學嘛大家最頭疼的就是四六級的考試了,上次考試做閱讀的時候,情不
第2篇 Qt5基礎(二)編寫Qt多視窗程式
1、通過程式碼來設定按鈕的中文文字會覆蓋以前在設計模式設定的文字,(另外,如果大家以前學過Qt 4,那麼現在可能會激動地發現不用在使用setCodecForTr()等函式就可以直接顯示中文了)不過,在程式碼中直接使用中文字不是一個好的習慣,建議在編寫程式時使用英文,當程式完成後使用
用vscode編寫和執行matlab程式
vscode 擴充套件選擇 matlab-runner: 負責執行matlab; matlab: 負責編輯matlab程式碼,包含程式碼補全和命令提示 matlab-runner setting中設定 exe路徑、檔案路徑: "matlab.matlabpa
用WindowBuilder編寫SWT 桌面應用程式
WindowBuilder是一款基於Eclipse平臺的雙向Java的GUI設計外掛式的軟體。它具備SWT/JFACE開發、Swing開發及GWT 開發三大功能,是一款不可多得的Java體系中的WYSIWYG工具。1 安裝WindowBuilder 可以從http://dow
用JAVA編寫漢諾塔程式
漢諾塔問題:三根堅柱和一組中間有洞能在柱子上滑動的盤子,每個盤子有不同的直徑。初始時,所有的盤子按照大小依次堆放在一個柱子上,最大的盤子在最下面。 目標:將所有的盤子從初始的第一根柱子移動到第三根柱子
android超好用基於zxing全屏掃碼【詳細步驟】(一)
公司有個專案是這樣的:要求掃條形碼能識別上面的數字。於是選用了zxing進行掃碼,可一定要吐槽的是:太慢了,一個條形碼要掃5-10秒才能識別。於是換用了zbar進行掃碼。 zbar的速度很快,秒掃,但後面發現一個嚴重的問題,太不準了!不準到一個條形碼我能掃到好
用Python編寫執行Hello World程式
簡介 我們將看一下如何用Python編寫執行一個傳統的“Hello World”程式。通過它,你將學會如何編寫、儲存和執行Python程式。 有兩種使用Python執行你的程式的方式——使用互動式的帶提示符的直譯器或使用原始檔。我們將學習這兩
用vs2008編寫和除錯linux程式 ----VisualGDB 使用教程
一準備工作 1 準備一臺Linux機器用來編譯程式,我用的是虛擬機器安裝的CentOS網路設定成橋接模式 (1)安裝並開啟SSH (2)安裝 gcc g++ gdb (3)關閉防火牆或者開啟允許SSH對外訪問的網路埠 2下載 VisualGDB
用記事本編寫第一個Java程式執行時 出現報錯:錯誤: 類helloworld是公共的, 應在名為 helloworld.java 的檔案中宣告 public class helloworld {
在書本上盲人摸象的摸索學習Java,Java環境配置完成,安裝好eclipse後,便興沖沖的去在記事本上編寫第一個Java程式,結果給破了一盆冷水,略懵 public class helloworld {public static void main(St
用canvas實現全屏背景冒泡動畫
class BGBubble { constructor(opts) { this.defaultOpts = { id: '', //容器ID num: 100,
vs2013用qt編寫串列埠通訊程式
1. 檔案->新建專案-> QT5 project->QT application,命名為HelloSerialPort,點選確定,在彈出來的嚮導介面中選擇下一步->勾選openGL,下一步->點選finish 2. 在mai
用C#編寫的Windows應用程式如何控制TextBox中只能輸入數字?
textbox有個KeyPress事件 把textbox改為對應的就可以用了: private void textBox_KeyPress(object sender, KeyPressEventArgs e)
用python編寫ftp客戶端程式
#!/usr/bin/env python#author:Jims of www.ringkee.com#create date: 2005/02/05#description: Using ftplib module download a file from a ftp server.from ftplib
用MFC編寫的程式在別人電腦上顯示時視窗介面出現問題
最近自己用MFC寫的程式在別人電腦上顯示時,介面及控制元件的位置出現了問題,總體效果是各個特徵變大,導致介面不能正常顯示。開始一直以為是螢幕解析度的問題,可是調整解析度以後,問題沒有解決,查了些資料後
用視窗程式做Java socket編寫聊天程式
服務端: import java.io.*; import java.net.*; import java.util.*; public class ChatServer { boolean started = false; ServerSocket ss = null
JS調用命令實現F11全屏
return ima logs key f11全屏 嘗試 ges div 500px <body onload =‘autoSetFull()‘> <button id=‘btn‘>全屏按鈕</button> <div
用c編寫的一些程式
**1.列印100~200 之間的素數 ** 判斷一個數是否為一個素數,我呼叫<math.h>中的sqrt(x)的寫法,正是因為一個數的因數是成對出現的,所以開方後就只需要判斷它的前一半可以減少一些迴圈次數。 #include <stdio.h> #include
QT 子視窗退出全屏
m_pWidget代表子視窗, 子視窗顯示全屏: m_pWidget->setWindowFlags(Qt::Dialog); m_pWidget->showFullScreen(); 子視窗退出全屏: m_pWidget->showNormal(); m_pWid
微信小程式自定義全屏遮罩
效果如下: 1、wxml <view class='' bindtap='showMask'>顯示遮罩</view> <view class="mask" hidden="{{flag}}"> <view class="maskConten