Viktor1703
AutoIT Гуру
- Сообщения
- 1,535
- Репутация
- 413
Скриншот:
Код:
Архив:
Contact List
Код:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <APIConstants.au3>
#include <WinAPIEx.au3>
Opt('GUIDataSeparatorChar', '|')
Global Const $ODT_LISTVIEW = 102
Global Const $ODA_DRAWENTIRE = 0x1
Global Const $ODS_SELECTED = 0x0001
$hForm = GUICreate('Contact list', 330, 430)
GUIRegisterMsg($WM_MEASUREITEM, 'WndProc')
GUIRegisterMsg($WM_DRAWITEM, 'WndProc')
$iList = GUICtrlCreateListView('', 0, 0, 330, 430, BitOR($LVS_NOCOLUMNHEADER, $LVS_OWNERDRAWFIXED, $LVS_SHOWSELALWAYS, $LVS_AUTOARRANGE, $LVS_SINGLESEL))
$hList = GUICtrlGetHandle($iList)
_GUICtrlListView_SetExtendedListViewStyle($hList, $LVS_EX_DOUBLEBUFFER)
_GUICtrlListView_AddColumn($hList, '', 305)
For $i = 0 To 10
_GUICtrlListView_SetItemParam($hList, _GUICtrlListView_AddItem($hList, 'Иванов Иван Иванович|2x2=5'), Random(0, 1, 1))
_GUICtrlListView_SetItemParam($hList, _GUICtrlListView_AddItem($hList, 'Mauris|Tel. +7 (961) 483-01-34'), Random(0, 1, 1))
_GUICtrlListView_SetItemParam($hList, _GUICtrlListView_AddItem($hList, 'Voland|Fantaisie Software'), Random(0, 1, 1))
Next
GUISetState()
While 1
Switch GUIGetMsg()
Case -3
Exit
EndSwitch
WEnd
Func WndProc($hWnd, $iMsg, $wParam, $lParam)
Local $iTxtCol, $iTexSta, $hImage
Switch $hWnd
Case $hForm
Switch $iMsg
Case $WM_MEASUREITEM
Local $tMEASUREITEMS = DllStructCreate('uint cType;uint cID;uint itmID;uint itmW;uint itmH;ulong_ptr itmData', $lParam)
If DllStructGetData($tMEASUREITEMS, 'cType') <> $ODT_LISTVIEW Then
Return 0
EndIf
DllStructSetData($tMEASUREITEMS, 'itmH', 40)
Case $WM_DRAWITEM
Local $tDRAWITEMSTRUCT = DllStructCreate('uint cType;uint cID;uint itmID;uint itmAction;uint itmState;hwnd hItm;handle hDC;long itmRect[4];ulong_ptr itmData', $lParam)
If (DllStructGetData($tDRAWITEMSTRUCT, 'cType') <> $ODT_LISTVIEW) Then
Return 0
EndIf
Local $cID = DllStructGetData($tDRAWITEMSTRUCT, "cID")
Local $itmID = DllStructGetData($tDRAWITEMSTRUCT, "itmID")
Local $itmAction = DllStructGetData($tDRAWITEMSTRUCT, "itmAction")
Local $itmState = DllStructGetData($tDRAWITEMSTRUCT, "itmState")
Local $hItm = DllStructGetData($tDRAWITEMSTRUCT, "hItm")
Local $hDC = DllStructGetData($tDRAWITEMSTRUCT, "hDC")
Switch $cID
Case $iList
Switch $itmAction
Case $ODA_DRAWENTIRE
If (Not BitAND($itmState, $ODS_SELECTED)) Then
$iTxtCol = 0x000000 ;~ Цвет верхнего текста, если пункт не выбран
$iTexSta = 0x848484 ;~ Цвет нижнего текста, если пункт не выбран
Else
$iTxtCol = 0xFEFEFE ;~ Цвет верхнего текста, если пункт выбран
$iTexSta = 0xFEFEFE ;~ Цвет нижнего текста, если пункт выбран
$hBrush = _WinAPI_CreateSolidBrush(0xFFCB93)
_WinAPI_FillRect($hDC, DllStructGetPtr($tDRAWITEMSTRUCT, 'itmRect'), $hBrush)
_WinAPI_DeleteObject($hBrush)
EndIf
Local $tRECT = DllStructCreate($tagRECT)
Local $tTEXT = DllStructCreate('wchar[4096]')
Local $tLVITEM = DllStructCreate($tagLVITEM)
DllStructSetData($tLVITEM, 'TextMax', DllStructGetSize($tTEXT))
DllStructSetData($tLVITEM, 'SubItem', 0)
DllStructSetData($tLVITEM, 'Text', DllStructGetPtr($tTEXT))
GUICtrlSendMsg($cID, $LVM_GETITEMTEXTW, $itmID, DllStructGetPtr($tLVITEM))
Local $aItemText = StringSplit(DllStructGetData($tTEXT, 1), '|', 2)
DllStructSetData($tRECT, 'Left', $LVIR_BOUNDS)
DllStructSetData($tRECT, 'Top', 0)
GUICtrlSendMsg($cID, $LVM_GETSUBITEMRECT, $itmID, DllStructGetPtr($tRECT))
Local $iLeft = DllStructGetData($tRECT, 'Left')
Local $iTop = DllStructGetData($tRECT, 'Top')
Switch $hItm
Case $hList
;~ Рисуем аватарку
_WinAPI_DrawBitmap($hDC, 4, $iTop + 4, _WinAPI_LoadImage(0, '1.bmp', 0, 0, 0, $LR_LOADFROMFILE))
;~ Рисуем статус
If _GUICtrlListView_GetItemParam($hList, $itmID) Then
$hImage = _WinAPI_LoadImage(0, '2.ico', 1, 0, 0, $LR_LOADFROMFILE)
Else
$hImage = _WinAPI_LoadImage(0, '3.ico', 1, 0, 0, $LR_LOADFROMFILE)
EndIf
_WinAPI_DrawIconEx($hDC, 46, $iTop + 5, $hImage, 16, 16)
_WinAPI_DeleteObject($hImage)
;~ Верхний текст
_WinAPI_SetTextColor($hDC, $iTxtCol)
DllStructSetData($tRECT, 1, 74)
DllStructSetData($tRECT, 2, $iTop + 5)
_WinAPI_DrawText($hDC, $aItemText[0], $tRECT, BitOR($DT_LEFT, $DT_WORDBREAK, $DT_SINGLELINE))
;~ Нижний текст
_WinAPI_SetTextColor($hDC, $iTexSta)
DllStructSetData($tRECT, 1, 74)
DllStructSetData($tRECT, 2, $iTop + 21)
_WinAPI_DrawText($hDC, $aItemText[1], $tRECT, BitOR($DT_LEFT, $DT_WORDBREAK, $DT_SINGLELINE))
EndSwitch
EndSwitch
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Архив:
Contact List