照登girl1983的来信:我该如何回答?

dbcontrols 2003-03-10 04:35:49
泰山你好:
久仰大名,我是CSDN的girl1983,最近由于在CSDN回答问题太多,有很多人红眼,对我又是谩骂又是封杀,现在已经不能回答问题了,实在让我伤心透了,特别是那个叫王晓宇的小孩,真是讨厌,我想问总版主的信箱是什么?我要投诉,CSDN的VB版版主早该换了,极其不负责任。
另外,我想问你个技术问题,这个问题有人问过,一直没解决:
在MDI的子窗体最大化后如何去掉恢复按钮,这个问题对我很重要,因为我做MDI程序的时候让窗体加载的时候最大化,一旦客户点了恢复按钮界面就很难看,请指教。

张红
...全文
47 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sean918 2003-03-10
  • 打赏
  • 举报
回复
...
night_cai 2003-03-10
  • 打赏
  • 举报
回复
鼠标在人家手里,凭什么叫人家结贴?我估计泰老大早走了。
horsefly 2003-03-10
  • 打赏
  • 举报
回复
几日没来那GIRL到给封掉拉?
诶,屡教不改被封也难怪!(主要是斑竹也骂,够狂的)
肯定从小给她父母宠惯了,有点技术就目中无人了!!!
楼主就回答她吧。才来没多长时间就被封了也怪可怜的!
ClientDC 2003-03-10
  • 打赏
  • 举报
回复
up
Sean918 2003-03-10
  • 打赏
  • 举报
回复
to icnetcn(yoyo之无双) :
 有兴趣讨论的话,请发消息给我,我开专贴和你讨论
Sean918 2003-03-10
  • 打赏
  • 举报
回复
to icnetcn(yoyo之无双) :

关于你的这个问题我们可以另外开一个帖子讨论


还是请楼主先把这个帖子结了吧,影响太不好了
happybeyond 2003-03-10
  • 打赏
  • 举报
回复
那个girl一个月内生到了5个三角,我怎么没见她回答多少问题啊!
ketao_78 2003-03-10
  • 打赏
  • 举报
回复
dui
icnetcn 2003-03-10
  • 打赏
  • 举报
回复
假如有人在你之前把自己的窗口过程挂在了这个窗口上,那么他的过程可能要执行两次,
这样不好吧,即使没有其它的过程,那么系统的窗口过程还是要调用两次,我觉得总是不妥。
加msgbox确实可以起一定的作用,而且一般在程序正式完成后也不允许在窗口过程里出错,
不过我觉得没什么大作用还是不加为好,因为这样会误到读者。
Sean918 2003-03-10
  • 打赏
  • 举报
回复
to: 楼上,你先试试看。

你可以在 每个callwindowproc 后都加上 Exit Function ,其实效果是一样的,两次是一样的,不过确实是多余

至于MsgBox是为了一旦出错了,可以明确知道是哪里错了,而设置的。没有错误的话不会出现。

当然一旦错了,那整个程序肯定也全部挂掉了

因为我这里没有使用其他,所以象征性的使用这个方法。

如果有其他控件,比如 listbox ,那就可以把错误写在里面,而不用 MsgBox

总的来说,只是一个范例,你可以自己修改
icnetcn 2003-03-10
  • 打赏
  • 举报
回复
这个窗口过程有问题,怎么可以调用两次callwindowproc呢?
还有在这个过程中加msgbox 好吗?应该不好吧.
Sean918 2003-03-10
  • 打赏
  • 举报
回复
我试过了,除了还能看见那个按钮,其他效果都很好
Sean918 2003-03-10
  • 打赏
  • 举报
回复
改好了。

把模块中的函数加个条件就行了:
===================================

...

Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error GoTo ShowErr

If Msg = WM_SYSCOMMAND Then
If wParam = SC_RESTORE Then
Exit Function
ElseIf wParam = SC_MAXIMIZE Then '''这里是控制子窗口返回的
Form1.WindowState = 2
Exit Function
Else
WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
End If
End If

WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)


Exit Function
ShowErr:
MsgBox Err.Source & "-" & Err.Description
End Function

Sean918 2003-03-10
  • 打赏
  • 举报
回复
可以最大化,只是连父窗口一起最大化了

我再改改看
icnetcn 2003-03-10
  • 打赏
  • 举报
回复
楼主会不会是那个Girl(大胆猜测).
dbcontrols 2003-03-10
  • 打赏
  • 举报
回复
以上代码在最小化后不可还原。
Sean918 2003-03-10
  • 打赏
  • 举报
回复
楼上代码去掉了窗口菜单的“恢复”项,保证在最大化的时候不能“恢复”,但是那个钮还能看见

有更好的贴出来共享好了
Sean918 2003-03-10
  • 打赏
  • 举报
回复
我懒得再说什么了

我给 GIRL 解决好了问题好了,能不能用随便她,楼主你可以回她信了

========================================
''''MDI 窗口代码:
Private Sub MDIForm_Load()
Load Form1
Form1.Show
End Sub

''''子窗口代码:
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Const MF_BYPOSITION = &H400&
Const MF_REMOVE = &H1000&
Private Sub Form_Load()
Dim hSysMenu As Long, nCnt As Long
' Get handle to our form's system menu
' (Restore, Maximize, Move, close etc.)
hSysMenu = GetSystemMenu(Me.hwnd, False)
If hSysMenu Then
' Get System menu's menu count
nCnt = GetMenuItemCount(hSysMenu)
If nCnt Then
' Menu count is based on 0 (0, 1, 2, 3...)
RemoveMenu hSysMenu, 0, MF_BYPOSITION Or MF_REMOVE
'RemoveMenu hSysMenu, nCnt - 2, MF_BYPOSITION Or MF_REMOVE ' Remove the seperator
DrawMenuBar Me.hwnd
' Force caption bar's refresh. Disabling X button
Me.Caption = "Try to close me!"
End If
End If

Me.WindowState = 2

prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf WndProc
End Sub

Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hwnd, GWL_WNDPROC, prevWndProc
End Sub

''''还有一个模块:
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
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 GWL_WNDPROC = (-4)
Public Const SC_MAXIMIZE = &HF030&
Public Const SC_SIZE = &HF000
Public Const SC_CLOSE = &HF060
Public Const WM_SYSCOMMAND = &H112
Public Const SC_DEFAULT = &HF160
Public Const WM_NCLBUTTONDBLCLK = &HA3
Public Const SC_RESTORE = &HF120&

Public prevWndProc As Long ''''默认窗口程序地址

Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error GoTo ShowErr
If Msg = WM_SYSCOMMAND Then
If wParam = SC_RESTORE Then
Exit Function
Else
WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
End If
End If

WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)

Exit Function
ShowErr:
MsgBox Err.Source & "-" & Err.Description
End Function
yem9 2003-03-10
  • 打赏
  • 举报
回复
解决技术问题的同时,不要情绪化。。。程序员最大的成功必备应该要有这一个要素。。。
mouseanAnya 2003-03-10
  • 打赏
  • 举报
回复
这件事情希望到此为止,再闹下去只会更混乱,请楼主尽早结贴,或者转移到非技术版,不要影响大家正常交流
加载更多回复(23)

743

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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