为什么以下代码在98下可以,但是2000下执行失败,关于窗体的关闭按纽

carefulman 2005-06-29 11:04:20
'然后需要关闭本窗体与MDIMAIN的关闭按纽
HLngMenu = GetSystemMenu(Me.hWnd, 0) '找到系统菜单句柄
UStrMyCLose = String(255, 0)
Call GetMenuString(HLngMenu, SC_CLOSE, UStrMyCLose, 256, MF_BYCOMMAND)
'问题1:这里并没有得到关闭按纽的字符串!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

UStrMyCLose = Left(UStrMyCLose, InStr(1, UStrMyCLose, Chr(0)) - 1) '找到关闭菜单
Call DeleteMenu(HLngMenu, SC_CLOSE, MF_BYCOMMAND) '删除
'令"X"能出现应该出现颜色
Call SendMessage(Me.hWnd, WM_NCPAINT, HTCAPTION, 0&)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''在另外的地方

'将删除的关闭按纽恢复回去
HLngMenu = GetSystemMenu(Me.hWnd, 0) '找到系统菜单句柄
Call AppendMenu(HLngMenu, MF_STRING, SC_CLOSE, UStrMyCLose)
HLngMenu = GetSystemMenu(MdiMain.hWnd, 0) '找到系统菜单句柄
Call AppendMenu(HLngMenu, MF_STRING, SC_CLOSE, UStrMainClose)
'令"X"能出现应该出现颜色
Call SendMessage(Me.hWnd, WM_NCPAINT, HTCAPTION, 0&)

'问题2:奇怪的是在98下运行正常,但是2000下X按纽还是不可用

有人遇到过这个问题吗?比较急!!!
...全文
174 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
carefulman 2005-06-30
  • 打赏
  • 举报
回复
to hzh_net(_风云_) :
在98下编译的,我换到2000下试下,多谢提醒

to TechnoFantasy(冰儿马甲www.applevb.com)
隐藏菜单是没问题,问题出现在将菜单恢复回去的时候,菜单是添加进去了,但是由于前面获得的菜单字符串为空,因此添加的菜单标题也是空的,而且右上的关闭按纽也没有恢复;点击那个标题为空的菜单也能够关闭程序,因此问题应该不在删除/添加系统菜单上,能够给点提示吗?谢谢!
TechnoFantasy 2005-06-30
  • 打赏
  • 举报
回复
没有问题啊,这里是我的隐藏的代码:

Public Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Public Declare Function GetMenuString Lib "user32" Alias "GetMenuStringA" (ByVal hMenu As Long, ByVal wIDItem As Long, ByVal lpString As String, ByVal nMaxCount As Long, ByVal wFlag As Long) As Long
Public Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Public Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Const MF_BYCOMMAND = &H0&
Public Const SC_CLOSE = &HF060&
Public Const WM_NCPAINT = &H85
Public Const MF_STRING = &H0&

Private Sub Command1_Click()
Dim HLngMenu As Long
Dim UStrMyCLose As String


HLngMenu = GetSystemMenu(Me.hwnd, 0) '找到系统菜单句柄
UStrMyCLose = String(255, 0)
Call GetMenuString(HLngMenu, SC_CLOSE, UStrMyCLose, 256, MF_BYCOMMAND)
'问题1:这里并没有得到关闭按纽的字符串!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Debug.Print UStrMyCLose
UStrMyCLose = Left(UStrMyCLose, InStr(1, UStrMyCLose, Chr(0)) - 1) '找到关闭菜单
Call DeleteMenu(HLngMenu, SC_CLOSE, MF_BYCOMMAND) '删除
'令"X"能出现应该出现颜色
Call SendMessage(Me.hwnd, WM_NCPAINT, HTCAPTION, 0&)
End Sub
hzh_net 2005-06-30
  • 打赏
  • 举报
回复
可能是98 和 2000 的系统问题.
请问楼主,你的程序是在98 或2000 哪个下编译的?
ningkang 2005-06-30
  • 打赏
  • 举报
回复
up
carefulman 2005-06-29
  • 打赏
  • 举报
回复
白天不能回复,明天晚上来结贴,谢谢各位

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