友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
依依小说 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

windows环境下32位汇编语言程序设计-第62部分

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




                xor     eax;eax

                ret

 

_ProcWinMain    endp

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

_WinMain        proc

                local   @stWndClass:WNDCLASSEX

                local   @stMsg:MSG

                local   @hAccelerator;@hRichEdit

 

                invoke  LoadLibrary;offset szDllEdit

                mov     @hRichEdit;eax

                invoke  GetModuleHandle;NULL

                mov     hInstance;eax

                invoke  LoadMenu;hInstance;IDM_MAIN

                mov     hMenu;eax

                invoke  LoadAccelerators;hInstance;IDA_MAIN

                mov     @hAccelerator;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

;********************************************************************

; 建立并显示窗口

;********************************************************************

                invoke  CreateWindowEx;NULL;

                        offset szClassName;offset szCaptionMain;

                        WS_OVERLAPPEDWINDOW;

                        CW_USEDEFAULT;CW_USEDEFAULT;700;500;

                        NULL;hMenu;hInstance;NULL

                mov     hWinMain;eax



 
来源:电子工业出版社 作者:罗云彬 上一页         回书目         下一页          
上一页         回书目         下一页          
  


第9章 通用控件


9。4 使用Richedit控件(5)

    
                invoke  ShowWindow;hWinMain;SW_SHOWNORMAL

                invoke  UpdateWindow;hWinMain

;********************************************************************

; 消息循环

;********************************************************************

                。while  TRUE

                        invoke  GetMessage;addr @stMsg;NULL;0;0

                        。break  。if eax  0

                        invoke  TranslateAccelerator;hWinMain;

                                @hAccelerator;addr @stMsg

                        。if     eax  0

                                invoke  TranslateMessage;addr @stMsg

                                invoke  DispatchMessage;addr @stMsg

                        。endif

                。endw

                invoke  FreeLibrary;@hRichEdit

                ret

 

_WinMain        endp

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

start:

                call        _WinMain

                invoke  ExitProcess;NULL

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

                end     start

程序的资源脚本文件Richedit。rc的内容如下:

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

#include                    

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

#define ICO_MAIN            1000

#define IDA_MAIN            2000

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

#define IDM_MAIN            2000

#define IDM_OPEN            2101

#define IDM_SAVE            2102

#define IDM_EXIT            2103

#define IDM_UNDO            2201

#define IDM_REDO            2202

#define IDM_SELALL      2203

#define IDM_COPY            2204

#define IDM_CUT         2205

#define IDM_PASTE       2206

#define IDM_FIND            2207

#define IDM_FINDPREV        2208

#define IDM_FINDNEXT        2209

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

ICO_MAIN        ICON            〃Main。ico〃

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

IDM_MAIN        menu        discardable

BEGIN

        popup   〃文件(&F)〃

        BEGIN

            menuitem        〃打开文件(&O)。。。tCtrl+O〃; IDM_OPEN

            menuitem        〃保存文件(&S)tCtrl+S〃;  IDM_SAVE

        menuitem        separator

            menuitem        〃退出(&X)〃; IDM_EXIT

    END

    popup   〃编辑(&E)〃

    BEGIN

            menuitem        〃撤销(&Z)tCtrl+Z〃; IDM_UNDO

            menuitem        〃重复(&Y)tCtrl+Y〃; IDM_REDO

            menuitem        separator

            menuitem        〃全选(&A)tCtrl+A〃; IDM_SELALL

            menuitem        〃拷贝(&C)tCtrl+C〃; IDM_COPY

            menuitem        〃剪切(&X)tCtrl+X〃; IDM_CUT

            menuitem        〃粘贴(&V)tCtrl+V〃; IDM_PASTE

            menuitem        separator

            menuitem        〃查找(&F)。。。tCtrl+F〃; IDM_FIND

            menuitem        〃查找上一个(&P)tF2〃; IDM_FINDPREV

            menuitem        〃查找下一个(&N)tF3〃; IDM_FINDNEXT

    END

END

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

IDA_MAIN    accelerators

