📄 tut10.html
字号:
.IF ax==IDC_BUTTON</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
invoke SetDlgItemText,hWnd,IDC_EDIT,ADDR TestString</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
.ELSEIF ax==IDC_EXIT</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
.ENDIF</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
.ENDIF</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
.ENDIF</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
.ELSE</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
mov eax,FALSE</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
ret</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
.ENDIF</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
mov eax,TRUE</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
ret</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>DlgProc
endp</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>end
start</font></font></font></b>
<br>
<hr WIDTH="100%">
<center><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>dialog.rc
(part 2)</font></font></font></b></center>
<hr WIDTH="100%">
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>#include
"resource.h"</font></font></font></b>
<p><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>#define
IDC_EDIT
3000</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>#define
IDC_BUTTON
3001</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>#define
IDC_EXIT
3002</font></font></font></b>
<p><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>#define
IDR_MENU1
3003</font></font></font></b>
<p><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>#define
IDM_GETTEXT
32000</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>#define
IDM_CLEAR
32001</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>#define
IDM_EXIT
32003</font></font></font></b>
<br>
<p><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>MyDialog
DIALOG 10, 10, 205, 60</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>STYLE
0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>WS_SYSMENU
| WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>CAPTION
"Our Second Dialog Box"</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>MENU
IDR_MENU1</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>BEGIN</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
EDITTEXT IDC_EDIT,
15,17,111,13, ES_AUTOHSCROLL | ES_LEFT</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
DEFPUSHBUTTON "Say Hello", IDC_BUTTON, 141,10,52,13</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
PUSHBUTTON "E&xit", IDC_EXIT, 141,26,52,13</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>END</font></font></font></b>
<br>
<p><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>IDR_MENU1
MENU</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>BEGIN</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
POPUP "Test Controls"</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
BEGIN</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
MENUITEM "Get Text", IDM_GETTEXT</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
MENUITEM "Clear Text", IDM_CLEAR</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
MENUITEM "", , 0x0800 /*MFT_SEPARATOR*/</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
MENUITEM "E&xit", IDM_EXIT</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
END</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>END</font></font></font></b>
<p>
<hr WIDTH="100%">
<br><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>The
analysis follows:</font></font></font><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1></font></font></font>
<p><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD</font></font></font></b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1></font></font></font>
<p><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>We
declare the function prototype for DlgProc so we can refer to it with <b>addr
</b>operator in the line below:</font></font></font>
<p><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL</font></font></font></b>
<p><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>The
above line calls DialogBoxParam function which takes 5 parameters: the
instance handle, the name of the dialog box template, the parent window
handle, the address of the dialog box procedure, and the dialog-specific
data. DialogBoxParam creates a modal dialog box. It will not return until
the dialog box is destroyed.</font></font></font>
<p><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
.IF uMsg==WM_INITDIALOG</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
invoke GetDlgItem, hWnd,IDC_EDIT</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
invoke SetFocus,eax</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
.ELSEIF uMsg==WM_CLOSE</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>
invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0</font></font></font></b>
<p><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>The
dialog box procedure looks like a window procedure except that it doesn't
receive WM_CREATE message. The first message it receives is WM_INITDIALOG.
Normally you can put the initialization code here. Note that you must return
the value TRUE in eax if you process the message.</font></font></font>
<br><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>The
internal dialog box manager doesn't send our dialog box procedure the WM_DESTROY
message by default when WM_CLOSE is sent to our dialog box. So if we want
to react when the user presses the close button on our dialog box, we must
process WM_CLOSE message. In our example, we send WM_COMMAND message with
the value IDM_EXIT in wParam. This has the same effect as when the user
selects Exit menu item. EndDialog is called in response to IDM_EXIT.</font></font></font>
<br><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>The
processing of WM_COMMAND messages remains the same.</font></font></font>
<br><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>When
you want to destroy the dialog box, the only way is to call EndDialog function.
Do not try DestroyWindow! EndDialog doesn't destroy the dialog box immediately.
It only sets a flag for the internal dialog box manager and continues to
execute the next instructions.</font></font></font>
<br><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>Now
let's examine the resource file. The notable change is that instead of
using a text string as menu name we use a value, IDR_MENU1. This is necessary
if you want to attach a menu to a dialog box created with DialogBoxParam.
Note that in the dialog box template, you have to add the keyword <b>MENU</b>
followed by the menu resource ID.</font></font></font>
<br><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>A
difference between the two examples in this tutorial that you can readily
observe is the lack of an icon in the latter example. However, you can
set the icon by sending the message WM_SETICON to the dialog box during
WM_INITDIALOG.</font></font></font>
<br>
<hr WIDTH="100%">
<center><b><font face="Arial,Helvetica"><font color="#CCCCCC"><font size=-1>[<a href="http://win32asm.cjb.net">Iczelion's
Win32 Assembly Homepage</a>]</font></font></font></b></center>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -