방개
비밀번호를 잊어버리셨나요?

코드

[설명 無] 오토핫키 가짜 타이틀바 만들기

    • 글자 크기

MaximizeBox (타이틀바에 있는 -ㅁX 중 ㅁ)를 없애고싶다는 누군가의 질문에 답변해주면서 만든 스크립트...

 

윈도우 스타일 제거 (기본 스타일 & ~뺄 스타일 // Bit and 연산자에 not 연산자(&~) B인지... Bit or 연산자에 not 연산자 ( |~ ) 인지 기억은 안나지만... 오토핫키는 +/- 기호를 이용한 손쉬운 윈도우 스타일 변경을 지원하니까요.)로 해결보려했지만,

minimize Box가 있으면 maximize Box 스타일을 제거해도 박스가 남이있더라고요 (클릭하지 못하게 비활성화 될 뿐..)

간단한 HTML/CSS를 ActiveX로 불러온 후 Caption을 제거하고 Border를 넣는 방식으로 구현했습니다.

 

버튼 Hover시 트랜지션을 넣으려했지만

도대체 오토핫키 ActiveX 컨트롤이 사용하는 IE 버전이 몇인지.. 되질 않는군요 (제가 실수했을수도 있고요.)

 

윈도우 10 기본 타이틀바와 동일한 크기, 동일한 색상입니다.

굳이 아이콘을 넣고싶으면 img src를 이용해서 또 넣어주면 되겠지요.

 

asdada.gif

 

html := "
(
<!DOCTYPE html>
<html>
<head>
<style type=""text/css"">
    html {overflow:hidden}
    body {background:#fefefe;margin: 0}
    button {background: #fefefe; color: #000000; border:0; margin: 0px; font-family:''; width:45px; height: 27px; font-size:15px;}
    #Close:hover {background: #E81123;color:#ffffff};
    #Minimize:hover {background: #e5e5e5};
</style>
</head>
<body>
   <div id='Title' style=""width:200px; float:left; font-size: 12px; padding-top: 5px; padding-left: 10px; font-family:'맑은 고딕';"">가짜 타이틀</div>
    <button id='Minimize' style=""font-size: 10px;"">―</button>
    <button id='Close'>⨉</button>
</body>
</html>
)"

Gui, -Caption +Border
Gui, Add, ActiveX, W300 H27 x0 y0 vdoc, HTMLFile
doc.write(html)
add_ButtonHandler()
/*
 *  여기에
 *  추가하고 싶은 GUI 컨트롤 들을
 *  추가합니다.
 */
Gui, Show, w300 h300, 진짜 타이틀
OnMessage(0x201, "WM_LBUTTONDOWN")
return

WM_LButtonDown(wParam, lParam)
{
   MouseGetPos,,vy
   if (vy < 28)
      PostMessage, 0xA1, 2,,,A
   return
}

GuiClose:
ExitApp

Minimize_OnClick()
{
    WinMinimize, 진짜 타이틀
}

Close_OnClick()
{
    ExitApp
}

add_ButtonHandler()
{
    global
   ComObjConnect(b_1 := doc.getElementsByTagName("Button")[0], b_1.GetAttribute("Id") "_")
   ComObjConnect(b_2 := doc.getElementsByTagName("Button")[1], b_2.GetAttribute("Id") "_")
   ComObjConnect(b_3 := doc.getElementsByTagName("div")[0], b_3.GetAttribute("Id") "_")
}

 

    • 글자 크기
댓글 5
  • 2020.6.10 00:11 댓글

    이런 방법도 있었군요~ 비슷한 문제에 대해 저는 좀 무식한(?) 방법을 써서 해결했던 경험이 있습니다.

    저는 Settimer를 설정해놓고 MouseGetPos로 Control을 변수로 입력받아 이미지를 바꿔주는 식으로 해결했었습니다.

    HTML은 윈도우98/Me 시절 나모웹에디터로 Frame 나눠서 홈페이지 만들때나 잠깐 접해봐서

    코드에 나와있는 CSS는 대강 무슨뜻인지 정도만 알것같네요. ^^; 좀 배워뒀으면 무식한방법으로 해결하지 않았으려나요..?

    제가 사용했던 코드도 한번 올려봐야 겠습니다.

  • 시유님께
    프날글쓴이
    2020.6.10 00:37 댓글

    이미지를 이용하여 구현하셨을경우, OnMessage()로 받는 편이 좋습니다.. ^^ 계속 SetTimer가 돌고있으면 다소 퍼포먼스상..문제가 있으니까요.

     

    즉, OnMessage(0x200, "함수") 이걸 Gui생성후에 호출하고요(0x200은 마우스 움직임을 뜻하는 윈도우 메시지입니다. 즉, 마우스가 GUI위에 움직일때만 "함수"함수가 작동합니다.),

     

    함수(wParam, lParam)

    {

    if (A_GuiControl = "마우스호버를 검사할 컨트롤의 내용")

    GuiControl // 픽처박스 이미지를 호버 이미지로 교체

    }

     

    이런식의 함수를 만드시면 됩니다.. ^^ 이 방법도 한번 올려야겠군요.

     

    나모 웹에디터라니.. 세월이 꽤 흘렀음에도 CSS를 이해하시니 대단하실 따름입니다.

  • 프날님께
    2020.6.10 01:38 댓글

    WM_MOUSEMOVE(0x200)를 먼저 썼었는데 제 실력부족인지 코드를 짤 때 절실하지 않았는지 Gui 바깥 영역을 검출을 못하더라구요.

     

    OnMessage로 받으려고 WM_NCMOUSEMOVE(0xA0)도 써보고 윈도우메세지도 뒤져보고 했었는데

     

    Gui창 밖으로 마우스가 나갔을때 이미지가 변하지 않았던걸로 기억합니다.

     

    하다하다 안되서 SetTimer를 쓰기는 했는데 나중에 시간좀 널널해지면 OnMessage로 구현하는 방법을 좀 더 연구해봐야겠네요.

  • 시유님께
    프날글쓴이
    2020.6.10 02:00 댓글

    맞습니다.. 윈도우 벗어나면 당연히 윈도우메시지가 동작하지 않습니다. Gui 컨트롤들은 모두 GUI창 위에 있으니 WM_MOUSEMOVE로 될줄 알았는데, 다른 사연(?)이 있어서 GUI바깥 영역 검출을 해야하는 상황인거로군요...

  • 프날님께
    2020.6.10 03:09 댓글

    예를 들면 윈도우10 탐색기의 종료버튼입니다. 하얀색의 멀쩡한 버튼에서 마우스를 가져다 대면 빨갛게 변합니다.

     

    그상태로 마우스가 창 밖으로 벗어나면 다시 정상적인(?) 하얀색의 버튼으로 돌아옵니다.

     

    버튼을 클릭한 상태(LButtonDown)에서도 창밖으로 벗어나면 하얀색의 버튼으로 돌아옵니다.

     

    그냥 빨간버튼인 상태로 있어도 기능상의 문제가 있다거나 그런건 아니지만

     

    뭔가 프로그램이 렉이 걸렸다거나 작동이 멈췄다거나 하는 느낌을 받아서

     

    윈도우10의 순정스러운 느낌(?)의 버튼을 구현하고 싶었습니다.

댓글 달기

서버에 요청 중입니다. 잠시만 기다려 주십시오...