





















1
;********************************************************************
2
; 用下列命令进行编译和链接:
3
; ml /c /coff win322-1.asm
4
; rc win322-1.rc
5
; link /subsystem:windows win322-1.obj win322-1.res
6
;********************************************************************
7
; 使用各种资源----记事本程序的编写
8
;==================================================
9
.486
10
.model flat,stdcall
11
option casemap : none
12
;********************************************************************
13
;include=============================================
14
include windows.inc
15
include kernel32.inc
16
includelib kernel32.lib
17
include user32.inc
18
includelib user32.lib
19
include comdlg32.inc
20
includelib comdlg32.lib
21
include comctl32.inc
22
includelib comctl32.lib
23
include gdi32.inc
24
includelib gdi32.lib
25
include shell32.inc
26
includelib shell32.lib
27
;********************************************************************
28
CDN_FILEOK equ CDN_FIRST-0005h
29
CDN_INITDONE equ CDN_FIRST - 0
30
CDN_SELCHANGE equ CDN_FIRST - 1
31
OFN_ENABLESIZING equ 00800000h
32
IDM_MENUHELP1 equ 700
33
IDM_MENUHELP2 equ 701
34
IDM_MENUHELP3 equ 702
35
IDM_MENUHELP4 equ 703
36
IDM_MENUHELP5 equ 704
37
IDM_MENUHELP6 equ 705
38
39
IDC_MAIN equ 100
40
IDM_MAIN equ 200
41
IDA_MAIN equ 300
42
DLG_MAIN equ 400
43
DLG_GOTO equ 1000
44
IDC_RICHEDIT equ 1010
45
IDM_NEW equ 101
46
IDM_OPEN equ 102
47
IDM_SAVE equ 103
48
IDM_SAVE_AS equ 104
49
IDM_PAGE_SETUP equ 105
50
IDM_PRINT equ 106
51
IDM_EXIT equ 107
52
IDM_UNDO equ 108
53
IDM_CUT equ 109
54
IDM_COPY equ 110
55
IDM_PASTE equ 111
56
IDM_DEL equ 112
57
IDM_FIND equ 113
58
IDM_FIND_NEXT equ 114
59
IDM_REPLACE equ 115
60
IDM_GOTO equ 116
61
IDM_CHECK_ALL equ 117
62
IDM_TIME_DATE equ 118
63
IDM_LINE_WRAP equ 119
64
IDM_FONT equ 120
65
IDM_STATUS_BAR equ 121
66
IDM_HELP equ 122
67
IDM_ABOUT_NOTEPAD equ 123
68
IDM_TOOL_BAR equ 124
69
ID_EDIT equ 500
70
IDC_PREVIEW equ 600
71
ID_STATUSBAR equ 800
72
ID_TOOLBAR equ 900
73
ID_OK equ 201
74
ID_CANCEL equ 202
75
;******************************************************************
76
OFNOTIFYEX struct
77
hdr NMHDR <>
78
lpOpenFileName OPENFILENAME <>
79
lpsf dword ?
80
lpIdItem dword ?
81
OFNOTIFYEX ends
82
;********************************************************************
83
.data?
84
hInstance dd ?
85
hWinMain dd ?
86
hMenu dd ?
87
hEdit dd ?
88
hEdit2 dd ?
89
hIcon dd ?
90
SetPaste dd ?
91
@hDlg dd ?
92
@hEdit dd ?
93
hClipboard dd ?
94
lpOldProc dd ?
95
_lpMem dd ?
96
_flag db ?
97
_JFlag dd ?
98
hFile dd ?
99
hHeap dd ?
100
hHeap2 dd ?
101
lpHeap dd ?
102
lpPrintBuffer dd ?
103
lpNumByte dd ?
104
lpVirtualMem dd ?
105
FrId dd ?
106
hFind dd ?
107
lpFindMem dd ?
108
dwFindNext dd ?
109
hReplace dd ?
110
hStatusBar dd ?
111
hToolbar dd ?
112
oldEditProc dd ?
113
hDlg dd ?
114
hDc dd ?
115
hFont dd ?
116
@dwHighSize dd ?
117
@dwLowSize dd ?
118
szPrinter dd MAX_PATH dup (?)
119
szFileName dd MAX_PATH dup (?)
120
lpBuff0 dd 1024 dup (?)
121
lpBuff1 dd 1024 dup (?)
122
szFindText dd MAX_PATH dup (?)
123
szReplaceText dd MAX_PATH dup (?)
124
logfont LOGFONT <?>
125
.data
126
stFr FINDREPLACE <sizeof FINDREPLACE,0,0,FR_DOWN or FR_HIDEWHOLEWORD,szFindText,szReplaceText,sizeof szFindText,sizeof szReplaceText,0,0,0>
127
stButton equ this byte
128
TBBUTTON <STD_FILENEW,IDM_NEW,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
129
TBBUTTON <STD_FILEOPEN,IDM_OPEN,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
130
TBBUTTON <STD_FILESAVE,IDM_SAVE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
131
TBBUTTON <0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
132
TBBUTTON <STD_PRINT,IDM_PRINT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
133
TBBUTTON <0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
134
TBBUTTON <STD_COPY,IDM_COPY,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
135
TBBUTTON <STD_CUT,IDM_CUT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
136
TBBUTTON <STD_PASTE,IDM_PASTE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
137
TBBUTTON <0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
138
TBBUTTON <STD_FIND,IDM_FIND,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
139
TBBUTTON <STD_REPLACE,IDM_REPLACE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
140
TBBUTTON <0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
141
TBBUTTON <STD_HELP,IDM_HELP,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
142
TBBUTTON <0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
143
.const
144
145
szClassName db "MYNotepad",0
146
szDefCaption db "无标题",0
147
szCaption db "记事本",0
148
szNotCaption db "无标题",0
149
szFilter db "文本文档案(*.txt)",0,"*.txt",0,"ASM文档(*.asm)",0,"*.asm",0,"ALL FILE(*.*)",0,"*.*",0,0
150
szSaveYesOrNo db "你的文件%s已经修改过,是否保存文档?",0
151
szDefExt db "txt",0
152
szSaveDialog db "保存",0
153
szSaveAs db "另存为",0
154
szClass db "EDIT",0
155
szErrPerson db "错误",0
156
StatusBarCount dd 400,-1
157
szSetText db "请选择文件进行预览",0
158
szExisting db "文件 %s 已经存在,确定要覆盖它吗?",0
159
szLnCol db "Ln %d,Col%d",0
160
FINDMSGSTR db "commdlg_FindReplace",0
161
szMenuHelp dd 0,IDM_MENUHELP1,0,0
162
ceshistr db "%s",0
163
ceshi db "%d",0
164
chengong db "记事本完成了,谢谢使用",0
165
szTextOut db "指定行超出控件文本行数",0
166
szNotFound db "找不到%s",0
167
szTime db "%d:%02d %04d-%02d-%02d",0
168
szAbout1 db "模拟记事本程序",0
169
szAbout2 db "kiki-------梁越洋",0
170
szFont db "宋体",0
171
szApi db "该功能还在修改中,暂不提供",0
172
szHelp db "怎么不会用要看帮助文件?不会吧!!都说模拟记事本拉,肯定是象记事本那样子使用拉:-)",0
173
;********************************************************************
174
.code
175
;********************************************************************
176
_SetFont proc uses ebx esi edi
177
178
invoke CreateFont,logfont.lfHeight,logfont.lfWidth,logfont.lfEscapement,\
179
logfont.lfOrientation,logfont.lfWeight,dword ptr logfont.lfItalic,\
180
dword ptr logfont.lfUnderline,dword ptr logfont.lfStrikeOut,\
181
dword ptr logfont.lfCharSet,dword ptr logfont.lfOutPrecision,\
182
dword ptr logfont.lfClipPrecision,dword ptr logfont.lfQuality,\
183
dword ptr logfont.lfPitchAndFamily,offset logfont.lfFaceName
184
.if eax
185
mov hFont,eax
186
invoke SendMessage,hEdit,WM_SETFONT,hFont,TRUE
187
.endif
188
ret
189
_SetFont endp
190
;********************************************************************
191
_ChooseFont proc uses ebx esi edi
192
local @stCF:CHOOSEFONT
193
194
invoke RtlZeroMemory,addr @stCF,sizeof CHOOSEFONT
195
mov @stCF.lStructSize,sizeof CHOOSEFONT
196
push hInstance
197
pop @stCF.hInstance
198
push hWinMain
199
pop @stCF.hWndOwner
200
mov @stCF.lpLogFont,offset logfont
201
mov @stCF.Flags,CF_NOOEMFONTS or CF_SCREENFONTS or CF_INITTOLOGFONTSTRUCT or CF_TTONLY
202
invoke ChooseFont,addr @stCF
203
.if eax
204
mov eax,@stCF.iPointSize
205
shl eax,1
206
invoke _SetFont
207
.endif
208
ret
209
_ChooseFont endp
210
;********************************************************************
211
Dlg_Proc proc uses ebx esi edi _hDlg,_uMsg,_wParam,_lParam
212
local @hDlgEdit
213
local @szDlgCount
214
215
mov eax,_uMsg
216
.if eax == WM_CLOSE
217
invoke DestroyWindow,_hDlg
218
.elseif eax == WM_COMMAND
219
mov eax,_wParam
220
.if ax == ID_OK
221
invoke GetDlgItemInt,_hDlg,IDC_RICHEDIT,0,0
222
push eax
223
invoke GetDlgItem,_hDlg,IDC_RICHEDIT
224
invoke SendMessage,hEdit,EM_GETLINECOUNT,0,0
225
pop ecx
226
.if ecx > eax
227
invoke MessageBox,0,offset szTextOut,0,MB_OK
228
.else
229
mov eax,ecx
230
dec eax
231
invoke SendMessage,hEdit,EM_LINEINDEX,eax,0
232
invoke SendMessage,hEdit,EM_SETSEL,eax,eax
233
invoke SendMessage,hEdit,EM_SCROLLCARET,0,0
234
invoke SendMessage,_hDlg,WM_CLOSE,0,0
235
.endif
236
.elseif ax == ID_CANCEL
237
invoke SendMessage,_hDlg,WM_CLOSE,0,0
238
.endif
239
.else
240
mov eax,FALSE
241
ret
242
.endif
243
mov eax,TRUE
244
ret
245
Dlg_Proc endp
246
;********************************************************************
247
EditWndProc proc _hWnd,_uMsg,_wParam,_lParam
248
249
mov eax,_uMsg
250
.if (eax == WM_KEYDOWN) || (eax == WM_KEYUP)
251
call _SetState
252
.elseif eax == WM_LBUTTONDOWN || eax == WM_LBUTTONUP
253
call _SetState
254
.endif
255
invoke CallWindowProc,oldEditProc,_hWnd,_uMsg,_wParam,_lParam
256
ret
257
EditWndProc endp
258
;********************************************************************
259
_TestSf proc uses ebx esi edi _address,_count,_address2
260
261
mov ecx,_count
262
mov esi,_address
263
mov edi,_address2
264
.repeat
265
mov al,byte ptr [esi]
266
.if al >="A" && al <= "Z"
267
add al,20h
268
.endif
269
mov bl,byte ptr [edi]
270
.if bl >="A" && bl <= "Z"
271
add bl,20h
272
.endif
273
dec ecx
274
inc esi
275
inc edi
276
sub al,bl
277
.break .if al != 0
278
.until ecx == 0
279
.if !ecx && ZERO?
280
mov eax,TRUE
281
jmp @f
282
.endif
283
mov eax,FALSE
284
@@:
285
and stFr.Flags,not FR_MATCHCASE
286
ret
287
_TestSf endp
288
;********************************************************************
289
_FindReplace proc uses ebx esi edi
290
local @stRange:CHARRANGE
291
local @LowSize,@HighSize,@Flags,@dwReturn
292
293
invoke SendMessage,hEdit,EM_GETSEL,addr @stRange.cpMin,addr @stRange.cpMax
294
mov eax,@stRange.cpMax
295
mov @stRange.cpMin,eax
296
invoke GetWindowTextLength,hEdit
297
inc eax
298
mov @HighSize,eax
299
invoke VirtualAlloc,NULL,eax,MEM_COMMIT or MEM_RESERVE,PAGE_READWRITE
300
mov lpFindMem,eax
301
invoke GetWindowText,hEdit,lpFindMem,@HighSize
302
invoke lstrlen,offset szFindText
303
inc eax
304
mov @LowSize,eax
305
mov ebx,@stRange.cpMin
306
mov @Flags,ebx
307
@@:
308
push ebx
309
invoke GetWindowTextLength,hEdit
310
cmp eax,0
311
jz _NotF
312
pop ebx
313
add ebx,lpFindMem
314
mov esi,ebx
315
mov edi,offset szFindText
316
.if !(stFr.Flags & FR_MATCHCASE)
317
invoke _TestSf,esi,@LowSize,edi
318
.if eax
319
jmp @f
320
.endif
321
.endif
322
cld
323
mov ecx,@LowSize
324
repe cmpsb
325
.if ecx == 0 && ZERO?
326
jmp @f
327
.else
328
inc @Flags
329
mov ebx,@Flags
330
mov edx,@HighSize
331
sub edx,@LowSize
332
.if ebx <= edx
333
jmp @b
334
.else
335
jmp _NotF
336
.endif
337
.endif
338
@@: mov edx,@Flags
339
add edx,@LowSize
340
dec edx
341
invoke SendMessage,hEdit,EM_SETSEL,@Flags,edx
342
mov @dwReturn,1
343
jmp _End
344
_NotF: invoke wsprintf,offset lpBuff1,offset szNotFound,offset szFindText
345
invoke MessageBox,hWinMain,offset lpBuff1,offset szCaption,MB_OK
346
mov @dwReturn,0
347
_End: invoke VirtualFree,lpFindMem,0,MEM_DECOMMIT or MEM_RELEASE
348
invoke RtlZeroMemory,offset lpBuff1,sizeof lpBuff1
349
mov lpFindMem,0
350
mov dwFindNext,-1
351
mov eax,@dwReturn
352
ret
353
_FindReplace endp
354
;********************************************************************
355
_FindReplace2 proc uses ebx esi edi
356
local @LowSize,@HighSize,@Flags,@dwReturn
357
local @stRange:CHARRANGE
358
359
invoke SendMessage,hEdit,EM_GETSEL,addr @stRange.cpMin,addr @stRange.cpMax
360
mov eax,@stRange.cpMin
361
mov @stRange.cpMax,eax
362
invoke GetWindowTextLength,hEdit
363
inc eax
364
mov @HighSize,eax
365
invoke VirtualAlloc,NULL,eax,MEM_COMMIT or MEM_RESERVE,PAGE_READWRITE
366
mov lpFindMem,eax
367
invoke GetWindowText,hEdit,lpFindMem,@HighSize
368
invoke lstrlen,offset szFindText
369
inc eax
370
mov @LowSize,eax
371
mov ebx,@stRange.cpMax
372
sub ebx,@LowSize
373
inc ebx
374
mov @Flags,ebx
375
@@:
376
cmp ebx,-1
377
jle _Err
378
add ebx,lpFindMem
379
mov esi,ebx
380
mov edi,offset szFindText
381
.if !(stFr.Flags & FR_MATCHCASE)
382
invoke _TestSf,esi,@LowSize,edi
383
.if eax
384
jmp @f
385
.endif
386
.endif
387
cld
388
mov ecx,@LowSize
389
repe cmpsb
390
.if (ecx == 0) && ZERO?
391
jmp @f
392
.else
393
dec @Flags
394
mov ebx,@Flags
395
.if ebx >= 0
396
jmp @b
397
.endif
398
jmp _Err
399
.endif
400
@@:
401
mov edx,@Flags
402
add edx,@LowSize
403
dec edx
404
invoke SendMessage,hEdit,EM_SETSEL,@Flags,edx
405
mov @dwReturn,1
406
jmp _Ex
407
_Err: invoke wsprintf,offset lpBuff1,offset szNotFound,offset szFindText
408
invoke MessageBox,hWinMain,offset lpBuff1,offset szCaption,MB_OK
409
mov @dwReturn,0
410
_Ex:
411
invoke VirtualFree,lpFindMem,0,MEM_DECOMMIT or MEM_RELEASE
412
invoke RtlZeroMemory,offset lpBuff1,sizeof lpBuff1
413
mov lpFindMem,0
414
mov dwFindNext,-1
415
mov eax,@dwReturn
416
ret
417
_FindReplace2 endp
418
;********************************************************************
419
_pfnCall proc uses ebx esi edi _dwCookie,_HeapMem,_dwNumByte,_lpNumByte
420
421
.if _dwCookie
422
invoke WriteFile,hFile,_HeapMem,_dwNumByte,_lpNumByte,0
423
.else
424
invoke ReadFile,hFile,_HeapMem,_dwNumByte,_lpNumByte,0
425
.endif
426
ret
427
_pfnCall endp
428
;********************************************************************
429
_CheckModify proc uses ebx esi edi
430
431
invoke SendMessage,hEdit,EM_GETMODIFY,0,0
432
.if eax
433
invoke wsprintf,offset lpBuff0,offset szSaveYesOrNo,offset szFileName
434
invoke MessageBox,hWinMain,offset lpBuff0,offset szCaption,MB_YESNOCANCEL
435
.if eax == IDYES
436
call _SaveFile
437
mov eax,1
438
.elseif eax == IDNO
439
mov eax,-1
440
.endif
441
.else
442
mov eax,0
443
.endif
444
ret
445
_CheckModify endp
446
;********************************************************************
447
_PageSetup proc uses ebx esi edi
448
local @stPage : PAGESETUPDLG
449
450
invoke RtlZeroMemory,addr @stPage,sizeof @stPage
451
mov @stPage.lStructSize,sizeof PAGESETUPDLG
452
push hWinMain
453
pop @stPage.hwndOwner
454
invoke PageSetupDlg,addr @stPage
455
.if eax && @stPage.hDevMode
456
mov eax,@stPage.hDevMode
457
mov eax,[eax]
458
invoke wsprintf,offset szPrinter,offset ceshistr,eax
459
.endif
460
ret
461
_PageSetup endp
462
;********************************************************************
463
_PrintDc proc uses ebx esi edi
464
local @PrintSize
465
local @Doc : DOCINFO
466
467
invoke CreateDC,NULL,offset szPrinter,NULL,NULL
468
mov hDc,eax
469
.if hDc
470
.if szPrinter
471
invoke GetWindowTextLength,hEdit
472
inc eax
473
mov @PrintSize,eax
474
invoke GetProcessHeap
475
.if eax && (eax < 0C0000000H)
476
mov hHeap2,eax
477
.endif
478
invoke HeapAlloc,hHeap2,HEAP_GENERATE_EXCEPTIONS or HEAP_NO_SERIALIZE or\
479
HEAP_ZERO_MEMORY,@PrintSize
480
.if eax && (eax < 0c0000000h)
481
mov lpPrintBuffer,eax
482
.endif
483
invoke GetWindowText,hEdit,lpPrintBuffer,@PrintSize
484
invoke StartDoc,hDc,NULL
485
invoke StartPage,hDc
486
invoke TextOut,hDc,10,10,lpPrintBuffer,@PrintSize
487
invoke EndPage,hDc
488
invoke EndDoc,hDc
489
invoke HeapFree,hHeap2,NULL,lpPrintBuffer
490
invoke RtlZeroMemory,offset szPrinter,sizeof szPrinter
491
.endif
492
.endif
493
ret
494
_PrintDc endp
495
;********************************************************************
496
_MadeApplication proc uses ebx esi edi
497
498
invoke CreateWindowEx,0,offset szClass,NULL,\
499
WS_CHILD OR WS_VISIBLE OR ES_MULTILINE OR ES_WANTRETURN or WS_DLGFRAME\
500
OR WS_VSCROLL or ES_NOHIDESEL or ES_AUTOHSCROLL or WS_HSCROLL,\
501
0,0,0,0,hWinMain,ID_EDIT,hInstance,NULL
502
mov hEdit,eax
503
invoke SendMessage,hEdit,EM_LIMITTEXT,0,0
504
invoke CreateFont,-16,0,0,\
505
0,FW_THIN,FALSE,\
506
FALSE,FALSE,\
507
GB2312_CHARSET,OUT_CHARACTER_PRECIS,\
508
CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,\
509
FF_MODERN,offset szFont
510
.if eax
511
mov hFont,eax
512
invoke SendMessage,hEdit,WM_SETFONT,hFont,TRUE
513
.endif
514
invoke SetClipboardViewer,hWinMain
515
mov hClipboard,eax
516
invoke CreateStatusWindow,SBARS_SIZEGRIP or WS_CHILD or WS_VISIBLE,0,hWinMain,ID_STATUSBAR
517
mov hStatusBar,eax
518
invoke SendMessage,hStatusBar,SB_SETPARTS,2,offset StatusBarCount
519
invoke CreateToolbarEx,hWinMain,TBSTYLE_FLAT or WS_CHILD or WS_VISIBLE or TBSTYLE_TOOLTIPS or CCS_ADJUSTABLE,\
520
ID_TOOLBAR,0,HINST_COMMCTRL,IDB_STD_SMALL_COLOR,offset stButton,15,0,0,0,0,sizeof TBBUTTON
521
mov hToolbar,eax
522
523
invoke GetCommandLine
524
mov esi,eax
525
mov edi,offset szFileName
526
_1: lodsb
527
_2:
528
cmp al,22H
529
jz _5
530
_3: or al,al
531
jz _4
532
cmp al,20h
533
jz _1
534
mov [edi],al
535
inc edi
536
lodsb
537
cmp al,20h
538
jz _4
539
jmp _3
540
_5: lodsb
541
cmp al,22H
542
jz _1
543
jmp _5
544
_4:
545
546
.if szFileName
547
mov _JFlag,1
548
jmp near ptr _IsJpAddress
549
.endif
550
_6 equ THIS BYTE
551
ret
552
_MadeApplication endp
553
;********************************************************************
554
_SetState proc uses ebx esi edi
555
local @wParam,@lParam
556
local @stRg:CHARRANGE
557
local @LineIn,@Length
558
local @Buffer
559
560
invoke SendMessage,hEdit,EM_GETSEL,addr @stRg.cpMin,addr @stRg.cpMax
561
invoke SendMessage,hEdit,EM_LINEFROMCHAR,-1,0
562
mov @LineIn,eax
563
invoke SendMessage,hEdit,EM_LINEINDEX,eax,0
564
mov edx,@stRg.cpMin
565
sub edx,eax
566
inc edx
567
inc @LineIn
568
invoke wsprintf,offset lpBuff1,offset szLnCol,edx,@LineIn
569
invoke SendMessage,hStatusBar,SB_SETTEXT,1,offset lpBuff1
570
invoke RtlZeroMemory,offset lpBuff1,sizeof lpBuff1
571
572
mov eax,@stRg.cpMin
573
.if eax == @stRg.cpMax
574
invoke EnableMenuItem,hMenu,IDM_CUT,MF_GRAYED
575
invoke EnableMenuItem,hMenu,IDM_COPY,MF_GRAYED
576
invoke EnableMenuItem,hMenu,IDM_DEL,MF_GRAYED
577
.if hToolbar
578
invoke SendMessage,hToolbar,TB_ENABLEBUTTON,IDM_CUT,FALSE
579
invoke SendMessage,hToolbar,TB_ENABLEBUTTON,IDM_COPY,FALSE
580
.endif
581
.else
582
invoke EnableMenuItem,hMenu,IDM_CUT,MF_ENABLED
583
invoke EnableMenuItem,hMenu,IDM_COPY,MF_ENABLED
584
invoke EnableMenuItem,hMenu,IDM_DEL,MF_ENABLED
585
.if hToolbar
586
invoke SendMessage,hToolbar,TB_ENABLEBUTTON,IDM_CUT,TRUE
587
invoke SendMessage,hToolbar,TB_ENABLEBUTTON,IDM_COPY,TRUE
588
.endif
589
.endif
590
invoke SendMessage,hEdit,EM_CANUNDO,0,0
591
.if eax
592
invoke EnableMenuItem,hMenu,IDM_UNDO,MF_ENABLED
593
.else
594
invoke EnableMenuItem,hMenu,IDM_UNDO,MF_GRAYED
595
.endif
596
invoke SendMessage,hEdit,EM_GETMODIFY,0,0
597
.if eax
598
invoke EnableMenuItem,hMenu,IDM_SAVE,MF_ENABLED
599
invoke EnableMenuItem,hMenu,IDM_SAVE_AS,MF_ENABLED
600
.if hToolbar
601
invoke SendMessage,hToolbar,TB_ENABLEBUTTON,IDM_SAVE,TRUE
602
.endif
603
.else
604
invoke EnableMenuItem,hMenu,IDM_SAVE,MF_GRAYED
605
invoke EnableMenuItem,hMenu,IDM_SAVE_AS,MF_GRAYED
606
.if hToolbar
607
invoke SendMessage,hToolbar,TB_ENABLEBUTTON,IDM_SAVE,FALSE
608
.endif
609
.endif
610
ret
611
_SetState endp
612
;********************************************************************
613
_ReSize proc uses ebx esi edi
614
local stRect : RECT
615
local @stRect : RECT
616
local @Width,@Height,@Temp
617
618
invoke GetClientRect,hWinMain,addr stRect
619
mov eax,stRect.right
620
sub eax,stRect.left
621
mov @Width,eax
622
mov eax,stRect.bottom
623
sub eax,stRect.top
624
mov @Height,eax
625
626
invoke IsWindowVisible,hStatusBar
627
.if eax
628
invoke MoveWindow,hStatusBar,0,0,0,0,TRUE
629
invoke GetWindowRect,hStatusBar,addr @stRect
630
mov eax,@stRect.bottom
631
sub eax,@stRect.top
632
sub @Height,eax
633
.endif
634
635
invoke IsWindowVisible,hToolbar
636
.if eax
637
invoke SendMessage,hToolbar,TB_AUTOSIZE,0,0
638
invoke GetWindowRect,hToolbar,addr @stRect
639
mov eax,@stRect.bottom
640
sub eax,@stRect.top
641
mov stRect.top,eax
642
sub @Height,eax
643
.endif
644
invoke MoveWindow,hEdit,stRect.left,stRect.top,@Width,@Height,TRUE
645
ret
646
_ReSize endp
647
;********************************************************************
648
_OpenHook proc uses ebx esi edi _hDlg,_uMsg,_wParam,_lParam
649
local @FilePath[MAX_PATH]:BYTE
650
local @hFile,@ReadFileNum
651
local @ReadMem [2046]:BYTE
652
653
mov eax,_uMsg
654
.if eax == WM_NOTIFY
655
mov esi,_lParam
656
assume esi : ptr NMHDR
657
.if [esi].code == CDN_FILEOK
658
.elseif [esi].code == CDN_INITDONE
659
invoke GetParent,_hDlg
660
mov @hDlg,eax
661
invoke GetDlgItem,_hDlg,IDC_PREVIEW
662
mov @hEdit,eax
663
invoke SendMessage,@hEdit,WM_SETTEXT,0,offset szSetText
664
.elseif [esi].code == CDN_SELCHANGE
665
invoke SendMessage,@hDlg,CDM_GETFILEPATH,MAX_PATH,addr @FilePath
666
invoke CreateFile,addr @FilePath,GENERIC_READ,FILE_SHARE_READ,\
667
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
668
mov @hFile,eax
669
.if eax == INVALID_HANDLE_VALUE
670
xor eax,eax
671
ret
672
.endif
673
invoke ReadFile,@hFile,addr @ReadMem,2046,addr @ReadFileNum,NULL
674
invoke SendMessage,@hEdit,WM_SETTEXT,0,addr @ReadMem
675
.endif
676
invoke CloseHandle,@hFile
677
.endif
678
assume esi : nothing,edi : nothing
679
xor eax,eax
680
ret
681
_OpenHook endp
682
;********************************************************************
683
_OpenFile proc uses ebx esi edi
684
local stOpenFile:OPENFILENAME
685
686
.if hFile
687
invoke CloseHandle,hFile
688
.endif
689
invoke RtlZeroMemory,addr stOpenFile,sizeof OPENFILENAME
690
mov stOpenFile.lStructSize,sizeof OPENFILENAME
691
push hWinMain
692
pop stOpenFile.hwndOwner
693
mov stOpenFile.Flags,OFN_ENABLESIZING or OFN_FILEMUSTEXIST or \
694
OFN_PATHMUSTEXIST or OFN_HIDEREADONLY or \
695
OFN_EXPLORER or OFN_ENABLETEMPLATE or OFN_ENABLEHOOK
696
push hInstance
697
pop stOpenFile.hInstance
698
mov stOpenFile.lpTemplateName,DLG_MAIN
699
mov stOpenFile.lpfnHook,offset _OpenHook
700
mov stOpenFile.lpstrFilter,offset szFilter
701
mov stOpenFile.nMaxFile,MAX_PATH
702
mov stOpenFile.lpstrFile,offset szFileName
703
invoke GetOpenFileName,addr stOpenFile
704
.if eax
705
_IsJpAddress equ THIS byte
706
invoke CreateFile,offset szFileName,GENERIC_READ or GENERIC_WRITE,\
707
FILE_SHARE_READ OR FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
708
.if eax == INVALID_HANDLE_VALUE
709
invoke GetLastError
710
.if eax
711
invoke wsprintf,offset lpBuff1,offset ceshi,eax
712
invoke MessageBox,NULL,offset lpBuff1,offset lpBuff1,MB_OK
713
.endif
714
jmp @f
715
.endif
716
mov hFile,eax
717
.if hFile
718
invoke SetWindowText,hWinMain,offset szFileName
719
.endif
720
invoke GetFileSize,hFile,addr @dwHighSize
721
add eax,4
722
mov @dwLowSize,eax
723
invoke VirtualAlloc,NULL,@dwLowSize,MEM_COMMIT or MEM_RESERVE,PAGE_READWRITE
724
.if eax
725
mov lpVirtualMem,eax
726
.endif
727
invoke _pfnCall,0,lpVirtualMem,@dwLowSize,offset lpNumByte
728
invoke SetWindowText,hEdit,lpVirtualMem
729
invoke VirtualFree,lpVirtualMem,0,MEM_DECOMMIT or MEM_RESERVE
730
invoke CloseHandle,hFile
731
.endif
732
@@: .if _JFlag
733
mov _JFlag,0
734
jmp near ptr _6
735
.else
736
ret
737
.endif
738
739
_OpenFile endp
740
;********************************************************************
741
_SaveFile proc uses ebx esi edi
742
local stOF : OPENFILENAME
743
local dwSize
744
745
.if szFileName
746
jmp _CreateFile
747
.endif
748
invoke RtlZeroMemory,addr stOF,sizeof OPENFILENAME
749
push hWinMain
750
pop stOF.hwndOwner
751
mov stOF.lStructSize,sizeof OPENFILENAME
752
mov stOF.lpstrFilter,offset szFilter
753
mov stOF.lpstrFile,offset szFileName
754
mov stOF.nMaxFile,MAX_PATH
755
mov stOF.lpstrTitle,offset szSaveDialog
756
mov stOF.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST
757
invoke GetSaveFileName,addr stOF
758
.if eax
759
_CreateFile: invoke CreateFile,offset szFileName,GENERIC_READ or GENERIC_WRITE,NULL,\
760
NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
761
.if eax == INVALID_HANDLE_VALUE
762
jmp @f
763
.endif
764
mov hFile,eax
765
invoke GetWindowTextLength,hEdit
766
inc eax
767
mov dwSize,eax
768
invoke GetProcessHeap
769
.if eax && (eax < 0C0000000H)
770
mov hHeap,eax
771
.endif
772
invoke HeapAlloc,hHeap,HEAP_GENERATE_EXCEPTIONS or HEAP_NO_SERIALIZE or\
773
HEAP_ZERO_MEMORY,dwSize
774
.if eax && (eax < 0c0000000h)
775
mov lpHeap,eax
776
.endif
777
pop ecx
778
invoke GetWindowText,hEdit,lpHeap,dwSize
779
invoke _pfnCall,1,lpHeap,dwSize,offset lpNumByte
780
invoke CloseHandle,hFile
781
invoke HeapFree,hHeap,NULL,lpHeap
782
invoke SendMessage,hEdit,EM_SETMODIFY,FALSE,0
783
.endif
784
@@: ret
785
_SaveFile endp
786
;********************************************************************
787
_WndProc proc uses ebx esi edi hWnd,uMsg,wParam,lParam
788
local @lpCL
789
local @stPt:PAINTSTRUCT
790
local stRt:RECT
791
local @stRange:CHARRANGE
792
local @stTime:SYSTEMTIME
793
local @wHour,@wMinute,@wYear,@wMonth,@wDay
794
795
mov eax,uMsg
796
.if eax == WM_CLOSE
797
call _CheckModify
798
.if (eax == 1) || (eax == 0) || (eax == -1)
799
invoke DestroyWindow,hWinMain
800
invoke PostQuitMessage,NULL
801
invoke ChangeClipboardChain,hWinMain,hClipboard
802
.endif
803
.elseif eax == WM_CREATE
804
mov eax,hWnd
805
mov hWinMain,eax
806
mov stFr.hwndOwner,eax
807
push hInstance
808
pop stFr.hInstance
809
invoke RegisterWindowMessage,addr FINDMSGSTR
810
mov FrId,eax
811
invoke _MadeApplication
812
call _ReSize
813
invoke SetWindowLong,hEdit,GWL_WNDPROC,offset EditWndProc
814
mov oldEditProc,eax
815
.elseif eax == WM_PAINT
816
invoke BeginPaint,hWnd,addr @stPt
817
invoke EndPaint,hWnd,addr @stPt
818
.elseif eax == WM_COMMAND
819
mov eax,wParam
820
.if ax == IDM_OPEN
821
call _CheckModify
822
cmp eax,-1
823
jz @f
824
invoke SendMessage,hEdit,EM_GETMODIFY,0,0
825
.if !eax
826
@@: call _OpenFile
827
.endif
828
.elseif ax == IDM_NEW
829
invoke SendMessage,hEdit,EM_GETMODIFY,0,0
830
.if eax
831
invoke wsprintf,offset lpBuff0,offset szSaveYesOrNo,offset szFileName
832
invoke MessageBox,hWinMain,offset lpBuff0,offset szCaption,MB_YESNOCANCEL
833
.if eax == IDYES
834
call _SaveFile
835
.elseif eax == IDCANCEL
836
jmp @f
837
.endif
838
.endif
839
invoke SetWindowText,hWinMain,offset szNotCaption
840
invoke SendMessage,hEdit,EM_SETSEL,0,-1
841
invoke SendMessage,hEdit,WM_CLEAR,0,0
842
.if hFile
843
invoke CloseHandle,hFile
844
invoke RtlZeroMemory,offset szFileName,sizeof szFileName
845
.endif
846
invoke SendMessage,hEdit,EM_SETMODIFY,FALSE,0
847
invoke _SetState
848
@@:
849
.elseif ax == IDM_SAVE
850
call _SaveFile
851
call _SetState
852
.elseif ax == IDM_SAVE_AS
853
mov szFileName,0
854
call _SaveFile
855
call _SetState
856
.elseif ax == IDM_EXIT
857
invoke SendMessage,hWnd,WM_CLOSE,0,0
858
.elseif ax == IDM_TIME_DATE
859
invoke GetLocalTime,addr @stTime
860
movzx eax,@stTime.wHour
861
mov @wHour,eax
862
movzx eax,@stTime.wMinute
863
mov @wMinute,eax
864
movzx eax,@stTime.wYear
865
mov @wYear,eax
866
movzx eax,@stTime.wMonth
867
mov @wMonth,eax
868
movzx eax,@stTime.wDay
869
mov @wDay,eax
870
invoke RtlZeroMemory,offset lpBuff1,sizeof lpBuff1
871
invoke wsprintf,offset lpBuff1,offset szTime,@wHour,@wMinute,@wYear,@wMonth,@wDay
872
invoke SendMessage,hEdit,EM_REPLACESEL,TRUE,offset lpBuff1
873
invoke RtlZeroMemory,offset lpBuff1,sizeof lpBuff1
874
.elseif ax == IDM_STATUS_BAR
875
invoke GetMenuState,hMenu,IDM_STATUS_BAR,MF_BYCOMMAND
876
.if eax & MF_CHECKED
877
invoke CheckMenuItem,hMenu,IDM_STATUS_BAR,MF_UNCHECKED
878
invoke ShowWindow,hStatusBar,SW_HIDE
879
.else
880
invoke CheckMenuItem,hMenu,IDM_STATUS_BAR,MF_CHECKED
881
invoke ShowWindow,hStatusBar,SW_SHOWNORMAL
882
.endif
883
call _ReSize
884
.elseif ax == IDM_CHECK_ALL
885
invoke SendMessage,hEdit,EM_SETSEL,0,-1
886
.elseif ax == IDM_COPY
887
invoke SendMessage,hEdit,WM_COPY,0,0
888
.elseif ax == IDM_CUT
889
invoke SendMessage,hEdit,WM_CUT,0,0
890
.elseif ax == IDM_PASTE
891
invoke SendMessage,hEdit,WM_PASTE,0,0
892
.elseif ax == IDM_UNDO
893
invoke SendMessage,hEdit,EM_UNDO,0,0
894
.elseif ax == IDM_DEL
895
invoke SendMessage,hEdit,WM_CLEAR,0,0
896
.elseif ax == IDM_FIND
897
and stFr.Flags,not FR_DIALOGTERM
898
invoke FindText,addr stFr
899
.if eax
900
mov hFind,eax
901
.endif
902
.elseif ax == IDM_FIND_NEXT
903
.if stFr.Flags & FR_DOWN
904
or stFr.Flags,FR_DOWN
905
invoke _FindReplace
906
.else
907
and stFr.Flags,not FR_DOWN
908
invoke _FindReplace2
909
.endif
910
.elseif ax == IDM_REPLACE
911
and stFr.Flags,not FR_DIALOGTERM
912
invoke ReplaceText,offset stFr
913
.if eax
914
mov hReplace,eax
915
.endif
916
.elseif ax == IDM_TOOL_BAR
917
invoke GetMenuState,hMenu,IDM_TOOL_BAR,MF_BYCOMMAND
918
.if eax & MF_CHECKED
919
invoke CheckMenuItem,hMenu,IDM_TOOL_BAR,MF_UNCHECKED
920
invoke ShowWindow,hToolbar,SW_HIDE
921
.else
922
invoke CheckMenuItem,hMenu,IDM_TOOL_BAR,MF_CHECKED
923
invoke ShowWindow,hToolbar,SW_SHOWNORMAL
924
.endif
925
call _ReSize
926
.elseif ax == IDM_GOTO
927
invoke CreateDialogParam,hInstance,DLG_GOTO,hWinMain,offset Dlg_Proc,NULL
928
mov hDlg,eax
929
invoke SendDlgItemMessage,hDlg,IDC_RICHEDIT,EM_LIMITTEXT,12,0
930
.elseif ax == IDM_PAGE_SETUP
931
call _PageSetup
932
.elseif ax == IDM_PRINT
933
call _PrintDc
934
.elseif ax == IDM_FONT
935
invoke _ChooseFont
936
.elseif ax == IDM_ABOUT_NOTEPAD
937
invoke ShellAbout,hWinMain,offset szAbout1,offset szAbout2,hIcon
938
.elseif ax == IDM_HELP
939
invoke MessageBox,hWinMain,offset szHelp,offset chengong,MB_OK
940
.elseif ax == IDM_LINE_WRAP
941
invoke GetMenuState,hMenu,IDM_LINE_WRAP,MF_BYCOMMAND
942
.if eax & MF_CHECKED
943
invoke EnableMenuItem,hMenu,IDM_STATUS_BAR,MF_ENABLED
944
invoke CheckMenuItem,hMenu,IDM_STATUS_BAR,MF_CHECKED
945
invoke ShowWindow,hStatusBar,SW_SHOWNORMAL
946
invoke CheckMenuItem,hMenu,IDM_LINE_WRAP,MF_UNCHECKED
947
invoke SendMessage,hEdit,EM_GETMODIFY,0,0
948
.if eax
949
mov _flag,1
950
.endif
951
invoke GetWindowTextLength,hEdit
952
inc eax
953
push eax
954
invoke GlobalAlloc,GPTR,eax
955
mov _lpMem,eax
956
pop ecx
957
invoke GetWindowText,hEdit,_lpMem,ecx
958
invoke GetClientRect,hWinMain,addr stRt
959
invoke DestroyWindow,hEdit
960
invoke CreateWindowEx,0,offset szClass,NULL,\
961
WS_CHILD OR WS_VISIBLE OR ES_MULTILINE OR ES_WANTRETURN\
962
OR WS_VSCROLL or ES_NOHIDESEL or ES_AUTOHSCROLL or WS_HSCROLL,\
963
stRt.left,stRt.top,stRt.right,stRt.bottom,hWinMain,ID_EDIT,hInstance,NULL
964
mov hEdit,eax
965
invoke SendMessage,hEdit,EM_LIMITTEXT,0,0
966
invoke SetWindowText,hEdit,_lpMem
967
invoke GlobalFree,_lpMem
968
.if _flag
969
invoke SendMessage,hEdit,EM_SETMODIFY,TRUE,0
970
mov _flag,0
971
.endif
972
invoke SetFocus,hEdit
973
invoke _SetFont
974
.else
975
invoke CheckMenuItem,hMenu,IDM_STATUS_BAR,MF_UNCHECKED
976
invoke EnableMenuItem,hMenu,IDM_STATUS_BAR,MF_GRAYED
977
invoke ShowWindow,hStatusBar,SW_HIDE
978
invoke CheckMenuItem,hMenu,IDM_LINE_WRAP,MF_CHECKED
979
invoke SendMessage,hEdit,EM_GETMODIFY,0,0
980
.if eax
981
mov _flag,1
982
.endif
983
invoke GetWindowTextLength,hEdit
984
inc eax
985
push eax
986
invoke GlobalAlloc,GPTR,eax
987
mov _lpMem,eax
988
pop ecx
989
invoke GetWindowText,hEdit,_lpMem,ecx
990
invoke GetClientRect,hWinMain,addr stRt
991
invoke DestroyWindow,hEdit
992
invoke CreateWindowEx,0,offset szClass,NULL,\
993
WS_CHILD OR WS_VISIBLE OR ES_MULTILINE OR ES_WANTRETURN\
994
OR WS_VSCROLL or ES_NOHIDESEL,\
995
stRt.left,stRt.top,stRt.right,stRt.bottom,hWinMain,ID_EDIT,hInstance,NULL
996
mov hEdit,eax
997
invoke SendMessage,hEdit,EM_LIMITTEXT,0,0
998
invoke SetWindowText,hEdit,_lpMem
999
invoke GlobalFree,_lpMem
1000
.if _flag
1001
invoke SendMessage,hEdit,EM_SETMODIFY,TRUE,0
1002
mov _flag,0
1003
.endif
1004
invoke SetFocus,hEdit
1005
invoke _SetFont
1006
.endif
1007
call _ReSize
1008
.elseif ax == ID_EDIT
1009
call _SetState
1010
.endif
1011
.elseif eax == WM_SIZE
1012
call _ReSize
1013
.elseif eax == WM_MENUSELECT
1014
invoke MenuHelp,WM_MENUSELECT,wParam,lParam,lParam,hInstance,hStatusBar,offset szMenuHelp
1015
.elseif eax == FrId
1016
.if stFr.Flags & FR_DIALOGTERM
1017
mov hFind,0
1018
.elseif stFr.Flags & FR_REPLACE
1019
.if stFr.Flags & FR_DOWN
1020
invoke _FindReplace
1021
.else
1022
invoke _FindReplace2
1023
.endif
1024
invoke SendMessage,hEdit,EM_GETSEL,addr @stRange.cpMin,addr @stRange.cpMax
1025
mov eax,@stRange.cpMin
1026
.if eax != @stRange.cpMax
1027
invoke SendMessage,hEdit,EM_REPLACESEL,TRUE,offset szReplaceText
1028
.endif
1029
.elseif stFr.Flags & FR_REPLACEALL
1030
.while TRUE
1031
1032
.if stFr.Flags & FR_DOWN
1033
or stFr.Flags,FR_DOWN
1034
invoke _FindReplace
1035
.else
1036
and stFr.Flags,not FR_DOWN
1037
invoke _FindReplace2
1038
.endif
1039
.break .if eax == 0
1040
invoke SendMessage,hEdit,EM_GETSEL,addr @stRange.cpMin,addr @stRange.cpMax
1041
mov eax,@stRange.cpMin
1042
.if eax != @stRange.cpMax
1043
invoke SendMessage,hEdit,EM_REPLACESEL,TRUE,offset szReplaceText
1044
.endif
1045
.endw
1046
1047
.elseif stFr.Flags & FR_DOWN
1048
or stFr.Flags,FR_DOWN
1049
invoke _FindReplace
1050
invoke SendMessage,hEdit,EM_SCROLLCARET,0,0
1051
.else
1052
and stFr.Flags,not FR_DOWN
1053
invoke _FindReplace2
1054
invoke SendMessage,hEdit,EM_SCROLLCARET,0,0
1055
.endif
1056
.elseif eax == WM_INITMENU
1057
call _SetState
1058
.elseif eax == WM_ACTIVATE
1059
mov eax,wParam
1060
.if (ax == WA_ACTIVE) || (ax == WA_CLICKACTIVE)
1061
invoke SetFocus,hEdit
1062
invoke SendMessage,hEdit,EM_SCROLLCARET,0,0
1063
.endif
1064
.elseif eax == WM_NOTIFY
1065
mov ebx,lParam
1066
.if [ebx+NMHDR.code] == TTN_NEEDTEXT
1067
assume ebx : ptr TOOLTIPTEXT
1068
mov eax,[ebx].hdr.idFrom
1069
mov [ebx].lpszText,eax
1070
push hInstance
1071
pop [ebx].hInst
1072
assume ebx : nothing
1073
.endif
1074
.elseif eax == WM_DRAWCLIPBOARD
1075
invoke IsClipboardFormatAvailable,CF_TEXT
1076
.if eax
1077
invoke EnableMenuItem,hMenu,IDM_PASTE,MF_ENABLED
1078
.else
1079
invoke EnableMenuItem,hMenu,IDM_PASTE,MF_GRAYED
1080
.endif
1081
.else
1082
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
1083
ret
1084
.endif
1085
xor eax,eax
1086
_OEN: ret
1087
_WndProc endp
1088
;********************************************************************
1089
_WinMain proc
1090
local stWndClass:WNDCLASSEX
1091
local stMsg:MSG
1092
local @hAccelerators
1093
1094
invoke InitCommonControls
1095
invoke GetModuleHandle,NULL
1096
mov hInstance,eax
1097
invoke LoadMenu,hInstance,IDM_MAIN
1098
mov hMenu,eax
1099
invoke LoadAccelerators,hInstance,IDA_MAIN
1100
mov @hAccelerators,eax
1101
invoke RtlZeroMemory,addr stWndClass,sizeof WNDCLASSEX
1102
push hInstance
1103
pop stWndClass.hInstance
1104
invoke LoadIcon,hInstance,IDC_MAIN
1105
mov hIcon,eax
1106
mov stWndClass.hIcon,eax
1107
mov stWndClass.hIconSm,eax
1108
invoke LoadCursor,0,IDC_ARROW
1109
mov stWndClass.hCursor,eax
1110
mov stWndClass.cbSize,sizeof WNDCLASSEX
1111
mov stWndClass.lpfnWndProc,offset _WndProc
1112
mov stWndClass.lpszClassName,offset szClassName
1113
mov stWndClass.style,CS_HREDRAW or CS_VREDRAW
1114
mov stWndClass.hbrBackground,COLOR_BTNFACE+1
1115
invoke RegisterClassEx,addr stWndClass
1116
invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaption,\
1117
WS_OVERLAPPEDWINDOW,100,80,600,\
1118
400,NULL,hMenu,hInstance,NULL
1119
.if eax
1120
mov hWinMain,eax
1121
.else
1122
ret
1123
.endif
1124
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
1125
invoke UpdateWindow,hWinMain
1126
.while TRUE
1127
invoke GetMessage,addr stMsg,NULL,0,0
1128
.break .if eax == 0
1129
invoke TranslateAccelerator,hWinMain,@hAccelerators,addr stMsg
1130
.if eax == 0
1131
invoke TranslateMessage,addr stMsg
1132
invoke DispatchMessage,addr stMsg
1133
.endif
1134
.endw
1135
ret
1136
_WinMain endp
1137
;********************************************************************
1138
start: call _WinMain
1139
invoke ExitProcess,NULL
1140
end start
1141
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。