你为什么一定要对系统的那几个按钮进行编程,如果一定要那样做的话就用API吧
其实你只要把标题栏拿掉,自己画上几个按钮就可以了,你想他怎么样都可以啊

解决方案 »

  1.   

    救救我呀!       我想用api重画按钮,但是不知道如何办?
      

  2.   

    放一只图片不比什么都像,为什么一点要用api画呢?
      

  3.   

    用API重画,真有功夫,图片吧
      

  4.   

    shawls(小山):
    把45分给我,答案如下:
    Option Explicit
    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    '如果你使用如下代码不能使你的程序达到预定目标,可能你将窗体的。controlbox 属性设为 False 了。Private Sub MDIForm_Load()
        
        Me.Top = 0
        Me.Left = 0
        Me.WindowState = 2
        Dim hMenu  As Long
        Dim ret As Long
        hMenu = GetSystemMenu(Me.hwnd, False)
        ret = DeleteMenu(hMenu, 6, &H400&) '关闭
        ret = DeleteMenu(hMenu, 5, &H400&) '横分割线
        ret = DeleteMenu(hMenu, 4, &H400&) '最大化
        ret = DeleteMenu(hMenu, 3, &H400&) '最小化
        ret = DeleteMenu(hMenu, 2, &H400&) '大小
        ret = DeleteMenu(hMenu, 1, &H400&) '移动
        ret = DeleteMenu(hMenu, 0, &H400&) '恢复
        Form1.Show
    End Sub'注意,对于MDI窗体,虽然以上代码可以使窗体控制菜单功能失效,但如果您鼠标按压最大最小化按钮,程序还是会产生阻塞现象,定时器不工作。如果您找到更好的办法,记得告诉我。交个朋友,我做工控,QQ:5043160
      

  5.   

    yeya(鸭鸭) :        我现在要求的是要使按钮的图表变动,而且能完成我所要求的任务,即:触发特定的消息!        还是给你加分,谢谢你的帮助。
      

  6.   

    Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal wndrpcPrev As Long, ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, lParam As Any) As LongPublic Const WM_COMMAND = &H111
    Public Const GWL_USERDATA = (-21)
    Public Const GWL_WNDPROC = -4
    Public Const WM_SYSCOLORCHANGE = &H15
    Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
    On Error Resume Next
      
     Select Case hwnd'发送信息到ToobBar
    Case VbcontrolWin.hwnd
         VbcontrolWin.ProcMsg hwnd, uMsg, wParam, lParam, 0&End Select'check if we want to pass the message or eat it.
    If Nodef = True Then
    WindowProc = CallWindowProc(NextProcs, hwnd, uMsg, wParam, ByVal lParam)
    Else
    Nodef = False
    Nodef = True
    End IfEnd Function================================Public Sub ProcMsg(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long, Result As Long)Dim msgStruct As msg
    Dim hdr As NMHDR
    Dim ttt As ToolTipText
    Dim MinMax As MINMAXINFO
    Dim OldParam As Long
    Dim ll As LongOn Error Resume NextSelect Case uMsgCase WM_SYSCOMMAND
    If wParam = 61458 Then
    If Me.Tag = "DOCKED" Then
    Nodef = False
    'MDIForm1.KillDOCK
    'MDIForm1.UnDockShow
    End If
    End IfCase WM_EXITSIZEMOVE, WM_NCLBUTTONDOWN
    Call ShowWindow(Me.hwnd, SW_SHOW)
    Call SendMessage(Me.hwnd, WM_NCACTIVATE, 1, 0)
     
    Case WM_NCRBUTTONUP
    PopupMenu toolbar   '


      

  7.   

    '本例使用一个包含两个 MDI 子窗体的 MDIForm 对象。 当从 Control 菜单中选择 Close 命令关闭一个窗体时,所显示的信息与从 File 菜单中选择 Exit 命令是不同的。 要尝试这个例子,可以先创建一个 MDIForm,然后使用菜单编辑器创建 File 菜单,该菜单中包含名为 FileExit 的 Exit 命令。 确信这个菜单项可用。在 Form1上,将 MDIChild 属性设置为 True。 将代码粘贴到相应窗体的声明部分,然后按 F5 键执行程序。'粘贴到 MDIForm1 的声明部分。
    Private Sub MDIForm_Load ()
       Dim NewForm As New Form1   ' Form1 的新实例。
       NewForm.Caption = "Form2"   ' 设置标题并显示。
    End SubPrivate Sub FileExit_Click ()
       Unload MDIForm1   ' 退出应用。
    End SubPrivate Sub MDIForm_QueryUnload (Cancel As Integer, UnloadMode As Integer)
       Dim Msg   ' 声明变量。
       ' 设置信息文本。
       Msg = "Do you really want to exit the application?"
       ' 如果用户单击 No 按钮,则停止QueryUnload。
       If MsgBox(Msg, vbQuestion + vbYesNo, Me.Caption) = vbNo Then Cancel = True
    End Sub' 粘贴到 Form1的声明部分。
    Private Sub Form_QueryUnload (Cancel As Integer, UnloadMode As Integer)
       Dim Msg   ' 声明变量。
       If UnloadMode > 0 Then
          ' 如果正在退出应用。
          Msg = "Do you really want to exit the application?"
       Else
          ' 如果正好在关闭窗体。
          Msg = "Do you really want to close the form?"
       End If
       ' 如果用户单击No按钮,则停止QueryUnload。
       If MsgBox(Msg, vbQuestion + vbYesNo, Me.Caption) = vbNo Then Cancel = True 
    End Sub
      

  8.   

    如果要屏蔽掉系统菜单,可以用GETSEYTEMMENU和
    DELETEMENU函数如果要用改变系统菜单系统欲处理函数,
    可以拦截消息,然后写代码,
    可以见MSDN 中ADDRESSOF函数的说明,那里有一个HOOK的例子,钩住消息,
    那个例子中只要改一点就行了