BEGIN

            VK_F2;  IDM_FINDPREV;VIRTKEY

            VK_F3;  IDM_FINDNEXT;VIRTKEY

            〃O〃;        IDM_OPEN;VIRTKEY;CONTROL

            〃S〃;        IDM_SAVE;VIRTKEY;CONTROL

            〃Z〃;        IDM_UNDO;VIRTKEY;CONTROL

            〃Y〃;        IDM_REDO;VIRTKEY;CONTROL

            〃A〃;        IDM_SELALL;VIRTKEY;CONTROL

            〃C〃;        IDM_COPY;VIRTKEY;CONTROL

            〃X〃;        IDM_CUT;VIRTKEY;CONTROL

            〃V〃;        IDM_PASTE;VIRTKEY;CONTROL

            〃F〃;        IDM_FIND;VIRTKEY;CONTROL

END

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

 

由于篇幅所限,例子中仅演示了最基本的功能,一些附加的功能并没有写进去,如没有“另存为”功能,也没有提供选择字体和颜色的对话框等,读者如果有兴趣的话,可以分析所附光盘的Chapter09Wordpad目录中的程序,这是一个完整得多的编辑器,界面中使用了工具栏和状态栏,但全部代码的长度有900多行,所以在书中并没有列出它的代码。

Richedit。asm程序中使用了一些第8章中介绍的通用对话框:当选择“打开”文件菜单的时候,使用GetOpenFileName显示一个“打开”文件对话框来供用户选择文件;另外,在选择“查找”菜单的时候,使用FindText函数显示一个“查找文本”对话框,所以在WM_CREATE消息中程序预先使用RegisterWindowMessage函数为“查找文本”对话框注册 FINDMSGSTRING消息。对于这些内容,读者可以参看第8章中的相关章节。

9。4。1  创建Richedit控件

1。 装入Richedit控件

由于Richedit控件存在于一个单独的DLL库文件中,所以在使用前也要显式地装入库文件,装入Richedit库文件并不使用InitmonControls之类的专用函数,一般使用通用的LoadLibrary函数来装入它,LoadLibrary函数的用法是:

invoke  LoadLibrary;addr szDllName

    mov     hDllInstance;eax

函数返回装入DLL的模块实例句柄,当不再使用库文件的时候,需要使用FreeLibrary函数将库释放。当库被装入时,库中的初始化代码会注册Richedit控件的窗口类,这样就可以在程序中利用Richedit的类名来创建控件。例子程序的_WinMain子程序中是这样进行库的装入和释放工作的:

            nst

szDllEdit   db      'RichEd20。dll';0

            。。。

            de

 

            invoke  LoadLibrary;offset szDllEdit

            mov     @hRichEdit;eax

            。。。

            ;主程序代码——创建窗口、消息循环等

            。。。

            invoke  FreeLibrary;@hRichEdit

当使用不同版本的Richedit控件时,注意要装入的库文件名是不同的。例子中使用2。0版本或3。0版本,所以装入的是RichEd20。dll文件。



 
来源:电子工业出版社 作者:罗云彬 上一页         回书目         下一页          
上一页         回书目         下一页          
  


第9章 通用控件


9。4 使用Richedit控件(6)

    
2。 创建Richedit控件

创建Richedit控件的工作一般在主窗口的WM_CREATE消息中完成,创建的办法是使用CreateWindowEx函数:

                nst

szClassEdit db  'RichEdit20A';0

                。。。

                de

        invoke  CreateWindowEx;WS_EX_CLIENTEDGE;offset szClassEdit;NULL;

                WS_CHILD OR WS_VISIBLE OR WS_VSCROLL OR WS_HSCROLL 

                OR ES_MULTILINE or ES_NOHIDESEL;

                0;0;0;0;hWinMain;0;hInstance;NULL

    mov     hWinEdit;eax

注意类名使用上的区别:1。0版使用“RichEdit”,2。0和3。0版本的类名有两种,ANSI版本使用的类名是“RichEdit20A”,Unicode版本使用的类名是“RichEdit20W”,例子中使用的是ANSI版本。

Richedit控件可以使用的风格有3组:标准的窗口风格、Edit控件风格和Richedit控件特有的风格。

在Edit控件可以使用的风格中,可供Richedit控件使用的有:

●   ES_MULTILINE——可以编辑多行文字。

●   ES_AUTOHSCROLL和ES_AUTOVSCROLL——自动滚动。

●   ES_NOHIDESEL——失去键盘输入焦点的时候仍然显示选择区域。

●   ES_READONLY——只读属性。

●   ES_CENTE
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!