VB使用堆叠对话框的一个方法

对话框

第一次使用VB,想做一个堆叠对话框的程序。
就是想标签控件那种,但是不想把每个页上的控件都放在一个主控件里。想把每个页都使用一个Form或PropertyPage来组织。
经过大量的实验和CSDN上同仁的友情帮助,略有小成,不敢独享,放在这里,抛砖引玉。希望大家还有更好的办法。

Step 1 声明如下说明
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Step 2 在主窗体上放置Frame控件(fraContainer), 以放置堆叠页面的容器
Step 3 建立函数InitializePage
Private Sub InitializePage(frmPage As Form, hWndParent As Long)
Dim dwStyle As Long

Load frmPage

dwStyle = GetWindowLong(frmPage.hwnd, -16)
dwStyle = dwStyle Or &H40000000
SetWindowLong frmPage.hwnd, -16, dwStyle

SetParent frmPage.hwnd, hWndParent
End Sub
Step 4 建立需要切换的页面Form1 和 Form2, 修改为无边框,并将相应的起始属性(StartUpPosition)改为Manual,Left Top 均为0
Step 5 建立页初始化函数
Public Sub InitializePages()
Set frm1 = New Form1
Set frm2 = New Form2

InitializePage frm1, frmMain.fraContainer.hwnd
InitializePage frm2, frmMain.fraContainer.hwnd
End Sub
Step 6 建立全局变量frmActive 保存当前活动的页面
Step 7 建立切换页面切换函数
Public Sub ChangePage(frmChange as Form)
If frmChange Is Nothing Then Exit Sub

If Not frmActive Is Nothing Then
If frmActive.hWnd <> frmChange.hWnd Then
frmActive.Hide
frmChange.Show 0, Me
Set frmActive = frmChange
End If
Else
frmChange.Show 0, Me
Set frmActive = frmChange
End If
End Sub

Step 8 在主页面的Unload 中加入如下代码
Unload frm1
Unload frm2

Set frm1 = Nothing
Set frm2 = Nothing

如此一个可以切换两个页面的代码完成,不过还有一些问题,
1. 在每个页面切入切出时没有相应的处理函数。
2. 页面没有焦点。

对于切入切出的问题,本来想用如下方式,从Form中派生一个PropertyForm类,然后加入OnSetActive 和 OnKillActive函数,然后所有页面从此类生成,但是不知道怎么做,呵呵。VB的功能还是弱了点。C++我可以为所欲为,VB不会就没有一点办法。:)
希望VB高手可以指教

时间: 2024-09-14 03:30:43

VB使用堆叠对话框的一个方法的相关文章

VB.NET中使用代表对方法异步调用

异步 按照我们常规的思维方式,计算机应该是干完一件事,然后再干下一件.用术语来说,这种执行任务的方式叫做同步执行(Synchronous Execution).既然这样,那么为什么要引入异步执行的概念呢? 目录 为什么要使用异步调用实现异步调用的步骤和机理 为什么要使用异步调用(Asynchronous Method Execution) 按照我们常规的思维方式,计算机应该是干完一件事,然后再干下一件.用术语来说,这种执行任务的方式叫做同步执行(Synchronous Execution).既然

win8使用IE浏览器查看网页会出现自动下载HTML文件对话框的解决方法

  win8使用IE浏览器查看网页会出现自动下载HTML文件对话框的解决方法.大家都知道windows操作系统内置IE浏览器,Win8系统中很多用户会使用IE浏览器查看网页,通常网页会有很多的超链接可以点击进入下一个网页,不过有的Win8系统用户反馈点击后出现自动下载HTML文件的对话框,而不是打开网页,那么遇到这样的情况如何解决呢?本文教程小编分享几种解决方法,有需要的用户可以往下学习. 方法一: 1.按下WIN+R调出运行然后输入: regsvr32 msxml3.dll 回车; 2.重新打

js提示框替代系统alert,自动关闭alert对话框的实现方法_javascript技巧

