메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

리스트뷰(그리드) 생성

데브카페

툴팁 처럼 간단한 리스트뷰

  • AutoIt에서 Tooltip에 ListView와 같은 복잡한 GUI 요소를 직접 포함할 수는 없음
  • 유사한 동작을 구현하기 위해 작은 GUI 창을 툴팁처럼 보이도록 설정하고, 그 안에 ListView를 배치하는 방법을 사용할 수 있습니다.
<GUIConstantsEx.au3>
#include <WindowsConstants.au3>

; 메인 GUI 생성
Local $hMainGUI = GUICreate("Main GUI", 400, 300)
Local $hButton = GUICtrlCreateButton("Show Tooltip", 150, 130, 100, 30)

; Tooltip GUI 생성 (숨김 상태로 시작)
Local $hTooltipGUI = GUICreate("", 200, 150, 0, 0, $WS_POPUP, $WS_EX_TOPMOST + $WS_EX_TOOLWINDOW)
Local $hListView = GUICtrlCreateListView("Column 1|Column 2|Column 3", 0, 0, 200, 150)
GUICtrlSetData($hListView, "Item 1|Data 1|Value 1")
GUICtrlSetData($hListView, "Item 2|Data 2|Value 2")

; 메인 GUI 표시
GUISetState(@SW_SHOW, $hMainGUI)

; 메시지 루프
While True
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop

        Case $hButton
            ; 버튼 클릭 시 Tooltip GUI 표시
            Local $aMousePos = MouseGetPos()
            WinMove($hTooltipGUI, "", $aMousePos[0] + 10, $aMousePos[1] + 20)
            GUISetState(@SW_SHOW, $hTooltipGUI)
    EndSwitch

    ; 마우스가 Tooltip GUI 외부로 나가면 숨김
    If GUIGetCursorInfo($hTooltipGUI)[4] = 0 Then
        GUISetState(@SW_HIDE, $hTooltipGUI)
    EndIf
WEnd

GUIDelete($hMainGUI)
GUIDelete($hTooltipGUI)
Exit


assignment 코드 설명
  1. 메인 GUI 생성:
    1. GUICreate로 기본 창을 생성합니다.
    2. 버튼을 추가하여 툴팁처럼 보이는 ListView를 표시할 트리거로 사용합니다.
  2. Tooltip GUI 생성:
    1. GUICreate를 사용하여 작은 팝업 창을 생성합니다.
    2. 스타일($WS_POPUP)과 확장 스타일($WS_EX_TOPMOST + $WS_EX_TOOLWINDOW)을 사용해 툴팁처럼 보이게 설정합니다.
    3. GUICtrlCreateListView로 ListView를 추가하고 데이터를 채웁니다.
  3. 툴팁 위치 설정:
    1. MouseGetPos로 현재 마우스 위치를 가져옵니다.
    2. WinMove를 사용하여 Tooltip GUI를 마우스 위치 근처로 이동합니다.
  4. 툴팁 숨김 처리:
    1. GUIGetCursorInfo($hTooltipGUI)를 사용하여 마우스가 Tooltip GUI 밖으로 나갔는지 확인합니다.
    2. 마우스가 밖으로 나가면 GUISetState(@SW_HIDE)로 Tooltip GUI를 숨깁니다.


실행 결과

  1. 메인 GUI에 버튼이 표시됩니다.
  2. 사용자가 버튼을 클릭하면 마우스 위치 근처에 ListView가 포함된 작은 창(툴팁처럼 보이는 창)이 표시됩니다.
  3. 사용자가 마우스를 툴팁 창 외부로 이동하면 창이 자동으로 숨겨집니다.

확장 가능성

1. ListView 데이터 동적 업데이트:

  • GUICtrlSetData를 사용하여 툴팁 창이 표시될 때 데이터를 동적으로 변경할 수 있습니다.
GUICtrlSetData($hListView, "New Item 1|New Data 1|New Value 1")

2. 표시 시간 제한:

  • 툴팁 창이 일정 시간 후에 자동으로 숨겨지도록 타이머를 추가할 수 있습니다.
