.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\comctl32.inc
includelib \masm32\lib\comctl32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
WinMain PROTO :DWORD, :DWORD, :DWORD, :DWORD
.CONST
IDC_PROGRESS equ 1
IDC_STATUS equ 2
IDC_TIMER equ 3
.DATA
ClassName db "CommonControlWinClass", 0
AppName db "Common Control Demo", 0
ProgressClass db "msctls_progress32", 0
Message db "Finished!", 0
TimerID dd 0
.data?
hInstance dd ?
hwndProgress dd ?
hwndStatus dd ?
CurrentStep dd ?
.code
start:
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke WinMain, hInstance, NULL, NULL, SW_SHOWDEFAULT
invoke ExitProcess, eax
invoke InitCommonControls
WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.cbSize, SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
push hInst
pop wc.hInstance
mov wc.hbrBackground, COLOR_APPWORKSPACE
mov wc.lpszMenuName, NULL
mov wc.lpszClassName, OFFSET ClassName
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, WS_EX_CLIENTEDGE, ADDR ClassName, ADDR AppName,
WS_OVERLAPPED + WS_CAPTION + WS_SYSMENU + WS_MINIMIZEBOX + \
WS_MAXIMIZEBOX + WS_VISIBLE, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL,
hInst, NULL
mov hwnd, eax
.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_CREATE
invoke CreateWindowEx, NULL, ADDR ProgressClass, NULL,
WS_CHILD + WS_VISIBLE + PBS_SMOOTH + PBS_VERTICAL, 100,
200, 300, 20, hWnd, IDC_PROGRESS,
hInstance, NULL
mov hwndProgress, eax
invoke SendMessage, hwndProgress, PBM_SETBARCOLOR, 0, 0000FFh
invoke SendMessage, hwndProgress, PBM_SETBKCOLOR, 0, 800000h
mov eax, 1000
mov CurrentStep, eax
shl eax, 16
invoke SendMessage, hwndProgress, PBM_SETRANGE, 0, eax
invoke SendMessage, hwndProgress, PBM_SETSTEP, 10, 0
invoke CreateStatusWindow, WS_CHILD+WS_VISIBLE, NULL, hWnd, IDC_STATUS
mov hwndStatus, eax
invoke SetTimer, hWnd, IDC_TIMER, 25, NULL
mov TimerID, eax
.elseif uMsg == WM_DESTROY
invoke PostQuitMessage, NULL
.if TimerID != 0
invoke KillTimer, hWnd, TimerID
.endif
.elseif uMsg == WM_TIMER
invoke SendMessage, hwndProgress, PBM_STEPIT, 0, 0
sub CurrentStep, 10
.if CurrentStep == 0
invoke KillTimer, hWnd, TimerID
mov TimerID, 0
invoke SendMessage, hwndStatus, SB_SETTEXT, 0, addr Message
invoke MessageBox, hWnd, addr Message, addr AppName, MB_OK + MB_ICONINFORMATION
invoke SendMessage, hwndStatus, SB_SETTEXT, 0, 0
invoke SendMessage, hwndProgress, PBM_SETPOS, 0, 0
.endif
.else
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
ret
.endif
xor eax, eax
ret
WndProc endp
end start
LjM4NgoubW9kZWwgZmxhdCwgc3RkY2FsbApvcHRpb24gY2FzZW1hcDpub25lCgppbmNsdWRlICAgICAgICAgXG1hc20zMlxpbmNsdWRlXHdpbmRvd3MuaW5jCmluY2x1ZGUgICAgICAgICBcbWFzbTMyXGluY2x1ZGVcdXNlcjMyLmluYwppbmNsdWRlICAgICAgICAgXG1hc20zMlxpbmNsdWRlXGtlcm5lbDMyLmluYwppbmNsdWRlICAgICAgICAgXG1hc20zMlxpbmNsdWRlXGNvbWN0bDMyLmluYwppbmNsdWRlbGliICAgICAgXG1hc20zMlxsaWJcY29tY3RsMzIubGliCmluY2x1ZGVsaWIgICAgICBcbWFzbTMyXGxpYlx1c2VyMzIubGliCmluY2x1ZGVsaWIgICAgICBcbWFzbTMyXGxpYlxrZXJuZWwzMi5saWIKCldpbk1haW4gUFJPVE8gOkRXT1JELCA6RFdPUkQsIDpEV09SRCwgOkRXT1JECgouQ09OU1QKCklEQ19QUk9HUkVTUyAgICAgICAgICAgIGVxdSAgICAgMQpJRENfU1RBVFVTICAgICAgICAgICAgICBlcXUgICAgIDIKSURDX1RJTUVSICAgICAgICAgICAgICAgZXF1ICAgICAzCgouREFUQQoKQ2xhc3NOYW1lICAgICAgICAgICAgICAgZGIgICAgICAiQ29tbW9uQ29udHJvbFdpbkNsYXNzIiwgMApBcHBOYW1lICAgICAgICAgICAgICAgICBkYiAgICAgICJDb21tb24gQ29udHJvbCBEZW1vIiwgMApQcm9ncmVzc0NsYXNzICAgICAgICAgICBkYiAgICAgICJtc2N0bHNfcHJvZ3Jlc3MzMiIsIDAKTWVzc2FnZSAgICAgICAgICAgICAgICAgZGIgICAgICAiRmluaXNoZWQhIiwgMApUaW1lcklEICAgICAgICAgICAgICAgICBkZCAgICAgIDAKCi5kYXRhPwpoSW5zdGFuY2UgICAgICAgICAgICAgICBkZCAgICAgID8KaHduZFByb2dyZXNzICAgICAgICAgICAgZGQgICAgICA/Cmh3bmRTdGF0dXMgICAgICAgICAgICAgIGRkICAgICAgPwpDdXJyZW50U3RlcCAgICAgICAgICAgICBkZCAgICAgID8KCi5jb2RlCnN0YXJ0OgogICAgICAgIGludm9rZSAgR2V0TW9kdWxlSGFuZGxlLCBOVUxMCiAgICAgICAgbW92ICAgICBoSW5zdGFuY2UsIGVheAogICAgICAgIGludm9rZSAgV2luTWFpbiwgaEluc3RhbmNlLCBOVUxMLCBOVUxMLCBTV19TSE9XREVGQVVMVAogICAgICAgIGludm9rZSAgRXhpdFByb2Nlc3MsIGVheAogICAgICAgIGludm9rZSAgSW5pdENvbW1vbkNvbnRyb2xzCgpXaW5NYWluIHByb2MgaEluc3Q6SElOU1RBTkNFLCBoUHJldkluc3Q6SElOU1RBTkNFLCBDbWRMaW5lOkxQU1RSLCBDbWRTaG93OkRXT1JECiBMT0NBTCB3YzpXTkRDTEFTU0VYCiBMT0NBTCBtc2c6TVNHCiBMT0NBTCBod25kOkhXTkQKCiAgICAgICAgbW92ICAgICB3Yy5jYlNpemUsIFNJWkVPRiBXTkRDTEFTU0VYCiAgICAgICAgbW92ICAgICB3Yy5zdHlsZSwgIENTX0hSRURSQVcgb3IgQ1NfVlJFRFJBVwogICAgICAgIG1vdiAgICAgd2MubHBmblduZFByb2MsICBPRkZTRVQgV25kUHJvYwogICAgICAgIG1vdiAgICAgd2MuY2JDbHNFeHRyYSwgTlVMTAogICAgICAgIG1vdiAgICAgd2MuY2JXbmRFeHRyYSwgTlVMTAogICAgICAgIHB1c2ggICAgaEluc3QKICAgICAgICBwb3AgICAgIHdjLmhJbnN0YW5jZQogICAgICAgIG1vdiAgICAgd2MuaGJyQmFja2dyb3VuZCwgQ09MT1JfQVBQV09SS1NQQUNFCiAgICAgICAgbW92ICAgICB3Yy5scHN6TWVudU5hbWUsIE5VTEwKICAgICAgICBtb3YgICAgIHdjLmxwc3pDbGFzc05hbWUsIE9GRlNFVCBDbGFzc05hbWUKICAgICAgICBpbnZva2UgIExvYWRJY29uLCBOVUxMLCBJRElfQVBQTElDQVRJT04KICAgICAgICBtb3YgICAgIHdjLmhJY29uLCBlYXgKICAgICAgICBtb3YgICAgIHdjLmhJY29uU20sIGVheAogICAgICAgIGludm9rZSAgTG9hZEN1cnNvciwgTlVMTCwgSURDX0FSUk9XCiAgICAgICAgbW92ICAgICB3Yy5oQ3Vyc29yLCBlYXgKICAgICAgICBpbnZva2UgIFJlZ2lzdGVyQ2xhc3NFeCwgYWRkciB3YwogICAgICAgIGludm9rZSAgQ3JlYXRlV2luZG93RXgsIFdTX0VYX0NMSUVOVEVER0UsIEFERFIgQ2xhc3NOYW1lLCBBRERSIEFwcE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1NfT1ZFUkxBUFBFRCArIFdTX0NBUFRJT04gKyBXU19TWVNNRU5VICsgV1NfTUlOSU1JWkVCT1ggKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1NfTUFYSU1JWkVCT1ggKyBXU19WSVNJQkxFLCBDV19VU0VERUZBVUxULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXX1VTRURFRkFVTFQsIENXX1VTRURFRkFVTFQsIENXX1VTRURFRkFVTFQsIE5VTEwsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaEluc3QsIE5VTEwKICAgICAgICBtb3YgICAgIGh3bmQsIGVheAogICAgICAgIC53aGlsZSBUUlVFCiAgICAgICAgICAgICAgICBpbnZva2UgIEdldE1lc3NhZ2UsIEFERFIgbXNnLCBOVUxMLCAwLCAwCiAgICAgICAgICAgICAgICAuQlJFQUsgIC5JRiAoIWVheCkKICAgICAgICAgICAgICAgIGludm9rZSAgVHJhbnNsYXRlTWVzc2FnZSwgQUREUiBtc2cKICAgICAgICAgICAgICAgIGludm9rZSAgRGlzcGF0Y2hNZXNzYWdlLCBBRERSIG1zZwogICAgICAgIC5lbmR3CiAgICAgICAgbW92ICAgICBlYXgsIG1zZy53UGFyYW0KICAgICAgICByZXQKV2luTWFpbiBlbmRwCgpXbmRQcm9jIHByb2MgaFduZDpIV05ELCB1TXNnOlVJTlQsIHdQYXJhbTpXUEFSQU0sIGxQYXJhbTpMUEFSQU0KCiAgICAgICAgLmlmIHVNc2cgPT0gV01fQ1JFQVRFCiAgICAgICAgICAgICAgICBpbnZva2UgQ3JlYXRlV2luZG93RXgsIE5VTEwsIEFERFIgUHJvZ3Jlc3NDbGFzcywgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTX0NISUxEICsgV1NfVklTSUJMRSArIFBCU19TTU9PVEggKyBQQlNfVkVSVElDQUwsIDEwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMCwgMzAwLCAyMCwgaFduZCwgSURDX1BST0dSRVNTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaEluc3RhbmNlLCBOVUxMCiAgICAgICAgICAgICAgICBtb3YgICAgIGh3bmRQcm9ncmVzcywgZWF4CgogICAgICAgICAgICAgICAgaW52b2tlICBTZW5kTWVzc2FnZSwgaHduZFByb2dyZXNzLCAgUEJNX1NFVEJBUkNPTE9SLCAgMCwgIDAwMDBGRmgKICAgICAgICAgICAgICAgIGludm9rZSAgU2VuZE1lc3NhZ2UsIGh3bmRQcm9ncmVzcywgIFBCTV9TRVRCS0NPTE9SLCAgMCwgIDgwMDAwMGgKCgogICAgICAgICAgICAgICAgbW92ICAgICBlYXgsIDEwMDAKICAgICAgICAgICAgICAgIG1vdiAgICAgQ3VycmVudFN0ZXAsIGVheAogICAgICAgICAgICAgICAgc2hsICAgICBlYXgsIDE2CiAgICAgICAgICAgICAgICBpbnZva2UgIFNlbmRNZXNzYWdlLCBod25kUHJvZ3Jlc3MsIFBCTV9TRVRSQU5HRSwgMCwgZWF4CiAgICAgICAgICAgICAgICBpbnZva2UgIFNlbmRNZXNzYWdlLCBod25kUHJvZ3Jlc3MsIFBCTV9TRVRTVEVQLCAxMCwgMAogICAgICAgICAgICAgICAgaW52b2tlICBDcmVhdGVTdGF0dXNXaW5kb3csIFdTX0NISUxEK1dTX1ZJU0lCTEUsIE5VTEwsIGhXbmQsIElEQ19TVEFUVVMKICAgICAgICAgICAgICAgIG1vdiAgICAgaHduZFN0YXR1cywgZWF4CiAgICAgICAgICAgICAgICBpbnZva2UgIFNldFRpbWVyLCBoV25kLCBJRENfVElNRVIsIDI1LCBOVUxMCiAgICAgICAgICAgICAgICBtb3YgICAgIFRpbWVySUQsIGVheAoKCgogICAgICAgIC5lbHNlaWYgdU1zZyA9PSBXTV9ERVNUUk9ZCiAgICAgICAgICAgICAgICBpbnZva2UgIFBvc3RRdWl0TWVzc2FnZSwgTlVMTAogICAgICAgICAgICAgICAgLmlmIFRpbWVySUQgIT0gMAogICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UgS2lsbFRpbWVyLCBoV25kLCBUaW1lcklECiAgICAgICAgICAgICAgICAuZW5kaWYKICAgICAgICAuZWxzZWlmIHVNc2cgPT0gV01fVElNRVIKICAgICAgICAgICAgICAgIGludm9rZSAgU2VuZE1lc3NhZ2UsIGh3bmRQcm9ncmVzcywgUEJNX1NURVBJVCwgMCwgMAogICAgICAgICAgICAgICAgc3ViICAgICBDdXJyZW50U3RlcCwgMTAKICAgICAgICAgICAgICAgIC5pZiBDdXJyZW50U3RlcCA9PSAwCiAgICAgICAgICAgICAgICAgICAgICAgIGludm9rZSAgS2lsbFRpbWVyLCBoV25kLCBUaW1lcklECiAgICAgICAgICAgICAgICAgICAgICAgIG1vdiAgICAgVGltZXJJRCwgMAogICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UgIFNlbmRNZXNzYWdlLCBod25kU3RhdHVzLCBTQl9TRVRURVhULCAwLCBhZGRyIE1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlICBNZXNzYWdlQm94LCBoV25kLCBhZGRyIE1lc3NhZ2UsIGFkZHIgQXBwTmFtZSwgTUJfT0sgKyBNQl9JQ09OSU5GT1JNQVRJT04KICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlICBTZW5kTWVzc2FnZSwgaHduZFN0YXR1cywgU0JfU0VUVEVYVCwgMCwgMAogICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UgIFNlbmRNZXNzYWdlLCBod25kUHJvZ3Jlc3MsIFBCTV9TRVRQT1MsIDAsIDAKICAgICAgICAgICAgICAgIC5lbmRpZgogICAgICAgIC5lbHNlCiAgICAgICAgICAgICAgICBpbnZva2UgIERlZldpbmRvd1Byb2MsIGhXbmQsIHVNc2csIHdQYXJhbSwgbFBhcmFtICAgICAgICAgICAgCiAgICAgICAgICAgICAgICByZXQKICAgICAgICAuZW5kaWYKICAgICAgICB4b3IgICAgIGVheCwgZWF4CiAgICAgICAgcmV0ClduZFByb2MgZW5kcAoKZW5kIHN0YXJ0Cg==