; 以背景图片填充
;********************************************************************
invoke CreatePatternBrush;@hBmpBack
push eax
invoke SelectObject;hDcBack;eax
invoke PatBlt;hDcBack;0;0;CLOCK_SIZE;CLOCK_SIZE;PATCOPY
invoke DeleteObject;eax
;********************************************************************
; 画钟面
;********************************************************************
invoke BitBlt;hDcBack;0;0;CLOCK_SIZE;CLOCK_SIZE;
@hDcMask;0;0;SRCAND
invoke BitBlt;hDcBack;0;0;CLOCK_SIZE;CLOCK_SIZE;
@hDcCircle;0;0;SRCPAINT
;
invoke DeleteDC;@hDcCircle
invoke DeleteDC;@hDcMask
invoke DeleteObject;@hBmpBack
invoke DeleteObject;@hBmpCircle
invoke DeleteObject;@hBmpMask
ret
_CreateBackGround endp
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_DeleteBackGround proc
来源:电子工业出版社 作者:罗云彬 上一页 回书目 下一页
上一页 回书目 下一页
第7章 图形操作
7。3 创建和使用位图(3)
invoke DeleteDC;hDcBack
invoke DeleteDC;hDcClock
invoke DeleteObject;hBmpBack
invoke DeleteObject;hBmpClock
ret
_DeleteBackGround endp
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_Init proc
local @hBmpBack;@hBmpCircle
;********************************************************************
; 初始化菜单
;********************************************************************
invoke CreatePopupMenu
mov hMenu;eax
invoke AppendMenu;hMenu;0;IDM_BACK1;offset szMenuBack1
invoke AppendMenu;hMenu;0;IDM_BACK2;offset szMenuBack2
invoke AppendMenu;hMenu;MF_SEPARATOR;0;NULL
invoke AppendMenu;hMenu;0;IDM_CIRCLE1;offset szMenuCircle1
invoke AppendMenu;hMenu;0;IDM_CIRCLE2;offset szMenuCircle2
invoke AppendMenu;hMenu;MF_SEPARATOR;0;NULL
invoke AppendMenu;hMenu;0;IDM_EXIT;offset szMenuExit
invoke CheckMenuRadioItem;hMenu;IDM_BACK1;IDM_BACK2;
IDM_BACK1;NULL
invoke CheckMenuRadioItem;hMenu;IDM_CIRCLE1;IDM_CIRCLE2;
IDM_CIRCLE1;NULL
;********************************************************************
; 设置圆形窗口并设置“总在最前面”
;********************************************************************
invoke CreateEllipticRgn;0;0;CLOCK_SIZE+1;CLOCK_SIZE+1
push eax
invoke SetWindowRgn;hWinMain;eax;TRUE
pop eax
invoke DeleteObject;eax
invoke SetWindowPos;hWinMain;HWND_TOPMOST;0;0;0;0;
SWP_NOMOVE or SWP_NOSIZE
;********************************************************************
; 建立背景
;********************************************************************
mov dwNowBack;IDB_BACK1
mov dwNowCircle;IDB_CIRCLE1
invoke _CreateBackGround
invoke _CreateClockPic
invoke SetTimer;hWinMain;ID_TIMER;1000;NULL
ret
_Init endp
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_Quit proc
invoke KillTimer;hWinMain;ID_TIMER
invoke DestroyWindow;hWinMain
invoke PostQuitMessage;NULL
invoke _DeleteBackGround
invoke DestroyMenu;hMenu
ret
_Quit endp
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_ProcWinMain proc uses ebx edi esi hWnd;uMsg;wParam;lParam
local @stPS:PAINTSTRUCT
local @hDC
local @stPos:POINT
mov eax;uMsg
;********************************************************************
。if eax WM_TIMER
invoke _CreateClockPic
invoke InvalidateRect;hWnd;NULL;FALSE
;********************************************************************
。elseif eax WM_PAINT
invoke BeginPaint;hWnd;addr @stPS
mov @hDC;eax
mov eax;@stPS。rcPaint。right
sub eax;@stPS。rcPaint。left
mov ecx;@stPS。rcPaint。bottom
sub ecx;@stPS。rcPaint。top
invoke BitBlt;@hDC;
@stPS。rcPaint。left;@stPS。rcPaint。top;
eax;ecx;hDcClock;@stPS。rcPaint。left;
@stPS。rcPaint。top;SRCCOPY
invoke EndPaint;hWnd;addr @stPS
;********************************************************************
。elseif eax WM_CREATE
mov eax;hWnd
mov hWinMain;eax
invoke _Init
;********************************************************************
。elseif eax WM_MAND
mov eax;wParam
;********************************************************************
;由于印刷宽度的问题,影响源代码的缩进格式,请读者注意
;********************************************************************
。if ax IDM_BACK1
mov dwNowBack;IDB_BACK1
invoke CheckMenuRadioItem;hMenu;IDM_BACK1;IDM_BACK2;IDM_BACK1;NULL
。elseif ax IDM_BACK2
mov dwNowBack;IDB_BACK2
invoke CheckMenuRadioItem;hMenu;IDM_BACK1;IDM_BACK2;IDM_BACK2;NULL
。elseif ax IDM_CIRCLE1
mov dwNowCircle;IDB_CIRCLE1
invoke CheckMenuRadioItem;hMenu;IDM_CIRCLE1;IDM_CIRCLE2;
IDM_CIRCLE1;NULL
。elseif ax IDM_CIRCLE2
mov dwNowCircle;IDB_CIRCLE2
invoke CheckMenuRadioItem;hMenu;IDM_CIRCLE1;IDM_CIRCLE2;
IDM_CIRCLE2;NULL
。elseif ax IDM_EXIT
call _Quit
xor eax;eax
ret
。endif
;********************************************************************
; 恢复源代码缩进格式
;********************************************************************
invoke _DeleteBackGround
invoke _CreateBackGround
invoke _CreateClockPic
invoke InvalidateRect;hWnd;NULL;FALSE
。elseif eax WM_CLOSE
call _Quit
;********************************************************************
; 按下右键时弹出一个POPUP菜单
;********************************************************************
。elseif eax WM_RBUTTONDOWN
invoke GetCursorPos;addr @stPos
invoke TrackPopupMenu;hMenu;TPM_LEFTALIGN;
@stPos。x;@stPos。y;NULL;hWnd;NULL
;********************************************************************
; 由于没有标题栏,下面代码用于按下左键时移动窗口
; UpdateWindow:即时刷新,否则要等到放开鼠标时窗口才会重画
来源:电子工业出版社 作者:罗云彬 上一页 回书目 下一页
上一页 回书目 下一页
第7章 图形操作
7。3 创建和使用位图(4)
;*******************************************
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。
赞一下
添加书签加入书架