WEB开发网
开发学院软件开发汇编语言 GUI编程中以对话框为主要界面的应用程序 阅读

GUI编程中以对话框为主要界面的应用程序

 2007-11-13 09:31:25 来源:WEB开发网   
核心提示:先是对话框的名字,然后是关键字“DAILOG”,GUI编程中以对话框为主要界面的应用程序(3),接下来的四个数字中,前两个是对话框的坐标,在接下来的例子中,我们将产生一个应用程序的模式对话框,后两个是对话框的宽和高(注意:它们的单位是对话框的单位,而不一定是像素点)

先是对话框的名字,然后是关键字“DAILOG”。接下来的四个数字中,前两个是对话框的坐标,后两个是对话框的宽和高(注意:它们的单位是对话框的单位,而不一定是像素点)。

STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |
WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK

上面定义了对话框的风格。

CAPTION "Our First Dialog Box"

这是显示在对话框标题条上的标题。

CLASS "DLGCLASS"

这一行非常关键。正是有了关键字CLASS,我们才可以用它来声明把一个对话框当成一个窗口来用。跟在关键字后面的是“窗口类”的名称。

BEGIN
EDITTEXT IDC_EDIT, 15,17,111,13, ES_AUTOHSCROLL | ES_LEFT
DEFPUSHBUTTON "Say Hello", IDC_BUTTON, 141,10,52,13
PUSHBUTTON "E&xit", IDC_EXIT, 141,26,52,13
END

上面的一块定义了对话框中的子窗口控件,它们是声明在一头一尾的两个关键字BEGIN和END之间的。

control-type "text" ,controlID, x, y, width, height [,styles]
控件的类型是资源编辑器定义好了的常数,您可以查找有关的手册。
现在我们来看看汇编源代码。先看这部分:
mov wc.cbWndExtra,DLGWINDOWEXTRA
mov wc.lpszClassName,OFFSET ClassName
通常cbWndExtra被设成NULL,但我们想把一个对话框模板注册成一个窗口类,我们必须把该成员的值设成DLGWINDOWEXTRA。注意类的名称必须和模板中跟在CLASS关键字后面的名称一样。余下的成员变量和声明一般的窗口类相同。填写好窗口类结构变量后调用函数RegisterClassEx进行注册。看上去这一切和注册一个普通的窗口类是一样的。
invoke CreateDialogParam,hInstance,ADDR DlgName,NULL,NULL,NULL
注册完毕后,我们就创建该对话框。在这个例子中,我们调用函数CreateDialogParam产生一个无模式对话框。这个函数共有5个参数,其中前两个参数是必须的:实例句柄和指向对话框模板名称的指针。注意第二个参数是指向模板名称而不是类名称的指针。这时,WINDOWS将产生对话框和子控件窗口。同时您的应用程序将接收到由WINDOWS传送的第一个消息WM_CREATE。
invoke GetDlgItem,hDlg,IDC_EDIT
invoke SetFocus,eax
在对话框产生后,我们把输入输出焦点设到编辑控件上。如果在WM_CREATE消息处理段中假如设置焦点的代码,GetDlgItem函数就会失败,因为此时空间窗口还未产生,为了在对话框和所有的子窗口控件都产生后调用该函数我们把它安排到了函数UpdatWindow后,GetDlgItem函数返回该控件的敞口句柄。
invoke IsDialogMessage, hDlg, ADDR msg
.IF eax ==FALSE
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDIF

现在程序进入消息循环,在我们翻译和派发消息前,该函数使得对话框内置的对话框管理程序来处理有关的键盘跳转逻辑。如果该函数返回TRUE,则表示消息是传给对话框的已经由该函数处理了。注意和前一课不同,当我们想得到控件的文本信息时调用GetDlgItemText函数而不是GetWindowText函数,前者接受的参数是一个控件的ID 号,而不是窗口的句柄,这使得在对话框中调用该函数更方便。

--------------------------------------------------------------------------------

好我们现在使用第二种方法把一个对话框当成一个主窗口来使用。在接下来的例子中,我们将产生一个应用程序的模式对话框,您将会发现其中根本没有消息循环或窗口处理过程,因为它们根本没有必要!

上一页  1 2 3 4  下一页

Tags:GUI 编程 对话框

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接