2017-04-05 6 views
0

모두.VB6 사이드 바 앱

vb6과 함께 '사이드 바'응용 프로그램을 개발하려고합니다. 다른 응용 프로그램에서는 윈도우 Vista의 가제트 사이드 바 또는 Google 데스크톱 사이드 바처럼 행동하고 싶습니다. 나는 이런 일이 발생할 가능성은 거의 없다는 것을 알고 있지만, 만약을 대비하여 묻고 있습니다.

현재 여러 컨트롤이있는 폼이 있는데로드 자체가 화면 높이에서 작업 표시 줄을 뺀로드를 실행하고 '왼쪽'위치는 타이머로 설정됩니다. 'screen.width - me.width'이므로 화면 맨 오른쪽의 전체 높이에서 시작하여 이동할 수 없습니다. 필요한 경우 높이 코드는 다음과 같습니다.

Declare Function GetUserNameA Lib "advapi32.dll" (ByVal lpBuffer As String, nSize As Long) As Long 

Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (_ 
      ByVal hwnd As Long, _ 
      ByVal nIndex As Long) As Long 

Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (_ 
      ByVal hwnd As Long, _ 
      ByVal nIndex As Long, _ 
      ByVal dwNewLong As Long) As Long 

Public Declare Function SetLayeredWindowAttributes Lib "user32" (_ 
      ByVal hwnd As Long, _ 
      ByVal crKey As Long, _ 
      ByVal bAlpha As Byte, _ 
      ByVal dwFlags As Long) As Long 

Public Const GWL_STYLE = (-16) 
Public Const GWL_EXSTYLE = (-20) 
Public Const WS_EX_LAYERED = &H80000 
Public Const LWA_COLORKEY = &H1 
Public Const LWA_ALPHA = &H2 


Private Const ABM_GETTASKBARPOS = &H5 

Private Type RECT 
Left As Long 
Top As Long 
Right As Long 
Bottom As Long 
End Type 

Private Type APPBARDATA 
cbSize As Long 
hwnd As Long 
uCallbackMessage As Long 
uEdge As Long 
rc As RECT 
lParam As Long 
End Type 

Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long 

Function Fixheight() 
Dim ABD As APPBARDATA 

SHAppBarMessage ABM_GETTASKBARPOS, ABD 

Form1.Height = Screen.Height - ((ABD.rc.Bottom - ABD.rc.Top) * 12) 
If Form1.Height <= 600 Then 
Form1.Height = Screen.Height 
End If 
End Function 

분명히 말해서, 나는 '맨 위'기능을 원하지 않습니다. 나는 그것을 가지고 있으며, 양식이 최대화하기 위해 양식을 닫히거나 최소화해야하므로 미친 듯이 몰아 넣고 그 뒤에있는 다른 프로그램 (예 : 크롬, 단어 등)을 최소화합니다. 예를 들어 사용자가 Chrome을 최대화하면 chrome은 form1.width가 아닌 최대 값을 갖도록이 양식이 대신 다른 프로그램을 최대화 할 수 있도록 허용해야합니다. 나는 이것이 가능한 한 의심 스럽다. 왜냐하면 내가 염려하는 한, 그것은 크롬을 통제한다는 의미 일 것이고, 본질적으로 기능을 최대화하는 것을 의미 할 것이다. me.height = screen.height - ((ABD.rc.Bottom - ABD. rc.Top) * 12) me.width = screen.width - form1.width 불가능합니다.

어쨌든 누군가가 도움을 줄 수 있기를 바랍니다. 내가 말했듯이, 나는이 일을 할 가능성을 심각하게 의심하지만 그렇다면 모든 것이 더 좋다.

미리 감사드립니다.

+0

이 코드는 직접 구현하지 않아도됩니다. 이를위한 API가 있습니다. [SHAppBarMessage] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb762108(v=vs.85).aspx)에 대한 MSDN의 문서를 참조하십시오. –

+0

오른쪽 ... [ABM_NEW] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb787959(v=vs.85) .aspx)로 AppBar를 등록한 다음 [APPBARDATA]에 'ABE_RIGHT'를 지정하면 [ABM_SETPOS] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb787959(v=vs.85) .aspx)로 표시됩니다 (https : //msdn.microsoft.com/en-us/library/windows/desktop/bb773184 (v = vs.85) .aspx) 구조를 전달했습니다. –

답변

0

Ken White 덕분에, 나는 SHAppBarMessage를 찾았고 다음과 같은 것을 찾았습니다 website, 내가 필요한 바로 그 기능을 갖춘 다운로드 가능한 소스를 제공합니다. 이제 막 구현해야합니다!

매우 기뻤습니다! 고맙습니다!

편집 :이 스페인어는 website입니다. Google 번역의 도움이 필요하지만 내 요구에 더 적합합니다. 오른손 쪽에서 작동시키는 법을 알아야합니다! 다시 한 번 감사드립니다!