windows环境下32位汇编语言程序设计-第50部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
invoke DestroyWindow;hWinMain
invoke PostQuitMessage;NULL
;********************************************************************
。elseif eax WM_CREATE
mov eax;hWnd
mov hWinMain;eax
invoke CreateWindowEx;WS_EX_CLIENTEDGE;addr szClass;
NULL;WS_CHILD or WS_VISIBLE or ES_MULTILINE
or ES_WANTRETURN or WS_VSCROLL or
ES_AUTOHSCROLL;0;0;0;0;
hWnd;ID_EDIT;hInstance;NULL
mov hWinEdit;eax
invoke CreateToolbarEx;hWinMain;WS_VISIBLE or
WS_CHILD or TBSTYLE_FLAT or TBSTYLE_TOOLTIPS or
CCS_ADJUSTABLE;ID_TOOLBAR;0;HINST_MCTRL;
IDB_STD_SMALL_COLOR;offset stToolbar;
NUM_BUTTONS;0;0;0;0;sizeof TBBUTTON
Mov hWinToolbar;eax
Call _Resize
;********************************************************************
。elseif eax WM_MAND
mov eax;wParam
。if ax IDM_EXIT
invoke EndDialog;hWnd;NULL
。elseif ax != ID_EDIT
invoke wsprintf;addr @szBuffer;
addr szFormat;wParam
invoke MessageBox;hWnd;addr @szBuffer;
addr szCaption;
MB_OK or MB_ICONINFORMATION
。endif
;********************************************************************
。elseif eax WM_SIZE
call _Resize
;********************************************************************
; 处理用户定制工具栏消息
;********************************************************************
。elseif eax WM_NOTIFY
mov ebx;lParam
;********************************************************************
; 因为印刷宽度,请注意缩进格式!
;********************************************************************
。if 'ebx + NMHDRde' TTN_NEEDTEXT
assume ebx:ptr TOOLTIPTEXT
mov eax;'ebx'。hdr。idFrom
mov 'ebx'。lpszText;eax
push hInstance
pop 'ebx'。hinst
assume ebx:nothing
。elseif ('ebx + NMHDRde' TBN_QUERYINSERT) ||
('ebx + NMHDRde' TBN_QUERYDELETE)
mov eax;TRUE
ret
。elseif 'ebx + NMHDRde' TBN_GETBUTTONINFO
assume ebx:ptr TBNOTIFY
mov eax;'ebx'。iItem
。if eax 《 NUM_BUTTONS
mov ecx;sizeof TBBUTTON
mul ecx
add eax;offset stToolbar
invoke RtlMoveMemory;addr 'ebx'。tbButton;eax;sizeof TBBUTTON
invoke LoadString;hInstance;'ebx'。tbButton。idmand;
addr @szBuffer;sizeof @szBuffer
lea eax;@szBuffer
mov 'ebx'。pszText;eax
invoke lstrlen;addr @szBuffer
mov 'ebx'hText;eax
assume ebx:nothing
mov eax;TRUE
ret
。endif
。endif
;********************************************************************
。else
invoke DefWindowProc;hWnd;uMsg;wParam;lParam
ret
。endif
;********************************************************************
xor eax;eax
ret
_ProcWinMain endp
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_WinMain proc
local @stWndClass:WNDCLASSEX
local @stMsg:MSG
invoke InitmonControls
invoke GetModuleHandle;NULL
mov hInstance;eax
invoke LoadMenu;hInstance;IDM_MAIN
mov hMenu;eax
;********************************************************************
; 注册窗口类
;********************************************************************
invoke RtlZeroMemory;addr @stWndClass;sizeof @stWndClass
invoke LoadIcon;hInstance;ICO_MAIN
mov @stWndClass。hIcon;eax
mov @stWndClass。hIconSm;eax
invoke LoadCursor;0;IDC_ARROW
mov @stWndClass。hCursor;eax
push hInstance
pop @stWndClass。hInstance
mov @stWndClass。cbSize;sizeof WNDCLASSEX
mov @stWndClass。style;CS_HREDRAW or CS_VREDRAW
mov @stWndClass。lpfnWndProc;offset _ProcWinMain
mov @stWndClass。hbrBackground;COLOR_BTNFACE+1
mov @stWndClass。lpszClassName;offset szClassName
invoke RegisterClassEx;addr @stWndClass
来源:电子工业出版社 作者:罗云彬 上一页 回书目 下一页
上一页 回书目 下一页
第9章 通用控件
9。3 使用工具栏(3)
;********************************************************************
; 建立并显示窗口
;********************************************************************
invoke CreateWindowEx;NULL;
offset szClassName;offset szCaptionMain;
WS_OVERLAPPEDWINDOW;
CW_USEDEFAULT;CW_USEDEFAULT;700;500;
NULL;hMenu;hInstance;NULL
mov hWinMain;eax
invoke ShowWindow;hWinMain;SW_SHOWNORMAL
invoke UpdateWindow;hWinMain
;********************************************************************
; 消息循环
;********************************************************************
。while TRUE
invoke GetMessage;addr @stMsg;NULL;0;0
。break 。if eax 0
invoke TranslateMessage;addr @stMsg
invoke DispatchMessage;addr @stMsg
。endw
ret
_WinMain endp
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
start:
call _WinMain
invoke ExitProcess;NULL
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
end start
资源脚本文件Toolbar。rc的内容如下:
//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
#include
//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
#define ICO_MAIN 1000
#define IDM_MAIN 1000
#define IDM_NEW 1101
#define IDM_OPEN 1102
#define IDM_SAVE 1103
#define IDM_PAGESETUP 1104
#define IDM_PRINT 1105
#define IDM_EXIT 1106
#define IDM_CUT 1201
#define IDM_COPY 1202
#define IDM_PASTE 1203
#define IDM_FIND 1204
#define IDM_REPLACE 1205
#define IDM_HELP 1301
//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
ICO_MAIN ICON 〃Main。ico〃
//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
IDM_MAIN menu discardable
BEGIN
popup 〃文件(&F)〃
BEGIN
menuitem 〃新文件(&N)。。。〃; IDM_NEW
menuitem 〃打开文件(&O)。。。〃; IDM_OPEN
menuitem 〃保存文件(&S)〃; IDM_SAVE
menuitem separator
menuitem 〃页面设置(&A)。。。〃; IDM_PAGESETUP
menuitem 〃打印(&P)。。。〃; IDM_PRINT
menuitem separator
menuitem 〃退出(&X)〃; IDM_EXIT
END
popup 〃编辑(&E)〃
BEGIN
menuitem 〃剪切(&U)〃; IDM_CUT
menuitem 〃拷贝(&C)〃; IDM_COPY
menuitem 〃粘贴(&P)〃; IDM_PASTE
menuitem separator
menuitem 〃查找字符串(&S)。。。〃;IDM_FIND
menuitem 〃替换字符串(&R)。。。〃;IDM_REPLACE
END
popup 〃帮助(&H)〃
BEGIN
Menuitem 〃帮助(&H)〃; IDM_HELP
END
END
//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
stringtable discardable
BEGIN
IDM_NEW 〃新建文件〃
IDM_OPEN 〃打开文件〃
IDM_SAVE 〃保存文件〃
IDM_PAGESETUP 〃页面设置〃
IDM_PRINT 〃打印〃
IDM_COPY 〃拷贝〃
IDM_CUT 〃剪切〃
IDM_PASTE 〃粘贴〃
IDM_FIND 〃查找〃
IDM_REPLACE 〃替换〃
IDM_HELP 〃帮助〃
END
//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
资源脚本文件中定义了一些菜单,和状态栏例子程序一样,这些菜单也是仅用来做演示用途的,源程序中并没有书写处理菜单项的代码。
字符串表中定义的字符串是供工具提示信息使用的。
例子程序在主窗口的WM_CREATE消息中使用CreateToolbarEx函数建立工具栏。可以注意到,主程序建立了一个标准的窗口,而不是使用对话框做