;-about.asm------------------------------------------------------------------ ; x86 - Dos & Win32 - Assembly Language Programming ; ; ; ; Written by: John A Lyons ; ; Email : asm@megablast.8k.com ; ; Page : http://www.asmsource.8k.com/ ; ; Compiler : Masm32 v6.13 Microsoft Macro Assembler ; ; Date : 31-Jan-2001 ; ; Purpose : This is a program which demonstrates using a dialog box, ; ; to display information in the about box. ; ; Thanks to betrayed and his program resolver.zip ; ; http://betrayed.org/resolver.zip ; ; ; ;---------------------------------------------------------------------------- ; Compile with nmake ; .386 ; 32-Bit when .386 appears before .MODEL .MODEL FLAT , STDCALL include windows.inc include user32.inc include kernel32.inc include gdi32.inc include shell32.inc includelib user32.lib includelib kernel32.lib includelib gdi32.lib includelib shell32.lib EXTRN wsprintfA:PROC AboutProc PROTO :HWND, :DWORD, :DWORD, :DWORD HyperLinkWndProc PROTO :HWND, :DWORD, :DWORD, :DWORD .const IDM_EXIT equ 1 IDM_ABOUT equ 4 IDC_EXIT equ 8 IDC_URL equ 9 IDI_ICON1 equ 5 IDI_CUR1 equ 101 .data ClassName db "SimpleWinClass",0 AppName db "About",0 menu db "Click About",0 szOpen db "open",0 MenuName db "TheMenu",0 DlgName db "AboutDialog",0 hwndDlg dd 0 hInstance HINSTANCE ? CommandLine LPSTR ? hwnd HWND ? hdc HDC ? buffer db 256 dup(0) hinst2 DWORD ? hover BOOL ? first BOOL FALSE hFinger dd ? orgStatic dd ? .code WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:SDWORD LOCAL wc:WNDCLASSEX LOCAL msg:MSG LOCAL hmenu: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 hInstance pop wc.hInstance invoke LoadIcon, hInstance, IDI_ICON1 mov wc.hIcon,eax mov wc.hbrBackground,COLOR_WINDOW+1 mov wc.lpszMenuName,OFFSET MenuName mov wc.lpszClassName,OFFSET ClassName invoke LoadIcon,NULL,IDI_APPLICATION mov wc.hIconSm,0 invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke RegisterClassEx, addr wc INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\ WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT, 300,100,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 LOCAL ps:PAINTSTRUCT mov eax,uMsg .IF eax==WM_DESTROY invoke PostQuitMessage,NULL .ELSEIF eax==WM_PAINT invoke BeginPaint,hWnd, ADDR ps mov hdc,eax invoke TextOut,hdc,0,0,ADDR menu,(SIZEOF menu) -1 invoke EndPaint,hWnd, ADDR ps .ELSEIF eax==WM_COMMAND mov eax,wParam .IF lParam==0 .IF ax==IDM_ABOUT invoke CreateDialogParam,hInstance, addr DlgName,hWnd,OFFSET AboutProc,NULL mov hwndDlg,eax .ELSEIF ax==IDM_EXIT invoke DestroyWindow,hwnd .ENDIF .ENDIF .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp showtemp proc near lea esi,buffer xor ecx,ecx loll1: inc ecx inc esi cmp [esi],byte ptr 0 jne loll1 invoke TextOut,hdc,0,ebx,ADDR buffer,ecx ret showtemp endp AboutProc PROC hWnd:HWND,iMsg:DWORD,wParam:WPARAM, lParam:LPARAM LOCAL tmpFont :LOGFONT LOCAL rect:RECT LOCAL pt:POINT mov eax,iMsg .if ax==WM_INITDIALOG invoke GetDlgItem,hWnd,IDC_EXIT invoke SetFocus,eax invoke GetDlgItem, hWnd, IDC_URL invoke SetWindowLong, eax, GWL_WNDPROC, ADDR HyperLinkWndProc mov orgStatic,eax invoke LoadCursor,hInstance,IDI_CUR1 mov hFinger,eax xor eax,eax ret .ELSEIF eax == WM_CTLCOLORSTATIC invoke SendMessage,lParam,iMsg,wParam,lParam ret .elseif eax==WM_CLOSE invoke EndDialog,hWnd,NULL mov hwndDlg,0 .elseif eax==WM_COMMAND mov eax,wParam mov edx,eax shr edx,16 .if eax==IDC_EXIT invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL invoke EndDialog,hWnd,NULL mov hwndDlg,0 .endif .else mov eax,FALSE ret .endif mov eax,TRUE ret AboutProc endp HyperLinkWndProc PROC uses ebx, hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD LOCAL tmpFont :LOGFONT LOCAL rect:RECT LOCAL pt:POINT LOCAL ps:PAINTSTRUCT mov eax,uMsg .IF eax==WM_NCHITTEST mov eax, 1 ;We want to handle the non client hit test so we return true or 1 ret .ELSEIF eax == WM_CTLCOLORSTATIC invoke SendMessage, hWnd, WM_GETFONT, 0, 0 mov edx,eax invoke GetObject, edx, sizeof LOGFONT, addr tmpFont mov tmpFont.lfUnderline, TRUE invoke CreateFontIndirect, addr tmpFont mov ebx,eax invoke SelectObject, wParam, ebx .if hover == FALSE invoke SetTextColor, wParam, Blue .else invoke SetTextColor, wParam,Red .endif invoke GetSysColor, COLOR_MENU invoke SetBkColor, wParam, eax invoke DeleteObject,ebx invoke GetStockObject, HOLLOW_BRUSH ret .ELSEIF eax==WM_MOUSEMOVE invoke GetParent,hWnd push ebx mov ebx,eax invoke GetActiveWindow .if eax == ebx invoke GetCursorPos,addr pt invoke GetWindowRect,hWnd,addr rect invoke PtInRect,addr rect,pt.x,pt.y .if eax invoke GetCapture .if !eax invoke SetCapture,hWnd mov hover,TRUE invoke InvalidateRect,hWnd,FALSE,FALSE invoke SetCursor,hFinger .endif .else invoke GetCapture .if eax invoke ReleaseCapture mov hover,FALSE invoke InvalidateRect,hWnd,FALSE,FALSE .endif .endif .endif pop ebx xor eax,eax ret .ELSEIF eax==WM_LBUTTONDOWN invoke GetWindowText,hWnd,offset buffer,sizeof buffer ;change this for using a preset url invoke ShellExecute, NULL, offset szOpen, offset buffer, NULL, NULL, SW_MAXIMIZE ;change this to represent your preset url mov hover,FALSE invoke InvalidateRect,hWnd,FALSE,FALSE invoke SendMessage, hWnd, WM_GETFONT, 0, 0 ;Get the defualt system font mov edx,eax ;store result invoke GetObject, edx, sizeof LOGFONT, addr tmpFont ;get our font into a logfont structure mov tmpFont.lfUnderline, TRUE ;under line the link invoke CreateFontIndirect, addr tmpFont ;Create the new font mov ebx,eax ;We need the return to free the memory later invoke SelectObject, wParam, ebx ;Select our control invoke SetTextColor, wParam, Blue ;change this to change the color of the link xor eax,eax ret .ENDIF invoke CallWindowProc, orgStatic, hWnd, uMsg, wParam, lParam ret HyperLinkWndProc endp start: invoke GetModuleHandle, NULL mov hInstance,eax invoke GetCommandLine invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT invoke ExitProcess,eax end start