我得到一个Excel,我想用API将其子窗体的ControlBox去掉,用以下代码没有将其除去,请问有什么办法可以解决?dim mlngXLhwnd as longmlngXLhwnd=FindWindow("XLMAIN","主窗体名称")dim mlngChild as long
mlngChild=GetWindow(mlngXLhwnd,GW_CHILD) '获得其子窗体的句柄dim lngStyle as long
lngStyle=GetWindowLong(mlngChild,GWL_STYLE)
lngStyle = lngStyle Xor WS_CAPTION
lngStyle = lngStyle Xor WS_SIZEBOX
SetWindowLong mlngChild, GWL_STYLE, lngStyle
mlngChild=GetWindow(mlngXLhwnd,GW_CHILD) '获得其子窗体的句柄dim lngStyle as long
lngStyle=GetWindowLong(mlngChild,GWL_STYLE)
lngStyle = lngStyle Xor WS_CAPTION
lngStyle = lngStyle Xor WS_SIZEBOX
SetWindowLong mlngChild, GWL_STYLE, lngStyle
解决方案 »
- 网页字符截取问题
- 关于由数据作曲线的问题。急,在线等!
- 问一个vb连接数据库的简单问题.
- 现在有ERP需要让我们美化界面,他们公司要求我们给一个美化演示,怎么做好呢?
- 大哥们求救 小弟在线等 VB的分层技术
- printform打印picturebox的问题
- Help Me!!!!!!!!!!!!!!!加分很多!!!!!!!数组的问题!!!!!
- 明华M1读卡源程序,一直出错,不知道是什么原因(附源代码)?
- 如何使应用程序运行时作为一个进程后台运行?
- csdn茶馆里的朋友们!!老山有问题了!!!呵呵!!来坐坐吧!!!!小二!!切二斤牛肉。上一桶好酒!!!!!
- 茫茫人海寻求高手:遇到了两个大大的难题,紧急求助。
- 大家帮忙来看看,小弟不胜感激~~
Declare Function SetMenu Lib "user32.dll"(Byval HMenu As Long,Byval NewMenu As Long ) As Integer
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As LongPrivate Const MF_REMOVE = &H1000&
public const sc_close=&HF060
Private Const SC_MAXIMIZE = &HF030&
Private Const SC_MINIMIZE = &HF020&Private Sub MDIForm_Load()
Dim hMenu As Long
dim mlngXLhwnd as longmlngXLhwnd=FindWindow("XLMAIN","主窗体名称") hMenu = GetSystemMenu(mlngXLhwnd, 0)
RemoveMenu hMenu, SC_MINIMIZE, MF_REMOVE '最小化不可用
RemoveMenu hMenu, SC_MAXIMIZE, MF_REMOVE ‘最大化不可用
removemenu hmenu,sc_close,MF_REMOVE '关闭不可用End Sub
Dim hMenu As Long
dim mlngXLhwnd as longmlngXLhwnd=FindWindow("XLMAIN","主窗体名称") hMenu = GetSystemMenu(mlngXLhwnd, 0)
RemoveMenu hMenu, SC_MINIMIZE, MF_REMOVE '最小化不可用
RemoveMenu hMenu, SC_MAXIMIZE, MF_REMOVE ‘最大化不可用
removemenu hmenu,sc_close,MF_REMOVE
加到调出字窗体的代码中试试看呢?
SetWindowPos 子窗体句柄,0,0,0,0,0,SWP_NOSIZE在当前的Sheet页面没有焦点的情况下,好像是不见了,一旦Sheet获得焦点,完蛋了,又出来了。
分数加到100分,求各位能手了。谢谢大家,谢谢楼上。
'设置窗体结构信息函数
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'获取窗体结构信息函数
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_SYSMENU = &H80000
Private Const WS_CAPTION = &HC00000
Private Const WS_SIZEBOX = &H40000
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
'为窗体指定一个新位置和状态函数
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const SWP_NOZORDER = &H4
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_NOREPOSITION = &H200
'获得整个窗体的大小和位置
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Dim Change As Boolean
Private Sub mdiForm_Click()
Dim lStyle As Long
Dim MyRect As RECT
'获取窗体的大小和位置
GetWindowRect Me.hwnd, MyRect
'取得当前窗体信息
lStyle = GetWindowLong(Me.hwnd, GWL_STYLE)
If Change Then
'分别使系统菜单(包括图标)、标题、大小、最大化、最小化显示/有效
lStyle = lStyle Or WS_SYSMENU
lStyle = lStyle Or WS_CAPTION
lStyle = lStyle Or WS_SIZEBOX
lStyle = lStyle Or WS_MAXIMIZEBOX
lStyle = lStyle Or WS_MINIMIZEBOX
Else
'分别使系统菜单(包括图标)、标题、大小、最大化、最小化隐藏/无效
lStyle = lStyle And Not WS_SYSMENU
lStyle = lStyle And Not WS_CAPTION
lStyle = lStyle And Not WS_SIZEBOX
lStyle = lStyle And Not WS_MAXIMIZEBOX
lStyle = lStyle And Not WS_MINIMIZEBOX
End If
'按lStyle的值设置窗体信息
SetWindowLong Me.hwnd, GWL_STYLE, lStyle
'保持窗体的大小与位置不变
SetWindowPos Me.hwnd, 0, MyRect.Left, MyRect.Top, MyRect.Right - MyRect.Left, MyRect.Bottom - MyRect.Top, SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED
'改变显示/隐藏状态
Change = Not Change
End Sub
实在不行,取子窗口类名,好象Excel的子窗口类名都是EXCEL7
Dim lngStyle As Long
Dim mlngXLHwnd as long
Dim mobjXL As New Excel.Application
mobjXL.Caption = "主窗体"
'找到窗口,并将其设为子窗体
mobjXL.Visible = True
mlngXLHwnd = FindWindow("XLMAIN", "主窗体")
SetParent mlngXLHwnd, Me.hwnd
'去除其ControlBox等属性
lngStyle = GetWindowLong(mlngXLHwnd, GWL_STYLE)
lngStyle = lngStyle Xor WS_CAPTION
lngStyle = lngStyle Xor WS_SIZEBOX
SetWindowLong mlngXLHwnd, GWL_STYLE, lngStyle
mobjXL.Application.RecentFiles.Maximum = 0
Dim mobjWorkBook As Workbook
If strFileName = "" Then
'新建一个文件
Set mobjWorkBook = mobjXL.Workbooks.Add
Else
'打开当前文件
Set mobjWorkBook = mobjXL.Workbooks.Open(strFileName)
End If
Set mobjSH = mobjWorkBook.ActiveSheet
'将窗口移至指定位置
Dim mRect As RECT
GetClientRect Me.hwnd, mRect
MoveWindow mlngXLHwnd, mRect.Left, mRect.Top, mRect.Right - mRect.Left, mRect.Bottom - mRect.Top, 1
'设置当前窗口的状态,设其最大化
Me.WindowState = 2
Dim lngChildhwnd As Long mobjXL.ActiveWindow.WindowState = xlMaximized
lngChildhwnd = GetWindow(mlngXLHwnd, GW_CHILD)
lngStyle = GetWindowLong(lngChildhwnd, GWL_STYLE)
lngStyle = lngStyle And Not WS_MAXIMIZEBOX
lngStyle = lngStyle And Not WS_MINIMIZEBOX
lngStyle = lngStyle And Not WS_SIZEBOX
SetWindowPos lngChildhwnd, 0, 0, 0, 0, 0, SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED
mobjWorkBook.Activate
Me.Show
mobjXL.ActiveWindow.WindowState = xlMaximized
lngChildhwnd = GetWindowLong(mlngXLHwnd, GW_CHILD)
lngStyle = GetWindowLong(lngChildhwnd, GWL_STYLE) lngStyle = lngStyle And Not WS_SYSMENU '新添加
lngStyle = lngStyle And Not WS_CAPTION '新添加
lngStyle = lngStyle And Not WS_MAXIMIZEBOX
lngStyle = lngStyle And Not WS_MINIMIZEBOX
lngStyle = lngStyle And Not WS_SIZEBOX
SetWindowLong lngChildhwnd, GWL_STYLE, lngStyle '新添加
'SetWindowPos lngChildhwnd, 0, 0, 0, 0, 0, SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED '不要
mobjWorkBook.Activate
Me.Show
就是通过GetSystemMenu获得系统菜单然后再RemoveMenu去除“关闭”项
用代码在主窗体上通过
代码如下:
Dim hMenu As Long
hMenu = GetSystemMenu(Me.hwnd, 0)
RemoveMenu hMenu, &HF060, MF_BYCOMMAND但就是无法设置Excel的子窗体。就其本身来讲,这个Excel的子窗体应当算是Form的孙窗体(因为EXCEL为FORM的子窗体)当通过楼上上的代码设置hMenu=GetSystemMenu(lngChildhwnd,0)时,得到的hMenu为0,即没有SystemMenu!!!!!!!!!!!!!!!!!!!!!!!!!!!!!晕了,不知道了
mobjXL.Quit
Set mobjXL = Nothing我可是没有一次成功了的,不知道楼上用的代码是怎么样的。
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'获取窗体结构信息函数
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_SYSMENU = &H80000
Private Const WS_CAPTION = &HC00000
Private Const WS_SIZEBOX = &H40000
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
'为窗体指定一个新位置和状态函数
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const SWP_NOZORDER = &H4
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_NOREPOSITION = &H200
'获得整个窗体的大小和位置
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Sub Form_Load()
Dim lngStyle As Long
Dim mlngXLHwnd As Long
Dim mobjXL As New Excel.Application
mobjXL.Caption = "主窗体"
'找到窗口,并将其设为子窗体
mobjXL.Visible = True
mlngXLHwnd = FindWindow("XLMAIN", "主窗体")
' SetParent mlngXLHwnd, Me.hwnd
'去除其ControlBox等属性
lngStyle = GetWindowLong(mlngXLHwnd, GWL_STYLE)
lngStyle = lngStyle Xor WS_CAPTION
lngStyle = lngStyle Xor WS_SIZEBOX
SetWindowLong mlngXLHwnd, GWL_STYLE, lngStyle
mobjXL.Application.RecentFiles.Maximum = 0
Dim mobjWorkBook As Workbook
If strFileName = "" Then
'新建一个文件
Set mobjWorkBook = mobjXL.Workbooks.Add
Else
'打开当前文件
Set mobjWorkBook = mobjXL.Workbooks.open(strFileName)
End If
Set mobjSH = mobjWorkBook.ActiveSheet
'将窗口移至指定位置
Dim mRect As RECT
'GetClientRect Me.hwnd, mRect
' MoveWindow mlngXLHwnd, mRect.Left, mRect.Top, mRect.Right - mRect.Left, mRect.Bottom - mRect.Top, 1
'设置当前窗口的状态,设其最大化
Me.WindowState = 2
Dim lngChildhwnd As Long mobjXL.ActiveWindow.WindowState = xlMaximized
lngChildhwnd = GetWindowLong(mlngXLHwnd, GW_CHILD)
lngStyle = GetWindowLong(lngChildhwnd, GWL_STYLE)
lngStyle = lngStyle And Not WS_SYSMENU
lngStyle = lngStyle And Not WS_CAPTION
lngStyle = lngStyle And Not WS_MAXIMIZEBOX
lngStyle = lngStyle And Not WS_MINIMIZEBOX
lngStyle = lngStyle And Not WS_SIZEBOX
SetWindowLong lngChildhwnd, GWL_STYLE, lngStyle
'SetWindowPos lngChildhwnd, 0, MyRect.Left, MyRect.Top, MyRect.Right - MyRect.Left, MyRect.Bottom - MyRect.Top, SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED 'SetWindowPos lngChildhwnd, 0, 0, 0, 0, 0, SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED 'bu hao
mobjWorkBook.Activate
Me.Show
End Sub
modDefine.GetClientRect Me.hwnd, mRect
MoveWindow mlngXLHwnd, mRect.Left, mRect.Top, mRect.Right - mRect.Left, mRect.Bottom - mRect.Top, 1End Sub
不是VB的子窗体,可能是我的标题写得有问题。这个子窗体是指Excel的子窗体