Hello all
i have tried setting a listview background color but was unsuccessful
i use sendmessage command as in
' Shade those unused portions of the main ListView to greenish gray
SendMessage(hListView, LVM_SETBKCOLOR, 0,RGB(255,128,64))
the main program listing is
'====================================================================
' Listview example, nested modeless dialog. modified Nov 2 2018
'====================================================================
$ filename "ListView_64M.exe"
use rtl64
#lookahead
uses dialogs
uses O2Common
'Identifiers
#define IDD_DLG1 2000
#define IDC_LSV1 2001
' The program logo icon is obtained from the resource file
' the 1000 must corespondence to the 1000 in the rc file
#define IDI_LOGO 1000
% ICON_BIG=1
% WM_SETICON=0x80
macro ListView_InsertColumn(hwnd,iCol,pcol) (SendMessage(hwnd, LVM_INSERTCOLUMN, iCol, pcol))
macro ListView_SetColumnWidth(hwnd,iCol,cx) (SendMessage(hwnd, LVM_SETCOLUMNWIDTH, iCol, cx))
macro ListView_InsertItem(hwnd,pitem) (SendMessage(hwnd, LVM_INSERTITEM,0, pitem))
macro ListView_SetItem(hwnd,pitem) (SendMessage(hwnd, LVM_SETITEM,0, pitem))
% DS_CENTER=0x0800
% DS_MODALFRAME=0x80
% SS_CENTERIMAGE=0x200
% LVS_LIST 0x0003
% LVS_REPORT 0x0001
% LVS_EX_GRIDLINES 1
% LVS_EX_CHECKBOXES 4
% LVS_EX_FULLROWSELECT 0x0020
% LVS_SINGLESEL = 0x0004
% LVS_EX_DOUBLEBUFFER = 0x0010000
% LVSCW_AUTOSIZE -1
% LVSCW_AUTOSIZE_USEHEADER -2
% LVM_INSERTCOLUMN=4123
% LVM_SETCOLUMNWIDTH=4126
% LVM_INSERTITEM=4103
% LVM_SETITEM=4102
% LVCF_FMT 1
% LVCF_WIDTH 2
% LVCF_TEXT=4
% LVCF_SUBITEM 8
% LVCF_ORDER = 20
% LVIF_TEXT=1
% LVM_SETEXTENDEDLISTVIEWSTYLE 0x1036
% LVN_COLUMNCLICK = -108
% LVN_ITEMCHANGED = -101
% LR_LOADFROMFILE=0x0010
% IMAGE_ICON=1
% STM_SETIMAGE=0x172
% SWP_NOZORDER=4
% LVM_FIRST = 1000
% LVM_SETBKCOLOR = (LVM_FIRST + 1)
% CLR_NONE = &HFFFFFFFF&
type LVCOLUMN
uint mask
int fmt
int cx
char* pszText
int cchTextMax
int iSubItem
int iImage
int iOrder
int cxMin
int cxDefault
int cxIdeal
end type
typedef LVCOLUMN LV_COLUMN
type LVITEM
uint mask
int iItem
int iSubItem
uint state
uint stateMask
char* pszText
int cchTextMax
int iImage // index of the list view item's icon
sys lParam // 32-bit value to associate with item
int iIndent
int iGroupId
uint cColumns
uint *puColumns
int *piColFmt
int iGroup
end type
typedef LVITEM LV_ITEM
' Number of rows in the ListView
% LVROWS = 200
' Number of columns in the ListView meaning 3 +1 = 4 columns
% LVCOLS = 3
! GetDlgItem lib "user32.dll" (sys hDlg, int nIDDlgItem) as sys
! IsDialogMessage lib "user32.dll" alias"IsDialogMessageA" (sys hDlg, sys lpMsg) as bool
! IsWindow lib "user32.dll" (sys hWnd) as bool
' Handle for the Main Dialog
sys hDlg
init_common_controls()
'====================================================================
' Main callback function
Function DlgProc( hDlg,uint uMsg, sys wParam, lParam ) as sys callback
int i , j
string txtStr
' Handle for the ListView
sys hListview = GetDlgItem(hDlg, IDC_LSV1)
LV_COLUMN lvc
LV_ITEM lvi
select case uMsg
case WM_INITDIALOG
' display the program icon
sys hInstance = GetModuleHandle(NULL)
sys hIcon = LoadIcon(hInstance, IDI_Logo)
'Set Icon to Main Window
SendMessage(hDlg, WM_SETICON, ICON_BIG, hIcon)
'Setup the ListView Column Headers
' The first column must have a wider width to accomodate the checkbox
lvc.mask = LVCF_WIDTH or LVCF_ORDER
' Need to add some blanks behind the header string label
' inorder to get a wider column
txtStr="Column #" & str(1) + " "
lvc.pszText = txtStr
lvc.iorder = 0
ListView_InsertColumn(hListview, 0, &lvc)
' All the other columns to have a narrower width
For i = 1 To LVCOLS
lvc.mask = LVCF_FMT OR LVCF_WIDTH OR LVCF_TEXT OR LVCF_SUBITEM
If i = LVCOLS then
' Leave the last column header blank as we are NOT putting data
' into this last column
txtStr = ""
Else
txtStr="Column #" & str(i+1)
txtStr = Trim(txtStr)
End if
lvc.pszText = txtStr
lvc.iorder = i
ListView_InsertColumn(hListview, i, &lvc)
Next i
' Setup the Listview data Rows
For i=1 To LVROWS
'First column
lvi.mask = LVIF_TEXT
txtStr = "Row #" & str(200-i+1) ", Col # 1"
lvi.pszText = txtStr
lvi.iSubItem = 0
ListView_InsertItem(hListview, &lvi)
'Remaining columns
for j=2 to LVCOLS
txtStr = "Row #" & str(200-i+1) ", Col # " & str(j)
lvi.pszText = txtStr
lvi.iSubItem = j-1
ListView_SetItem(hListview, &lvi)
next j
Next i
' Set the column widths according to width of each column header
for i = 0 to LVCOLS
ListView_SetColumnWidth(hListview,i,LVSCW_AUTOSIZE_USEHEADER)
next i
' Place in the extended style for the listview
SendMessage(hListview, LVM_SETEXTENDEDLISTVIEWSTYLE, 0,
LVS_EX_FULLROWSELECT or LVS_EX_CHECKBOXES or LVS_EX_GRIDLINES )
' Shade those unused portions of the main ListView to greenish gray
SendMessage(hListView, LVM_SETBKCOLOR, 0,RGB(255,128,64))
case WM_COMMAND
select case loword(wParam)
case IDCANCEL
' exit
DestroyWindow( hDlg )
end select
case WM_NOTIFY
NMHDR pnm at lParam
if pnm.hwndFrom = hListview then
'ListView
select case pnm.code
case LVN_COLUMNCLICK
mbox "LVN_COLUMNCLICK"
case LVN_ITEMCHANGED
end select
end if
case WM_SIZE
RECT rcClient
// Calculate remaining height and size edit
GetClientRect(hDlg, &rcClient)
SetWindowPos(hListview, NULL, 0, rcClient.top, rcClient.right, rcClient.bottom, SWP_NOZORDER)
case WM_CLOSE
DestroyWindow( hDlg )
case WM_DESTROY
PostQuitMessage( null )
end select
return 0
end function
'====================================================================
' Display the Main Dialog
Function DispMainDialog
sys lpdt
MSG wMsg
dyn::init(lpdt)
Dialog( 1, 10,10,380,250, "Listview example 64bits ", lpdt,
WS_OVERLAPPEDWINDOW or DS_CENTER or WS_VISIBLE,
8,"MS Sans Serif" )
' Add in the listview
CONTROL "",IDC_LSV1,"SysListView32", _
WS_VISIBLE or WS_TABSTOP or WS_BORDER or LVS_REPORT or LVS_SINGLESEL or LVS_EX_DOUBLEBUFFER , _
10,10,233,100, WS_EX_CLIENTEDGE
' WS_CHILDWINDOW or
hDlg = CreateModelessDialog( 0, @DlgProc, 0, lpdt )
while GetMessage( @wMsg, null, 0, 0 ) <> 0
if IsDialogMessage( hDlg, @wMsg ) = 0 then
TranslateMessage( @wMsg )
DispatchMessage( @wMsg )
end if
wend
End Function
'------------------------------------
' Start of program
DispMainDialog
and that of O2common.inc is as below
' O2common.inc
' These are the commonly use functions and macros
' Updated : Nov 3 2018
uses Corewin
' Background color for main window
int MainWindBGColor
' Trim function
def Trim ltrim(rtrim(%1))
'===============================
' for displaying the RGB colors
Function RGB(sys red,green,blue) as sys
sys color
color = red
color = color + green*256
color = color + blue*65536
Return color
End Function
'========================================
' draws with color gradient
SUB DrawGradient (BYVAL hDC AS DWORD)
LOCAL rectFill AS RECT, rectClient AS RECT, fStep AS SINGLE
local hBrush AS DWORD, lOnBand AS LONG
GetClientRect WindowFromDC(hDC), rectClient
fStep = rectClient.bottom / 75
FOR lOnBand = 0 TO 50 ' 199
SetRect rectFill, 0, lOnBand * fStep, rectClient.right + 1, (lOnBand + 1) * fStep
' paint the background -- change the first 2 colors R and G
' to vary the color gradient
Select case MainWindBGColor
Case 1
' this gives a light yellow background
hBrush = CreateSolidBrush(rgb(255, 255, 205 - lOnBand))
Case 2
' this gives a cyan background
hBrush = CreateSolidBrush(rgb(0, 248, 255 - lOnBand))
Case 3
' this gives a light green background
hBrush = CreateSolidBrush(rgb(155, 250, 147 - lOnBand))
End Select
Fillrect hDC, rectFill, hBrush
DeleteObject hBrush
NEXT
END SUB
thanxx in advance of your help
maybe a simple solution this?
Never mind i finally got it out