一些关于API的代表问题,值得关注!

mostar 2001-07-19 03:21:17
1、如何封闭MOUSE,不仅仅是隐藏?
2、如何封闭窗口的关闭和最大化按钮?
3、如何禁止调整修改窗口的大小?
--------------
分别给分的:-)
...全文
75 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
MonkeyLin 2001-07-20
  • 打赏
  • 举报
回复
哦,那我要继续研究……
mostar 2001-07-19
  • 打赏
  • 举报
回复
To:MonkeyLin(没有MSDN的小猴儿) 
那个函数我试过,不行,该隐藏时不隐藏
更不用说调整大小了,会是什么原因呢?
gameboy999 2001-07-19
  • 打赏
  • 举报
回复
如果纯粹的一点都不能resize窗体,那好办,只要设置dialog的属性即可。

如果需要实现这种效果:拖到一定大小时,就不能再小了,而大可以随便大,
那需要替换掉dialog的winproc,然后在其中处理WM_SIZING消息,发现它到了自己设定的最小宽度或高度时就返回(什么都不作)即可
gameboy999 2001-07-19
  • 打赏
  • 举报
回复
ClipCursor Api can solve your first question!
MonkeyLin 2001-07-19
  • 打赏
  • 举报
回复
SetWindowPos 好象可以禁止调整修改窗口的大小

VB声明
Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (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
说明
这个函数能为窗口指定一个新位置和状态。它也可改变窗口在内部窗口列表中的位置。该函数与DeferWindowPos函数相似,只是它的作用是立即表现出来的(在vb里使用:针对vb窗体,如它们在win32下屏蔽或最小化,则需重设最顶部状态。如有必要,请用一个子类处理模块来重设最顶部状态
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hwnd Long,欲定位的窗口
hWndInsertAfter Long,窗口句柄。在窗口列表中,窗口hwnd会置于这个窗口句柄的后面。也可能选用下述值之一:
HWND_BOTTOM 将窗口置于窗口列表底部
HWND_TOP 将窗口置于Z序列的顶部;Z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序
HWND_TOPMOST 将窗口置于列表顶部,并位于任何最顶部窗口的前面
HWND_NOTOPMOST 将窗口置于列表顶部,并位于任何最顶部窗口的后面
x Long,窗口新的x坐标。如hwnd是一个子窗口,则x用父窗口的客户区坐标表示
y Long,窗口新的y坐标。如hwnd是一个子窗口,则y用父窗口的客户区坐标表示
cx Long,指定新的窗口宽度
cy Long,指定新的窗口高度
wFlags Long,包含了旗标的一个整数
SWP_DRAWFRAME 围绕窗口画一个框
SWP_HIDEWINDOW 隐藏窗口
SWP_NOACTIVATE 不激活窗口
SWP_NOMOVE 保持当前位置(x和y设定将被忽略)
SWP_NOREDRAW 窗口不自动重画
SWP_NOSIZE 保持当前大小(cx和cy会被忽略)
SWP_NOZORDER 保持窗口在列表的当前位置(hWndInsertAfter将被忽略)
SWP_SHOWWINDOW 显示窗口
SWP_FRAMECHANGED 强迫一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有改变
注解
窗口成为最顶级窗口后,它下属的所有窗口也会进入最顶级。一旦将其设为非最顶级,则它的所有下属和物主窗口也会转为非最顶级。Z序列用垂直于屏幕的一根假想Z轴量化这种从顶部到底部排列的窗口顺序

kyuwong 2001-07-19
  • 打赏
  • 举报
回复
2,3:

Option Explicit

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 Const SC_CLOSE = &HF060&
Private Const SC_KEYMENU = &HF100&
Private Const SC_MAXIMIZE = &HF030&
Private Const SC_MINIMIZE = &HF020&
Private Const SC_MOVE = &HF010&
Private Const SC_RESTORE = &HF120&
Private Const SC_SIZE = &HF000&

Private Sub Form_Load()
Dim hSysMenu As Long, nCnt As Long

hSysMenu = GetSystemMenu(Me.hwnd, False)

If hSysMenu Then

nCnt = GetMenuItemCount(hSysMenu)
If nCnt Then

RemoveMenu hSysMenu, SC_CLOSE, MF_REMOVE
RemoveMenu hSysMenu, nCnt - 2, MF_BYPOSITION Or MF_REMOVE ' Remove the seperator
RemoveMenu hSysMenu, SC_MAXIMIZE, MF_REMOVE
RemoveMenu hSysMenu, SC_SIZE, MF_REMOVE
DrawMenuBar Me.hwnd


End If
End If
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Unload Me
End Sub
iamfancy 2001-07-19
  • 打赏
  • 举报
回复
只好关注了

1,486

社区成员

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

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