Sleep(3000) ; 3초 후 숨김
GUISetState(@SW_HIDE, $hTooltipGUI)

3. 사용자 정의 디자인:

  • 툴팁 창의 스타일을 변경하거나 애니메이션 효과를 추가하여 더 사용자 친화적으로 만들 수 있습니다.

이 코드는 ListView를 포함한 툴팁 스타일의 GUI를 구현하며, 다양한 UI 시나리오에 응용할 수 있습니다.


리스트뷰 최적화

  1. AutoIt에서 가장 가볍고 빠른 ListView를 구현하려면, GUI의 크기와 스타일을 최적화하고, 불필요한 옵션을 제거하는 것이 중요합니다.
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

; GUI 생성
Local $hGUI = GUICreate("Optimized ListView", 600, 400)

; 가벼운 스타일의 ListView 생성
Local $hListView = GUICtrlCreateListView("Column 1|Column 2|Column 3", 10, 10, 580, 380, _
                                         $LVS_REPORT + $LVS_NOCOLUMNHEADER + $LVS_SINGLESEL + $WS_BORDER)

; ListView에 데이터 추가
For $i = 1 To 1000 ; 1000개의 항목 추가
    GUICtrlCreateListViewItem("Item " & $i & "|Data " & $i & "|Value " & $i, $hListView)
Next

; GUI 표시
GUISetState(@SW_SHOW, $hGUI)

; 메시지 루프
While True
    If GUIGetMsg() = $GUI_EVENT_CLOSE Then ExitLoop
WEnd

GUIDelete($hGUI)
Exit


assignment 설명
  1. 최적화된 GUICtrlCreateListView 사용:
    • $LVS_REPORT: ListView를 “보고서” 스타일로 설정합니다.
    • $LVS_NOCOLUMNHEADER: 컬럼 헤더를 숨깁니다. 데이터만 표시할 때 유용하며, 렌더링 부하를 줄입니다.
    • $LVS_SINGLESEL: 단일 선택 모드를 활성화하여 다중 선택 시 발생할 수 있는 추가 리소스 소모를 방지합니다.
    • $WS_BORDER: 최소한의 경계를 추가하여 깔끔하게 보입니다.
  2. 빠른 데이터 추가:
    • GUICtrlCreateListViewItem를 사용하여 반복적으로 항목을 추가합니다.
    • 루프에서 데이터를 한 번에 추가하여 UI를 갱신하는 빈도를 줄입니다.
  3. 대용량 데이터 처리:
    • 1000개의 항목을 추가하여 성능 테스트를 수행합니다.
  4. 불필요한 기능 제거:
    • 사용하지 않는 기능(예: 아이콘, 체크박스 등)을 추가하지 않아 렌더링 성능을 최적화합니다.


최적화 팁

1. ListView 스타일 최적화:

  • $LVS_NOSORTHEADER: 컬럼 헤더를 클릭해도 정렬되지 않도록 설정하여 성능을 개선합니다.
  • $LVS_OWNERDRAWFIXED: 사용자 정의 렌더링을 추가하여 더 경량화할 수 있습니다.

2. 대량 데이터 추가 시 성능 최적화:

  • 많은 데이터를 추가하는 경우, GUICtrlSetState($GUI_DISABLE)로 업데이트 중 화면 갱신을 비활성화하고, 완료 후 다시 활성화합니다:
GUISetState(@SW_DISABLE, $hGUI)
For $i = 1 To 10000
    GUICtrlCreateListViewItem("Item " & $i & "|Data " & $i & "|Value " & $i, $hListView)
Next
GUISetState(@SW_ENABLE, $hGUI)

3. 데이터 양 제한:

  • 필요하지 않은 경우 화면에 표시되는 데이터의 양을 제한하여 렌더링 부하를 줄입니다.

4. 이벤트 핸들링 최소화:

  • 불필요한 이벤트 루프를 제거하여 ListView 업데이트 속도를 개선합니다.

Comments