自己写了个alert提示框.因为系统alert在苹果手机微信中,提示时,顶部会显示网站地址. 同时其他后续操作需要在js中继续填写.因此简单用div写了一个alert提示框,并自动关闭. 效果图 css样式 /*弹出消息对话框样式*/ .show_alert_box{ width:100%; height:100%; position:fixed; top:0px; left:0px; background-color:rgba(0,0,0,0.6); display:none; z-index

VC MFC非模态对话框的实现方法_C 语言

众所周知的,MFC中非模态对话框在显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.本文就来给大家讲解一下非模态对话框的实现方法: 一.非模态对话框的对话框资源和对话框类 实际上,模态对话框和非模态对话框在创建对话框资源和生成对话框类上是没有区别的,因此,在创建模态对话框时所创建的IDD_TIP_DIALOG对话框资源和CTipDlg类都不需要修改. 二.创建及显示非模态对话框的步骤 需要修改的是,对话框类实例的创建和显示,也就是之前在CAdditionDlg::OnBnCli

Android开发必知 九种对话框的实现方法_Android

在开发过程中,与用户交互式免不了会用到对话框以实现更好的用户体验,所以掌握几种对话框的实现方法还是非常有必要的.在看具体实例之前先对AlertDialog做一个简单介绍.AlertDialog是功能最丰富.实践应用最广的对话框,它可以生成各种内容的对话框.但实际上AlertDialog生成的对话框总体可分为以下4个区域:图标区.标题区.内容区.按钮区. 这里总结了九种对话框的实现方法,有需要的朋友可以来学习下了   除了popupwindow实现稍微麻烦一点,其他形似都相对简单,熟悉2便即可 直

MFC扩展DLL中导出类和对话框的实现方法_C 语言

本文实例讲述了MFC扩展DLL中导出类和对话框的实现方法,分享给大家供大家参考.具体实现方法如下: 一般来说,如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对话框. 程序运行结果如下图所示: 一.创建MFC扩展DLL 步骤: 运行Visual Studio 6.0->File->New...->Projects: 选择Mfc AppWiz

菜鸟求救:怎样实现统计一个方法执行多少次

问题描述 在做一个答题小游戏,一共有30多个类,其中有一个类是:如果答错了,就跳转到这个类调用他的方法,弹出一个"你答错了的对话框",我想在最后答完题的时候统计显示一共答错了多少题,我想的就是定义一个函数表示该方法执行多少次,然后显示直接调用该函数即可,现在不知道怎么实现统计一个方法执行多少次. 解决方案 解决方案二:定义静态变量来统计方法执行次数每进方法一次,统计次数加1所有方法执行完成时,输出统计次数就可以了解决方案三:引用1楼magi1201的回复: 定义静态变量来统计方法执行次

PHP控制前台弹出对话框的实现方法_php实例

应用场景: 微信授权登录过程中,需要用户确认,故衍生此需求: 相应的逻辑不放在前端的原因是,此部分逻辑属于偏功能业务,所以放在后端,方便统一管理. 解决办法: 通过php echo出javascript脚本,这里需要关注的一点是缓冲区. 缓冲区应该是有三个部分,分别是php.webserver.web browser,可以通过程序代码或配置文件做到实时输出,相对而言后台是可控的,但是前台不同浏览器缓冲机制是不同的,这里没有深入研究.我的解决方案是,允许非实时输出. 允许非实时输出的一个要求是,在

Android开发必知 九种对话框的实现方法

在开发过程中,与用户交互式免不了会用到对话框以实现更好的用户体验,所以掌握几种对话框的实现方法还是非常有必要的.在看具体实例之前先对AlertDialog做一个简单介绍.AlertDialog是功能最丰富.实践应用最广的对话框,它可以生成各种内容的对话框.但实际上AlertDialog生成的对话框总体可分为以下4个区域:图标区.标题区.内容区.按钮区. 这里总结了九种对话框的实现方法,有需要的朋友可以来学习下了 除了popupwindow实现稍微麻烦一点,其他形似都相对简单,熟悉2便即可 直接上