Ola.Como prometido em alguns posts anteriores, achei uma utilidade para o subclassing nos formularios. Trata-se de conhecer comandos que levem a uma determinada acao.Por exemplo: numa janela sem borda (BorderStyle=0) nao ha menu de contexto do sistema (aquele com opcoes da janela: ). E para fazer que o contexto do titulo funcione no nosso formulario customizado, devemos criar um menu para substituir o menu padrao do titulo. Para isso temos de saber o momento em que o usuario clica com o botao direito na janelinha do aplicativo na barra de tarefas. Dai vem o subclassing.Escutando comandos para detectar chamada ao menu de contexto da janelaO projeto pronto (zipado) se encontra em https://skydrive.live.com/?cid=b278d5e7a71b5dca&sc=documents&nl=1&uc=1&id=B278D5E7A71B5DCA%21144 (pasta pessoal do Windows Live SkyDrive). Caso cair em alguma outra pasta, procure pela pasta Subclassing e pelo arquivo SubClassMenu.zip. Dentro do arquivo zipado ha o programa compilado, mas tambem ha o codigo usado no subclassing criado, cujo codigo postarei abaixo por partes.Iniciando o projeto1o: Inicie um novo projeto Standard Exe.2o: Va em project > Add Module e adicione um modulo comum. 3o: No modulo, cole o seguinte codigo:Public oldproc As LongPublic 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 LongPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPublic Const WM_SYSCOMMAND = &H112Public Const WM_CONTEXTMENU = &H7BPublic Const SC_MOVE = &HF010&Public Const SC_SIZE = &HF000&Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPublic Type POINTAPI X As Long Y As LongEnd TypePublic Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPublic Const GWL_WNDPROC = (-4)Public Const WM_POPUPSYSTEMMENU = &H313Public Function WProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If Msg = WM_POPUPSYSTEMMENU Or Msg = WM_CONTEXTMENU Then Dim mc As New cMenu Dim h As Long h = mc.Create mc.Add h, 800, "--Menu--", 3 mc.Add h, 801, "", &H800 mc.Add h, 1, "Restaurar", IIf(Form1.WindowState <> 0, 0, 3) mc.Add h, 2, "Mover", IIf(Form1.WindowState <> 0, 3, 0) mc.Add h, 3, "Tamanho", IIf(Form1.WindowState <> 0, 3, 0) mc.Add h, 4, "Minimizar", IIf(Form1.WindowState <> vbMinimized, 0, 3) mc.Add h, 5, "Maximizar", IIf(Form1.WindowState <> vbMaximized, 0, 3) mc.Add h, 6, "", &H800& mc.Add h, 7, "Fechar" Dim pt As POINTAPI GetCursorPos pt Dim retval As Long retval = mc.Show(h, Form1.hwnd, pt.X, pt.Y) mc.Destroy h Set mc = Nothing Select Case retval Case 1 Form1.WindowState = vbNormal Case 2 SendMessage Form1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0 Case 3 SendMessage Form1.hwnd, WM_SYSCOMMAND, SC_SIZE, 0 Case 4 Form1.WindowState = vbMinimized Case 5 Form1.WindowState = vbMaximized Case 7 Unload Form1 End Select WProc = 1 Else WProc = CallWindowProc(oldproc, hwnd, Msg, wParam, lParam) End IfEnd Function4o: Adicione uma classe, de nome cMenu.5o: Na nova