Click here to Skip to main content
16,017,297 members
Please Sign up or sign in to vote.
1.00/5 (2 votes)
See more:
C++
// NBtq2Dlg.cpp : implementation file

#include "stdafx.h"
#include "NBtq2.h"
#include "NBtq2Dlg.h"
#include ".\NBtq2Dlg.h"
//#include "Secondbtq.h"
#include "DlgProxy.h"
#include "SourceDeclaration.h"
#include "afxwin.h"
#include "WinDef.h"
#include "LVCustDraw.h"
#include "Wizar.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// CAboutDlg dialog used for App About


class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:
	DECLARE_MESSAGE_MAP()
};


CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()

// CNBtq2Dlg dialog

IMPLEMENT_DYNAMIC(CNBtq2Dlg, CDialog);

CNBtq2Dlg::CNBtq2Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CNBtq2Dlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_pAutoProxy = NULL;
}

CNBtq2Dlg::~CNBtq2Dlg()
{
	// If there is an automation proxy for this dialog, set
	//  its back pointer to this dialog to NULL, so it knows
	//  the dialog has been deleted.
	if (m_pAutoProxy != NULL)
		m_pAutoProxy->m_pDialog = NULL;
}

void CNBtq2Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST1, m_ctlListView);
	
}

BEGIN_MESSAGE_MAP(CNBtq2Dlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_CLOSE()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &CNBtq2Dlg::OnLvnItemchangedList1)
	
	ON_BN_CLICKED(IDCANCEL, &CNBtq2Dlg::OnBnClickedCancel)
	ON_BN_CLICKED(IDOK, &CNBtq2Dlg::OnBnClickedOk)
	ON_BN_CLICKED(IDC_BUTTON3, &CNBtq2Dlg::OnBnClickedButton3)
END_MESSAGE_MAP()


// CNBtq2Dlg message handlers

BOOL CNBtq2Dlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	// TODO: Add extra initialization here
	 
	COLORREF a=100,b=175;
		 
	  m_ctlListView.InsertColumn(0, _T(" PART NO   "), LVCFMT_LEFT, 100);
	  m_ctlListView.InsertColumn(1, _T(" DESCRIPTION      "), LVCFMT_LEFT, 140);
	  m_ctlListView.InsertColumn(2, _T("                  "), LVCFMT_RIGHT, 0);
      
	
	// Insert data into list-control by copying from datamodel
	    static CString text[6][3]= {
    _T ("P1"),  _T ("D1"),  _T("G1"),
	_T ("P2"),  _T ("D2"),  _T("G1"),
	_T ("P3"),  _T ("D3"),  _T("G2"),
    _T ("P4"),  _T ("D4"),  _T("G2"), 
	_T ("P5"),  _T ("D5"),  _T("G3"),
	_T ("P6"),  _T ("D6"),  _T("G3")
		};
     
		bool TurnOn =1;

        m_ctlListView.SetExtendedStyle(LVS_EX_FULLROWSELECT);

		
      for (int i=0; i<6; i++) 
	   {

	   
       m_ctlListView.InsertItem  (i, text[i][0]);
	  	  	  
	   m_ctlListView.SetItemText (i, 1, text[i][1]);
	  
       m_ctlListView.SetItemText (i, 2, text[i][2]);     
	   
	   
	  }
   	   m_ctlListView.GroupByColumn(2);
	   
	   m_ctlListView.CollapseAllGroups();
	 
	   return TRUE;  // return TRUE  unless you set the focus to a control
}

void CNBtq2Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CNBtq2Dlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<wparam>(dc.GetSafeHdc()), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this function to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CNBtq2Dlg::OnQueryDragIcon()
{
	return static_cast<hcursor>(m_hIcon);
}

// Automation servers should not exit when a user closes the UI
//  if a controller still holds on to one of its objects.  These
//  message handlers make sure that if the proxy is still in use,
//  then the UI is hidden but the dialog remains around if it
//  is dismissed.

void CNBtq2Dlg::OnClose()
{
	
	if (CanExit())
		CDialog::OnClose();
}

void CNBtq2Dlg::OnOK()
{
	if (CanExit())
		CDialog::OnOK();
}

void CNBtq2Dlg::OnCancel()
{
	if (CanExit())
		CDialog::OnCancel();
	
}

BOOL CNBtq2Dlg::CanExit()
{
	// If the proxy object is still around, then the automation
	//  controller is still holding on to this application.  Leave
	//  the dialog around, but hide its UI.
	if (m_pAutoProxy != NULL)
	{
		ShowWindow(SW_HIDE);
		return FALSE;
	}

	return TRUE;
}


void CNBtq2Dlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<lpnmlistview>(pNMHDR);
	// TODO: Add your control notification handler code here
	*pResult = 0;
}




/////////////////////////////////////////////////////////////////////////////
// CLVCustomDrawApp

BEGIN_MESSAGE_MAP(CLVCustomDrawApp, CWinApp)
	//{{AFX_MSG_MAP(CLVCustomDrawApp)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG
	ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLVCustomDrawApp construction

CLVCustomDrawApp::CLVCustomDrawApp()
{
	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CLVCustomDrawApp object

//CLVCustomDrawApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CLVCustomDrawApp initialization

BOOL CLVCustomDrawApp::InitInstance()
{
	// Standard initialization
	// If you are not using these features and wish to reduce the size
	//  of your final executable, you should remove from the following
	//  the specific initialization routines you do not need.

	CWizard dlg ( _T("") );
	m_pMainWnd = &dlg;
	int nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with OK
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with Cancel
	}

	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return FALSE;
}
void CNBtq2Dlg::OnBnClickedCancel()
{
	// TODO: Add your control notification handler code here
	OnCancel();
}



void CNBtq2Dlg::OnBnClickedOk()
{
	// TODO: Add your control notification handler code here
	OnOK();
}

void CNBtq2Dlg::OnBnClickedButton3()
{
	// TODO: Add your control notification handler code here

    CNBtq2Dlg dlg;

	dlg.DoModal();

  

}
	#include "stdafx.h"
	#include "SourceDeclaration.h"
	#include <shlwapi.h>
	#include <stdio.h>
    #include "resource.h"


	#ifdef _DEBUG
	#define new DEBUG_NEW
	#undef THIS_FILE
	static char THIS_FILE[] = __FILE__;
	#endif
	//#include "CListCtrl_Category_Groups.h"
	BEGIN_MESSAGE_MAP(CnList, CListCtrl)
			// Column Click
	#if _WIN32_WINNT >= 0x0600
		//ON_NOTIFY_REFLECT_EX(LVN_LINKCLICK, OnGroupTaskClick)	// Column Click
	#endif
	END_MESSAGE_MAP()

	namespace {
		LRESULT EnableWindowTheme(HWND hwnd, LPCWSTR classList, LPCWSTR subApp, LPCWSTR idlist)
		{
			LRESULT lResult = S_FALSE;
		
			HRESULT (__stdcall *pSetWindowTheme)(HWND hwnd, LPCWSTR pszSubAppName, LPCWSTR pszSubIdList);
			HANDLE  (__stdcall *pOpenThemeData)(HWND hwnd, LPCWSTR pszClassList);
			HRESULT (__stdcall *pCloseThemeData)(HANDLE hTheme);

			HMODULE hinstDll = ::LoadLibrary(_T("UxTheme.dll"));
			if (hinstDll)
			{
				(FARPROC&)pOpenThemeData = ::GetProcAddress(hinstDll, "OpenThemeData");
				(FARPROC&)pCloseThemeData = ::GetProcAddress(hinstDll, "CloseThemeData");
				(FARPROC&)pSetWindowTheme = ::GetProcAddress(hinstDll, "SetWindowTheme");
				if (pSetWindowTheme && pOpenThemeData && pCloseThemeData)
				{
					HANDLE theme = pOpenThemeData(hwnd,classList);
					if (theme!=NULL)
					{
						VERIFY(pCloseThemeData(theme)==S_OK);
						lResult = pSetWindowTheme(hwnd, subApp, idlist);
					}
				}
				::FreeLibrary(hinstDll);
			}
			return lResult;
		}

		bool IsCommonControlsEnabled()
		{
			bool commoncontrols = false;
		
			// Test if application has access to common controls
			HMODULE hinstDll = ::LoadLibrary(_T("comctl32.dll"));
			if (hinstDll)
			{
				DLLGETVERSIONPROC pDllGetVersion = (DLLGETVERSIONPROC)::GetProcAddress(hinstDll, "DllGetVersion");
				if (pDllGetVersion != NULL)
				{
					DLLVERSIONINFO dvi = {0};
					dvi.cbSize = sizeof(dvi);
					HRESULT hRes = pDllGetVersion ((DLLVERSIONINFO *) &dvi);
					if (SUCCEEDED(hRes))
						commoncontrols = dvi.dwMajorVersion >= 6;
				}
				::FreeLibrary(hinstDll);
			}
			return commoncontrols;
		}

		bool IsThemeEnabled()
		{
			bool XPStyle = false;
			bool (__stdcall *pIsAppThemed)();
			bool (__stdcall *pIsThemeActive)();

			// Test if operating system has themes enabled
			HMODULE hinstDll = ::LoadLibrary(_T("UxTheme.dll"));
			if (hinstDll)
			{
				(FARPROC&)pIsAppThemed = ::GetProcAddress(hinstDll, "IsAppThemed");
				(FARPROC&)pIsThemeActive = ::GetProcAddress(hinstDll,"IsThemeActive");
				if (pIsAppThemed != NULL && pIsThemeActive != NULL)
				{
					if (pIsAppThemed() && pIsThemeActive())
					{
						// Test if application has themes enabled by loading the proper DLL
						XPStyle = IsCommonControlsEnabled();
					}
				}
				::FreeLibrary(hinstDll);
			}
			return XPStyle;
		}
	}

	LRESULT CnList::InsertGroupHeader(int nIndex, int nGroupId, const CString& strHeader, DWORD dwState /* = LVGS_NORMAL */, DWORD dwAlign /*= LVGA_HEADER_LEFT*/)
	{
		LVGROUP lg = {0};
		lg.cbSize = sizeof(lg);
		lg.iGroupId = nGroupId;
		lg.state = dwState;
		lg.mask = LVGF_GROUPID | LVGF_HEADER | LVGF_STATE | LVGF_ALIGN;
		lg.uAlign = dwAlign;

		// Header-title must be unicode (Convert if necessary)
	#ifdef UNICODE
		lg.pszHeader = (LPWSTR)(LPCTSTR)strHeader;
		lg.cchHeader = strHeader.GetLength();
	#else
		CComBSTR header = strHeader;
		lg.pszHeader = header;
		lg.cchHeader = header.Length();
	#endif

		return InsertGroup(nIndex, (PLVGROUP)&lg );
	}
	BOOL CnList::SetRowGroupId(int nRow, int nGroupId)
	{
		//OBS! Rows not assigned to a group will not show in group-view
		LVITEM lvItem = {0};
		lvItem.mask = LVIF_GROUPID;
		lvItem.iItem = nRow;
		lvItem.iSubItem = 0;
		lvItem.iGroupId = nGroupId;
		return SetItem( &lvItem );
	}
	int CnList::GetRowGroupId(int nRow)
	{
		LVITEM lvi = {0};
		lvi.mask = LVIF_GROUPID;
		lvi.iItem = nRow;
		VERIFY( GetItem(&lvi) );
		return lvi.iGroupId;
	}

	BOOL CnList::GroupByColumn(int nCol)
	{
		if (!IsCommonControlsEnabled())
			return FALSE;

		CWaitCursor waitCursor;

		//SetSortArrow(-1, false);

		SetRedraw(FALSE);

		RemoveAllGroups();

		EnableGroupView( GetItemCount() > 0 );

		if (IsGroupViewEnabled())
		{
			CSimpleMap<cstring,csimplearray><int> > groups;

			// Loop through all rows and find possible groups
			for(int nRow=0; nRow<getitemcount();>			{
				CString cellText = GetItemText(nRow, nCol);

				int nGroupId = groups.FindKey(cellText);
				if (nGroupId==-1)
				{
					CSimpleArray<int> rows;
					groups.Add(cellText, rows);
					nGroupId = groups.FindKey(cellText);
				}
				groups.GetValueAt(nGroupId).Add(nRow);
			}

			// Look through all groups and assign rows to group

			for(int nGroupId = 0; nGroupId < groups.GetSize(); ++nGroupId)
			{
				const CSimpleArray<int>& groupRows = groups.GetValueAt(nGroupId);
				DWORD dwState = LVGS_NORMAL;

	#ifdef LVGS_COLLAPSIBLE
				if (IsGroupStateEnabled())
					dwState = LVGS_COLLAPSIBLE;
	#endif

					VERIFY( InsertGroupHeader(nGroupId, nGroupId, groups.GetKeyAt(nGroupId), dwState) != -1);
				
				for(int groupRow = 0; groupRow < groupRows.GetSize(); ++groupRow)
				{
					VERIFY( SetRowGroupId(groupRows[groupRow], nGroupId) );
				}
			}
			SetRedraw(TRUE);
			Invalidate(FALSE);
			return TRUE;
		}

		SetRedraw(TRUE);
		Invalidate(FALSE);
		return FALSE;
	}	

	namespace {
		struct PARAMSORT
		{
			PARAMSORT(HWND hWnd, int nCol, bool bAscending)
				:m_hWnd(hWnd)
				,m_ColumnIndex(nCol)
				,m_Ascending(bAscending)
			{}

			HWND m_hWnd;
			int  m_ColumnIndex;
			bool m_Ascending;
			CSimpleMap<int,cstring> m_GroupNames;

			const CString& LookupGroupName(int nGroupId)
			{
				int groupIdx = m_GroupNames.FindKey(nGroupId);
				if (groupIdx==-1)
				{
					static const CString emptyStr;
					return emptyStr;
				}			
				return m_GroupNames.GetValueAt(groupIdx);
			}
		};


		int CALLBACK SortFuncGroup(int nLeftId, int nRightId, void* lParamSort)
		{
			PARAMSORT& ps = *(PARAMSORT*)lParamSort;

			const CString& left = ps.LookupGroupName(nLeftId);
			const CString& right = ps.LookupGroupName(nRightId);

			if (ps.m_Ascending)
				return _tcscmp( left, right );
			else
				return _tcscmp( right, left );	
		}
	}
	void CnList::PreSubclassWindow()
	{
		CListCtrl::PreSubclassWindow();

		// Focus retangle is not painted properly without double-buffering
	#if (_WIN32_WINNT >= 0x501)
		SetExtendedStyle(LVS_EX_DOUBLEBUFFER | GetExtendedStyle());
	#endif
		SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT);
		SetExtendedStyle(GetExtendedStyle() | LVS_EX_HEADERDRAGDROP);
		SetExtendedStyle(GetExtendedStyle() | LVS_EX_GRIDLINES);
		
		// Enable Vista-look if possible
		EnableWindowTheme(GetSafeHwnd(), L"ListView", L"Explorer", NULL);
	}
	BOOL CnList::IsGroupStateEnabled()
	{
		if (!IsGroupViewEnabled())
			return FALSE;

		OSVERSIONINFO osver = {0};
		osver.dwOSVersionInfoSize = sizeof(osver);
		GetVersionEx(&osver);
		WORD fullver = MAKEWORD(osver.dwMinorVersion, osver.dwMajorVersion);
		if (fullver < 0x0600)
			return FALSE;

		return TRUE;
	}
	BOOL CnList::SetGroupTitleImage(int nGroupID, int nImage, const CString& topDesc, const CString& bottomDesc)
	{
		if (!IsGroupStateEnabled())
			return FALSE;

	#if _WIN32_WINNT >= 0x0600
		LVGROUP lg = {0};
		lg.cbSize = sizeof(lg);
		lg.mask = LVGF_TITLEIMAGE;
		lg.iTitleImage = nImage;	// Index of the title image in the control imagelist.

	#ifdef UNICODE
		if (!topDesc.IsEmpty())
		{
			// Top description is drawn opposite the title image when there is
			// a title image, no extended image, and uAlign==LVGA_HEADER_CENTER.
			lg.mask |= LVGF_DESCRIPTIONTOP;
		//	lg.pszDescriptionTop = (LPWSTR)(LPCTSTR)topDesc;
			lg.cchDescriptionTop = topDesc.GetLength();
		}
		if (!bottomDesc.IsEmpty())
		{
			// Bottom description is drawn under the top description text when there is
			// a title image, no extended image, and uAlign==LVGA_HEADER_CENTER.
			lg.mask |= LVGF_DESCRIPTIONBOTTOM;
			lg.pszDescriptionBottom = (LPWSTR)(LPCTSTR)bottomDesc;
			lg.cchDescriptionBottom = bottomDesc.GetLength();
		}
	#else
		CComBSTR bstrTopDesc = topDesc;
		CComBSTR bstrBottomDesc = bottomDesc;
		if (!topDesc.IsEmpty())
		{
			lg.mask |= LVGF_DESCRIPTIONTOP;
			lg.pszDescriptionTop = bstrTopDesc;
			lg.cchDescriptionTop = bstrTopDesc.Length();
		}
		if (!bottomDesc.IsEmpty())
		{
			lg.mask |= LVGF_DESCRIPTIONBOTTOM;
			lg.pszDescriptionBottom = bstrBottomDesc;
			lg.cchDescriptionBottom = bstrBottomDesc.Length();
		}
	#endif

		if (SetGroupInfo(nGroupID, (PLVGROUP)&lg)==-1)
			return FALSE;

		return TRUE;
	#else
		return FALSE;
	#endif
	}
	
	BOOL CnList::OnEraseBkgnd(CDC* pDC) 
	{
		// TODO: Add your message handler code here and/or call default
		
	  CRect rect;
	  CnList::GetClientRect(rect);

	  POINT mypoint;  
	  
	  CBrush brush0(m_colRow1);
	  CBrush brush1(m_colRow2);

	 int chunk_height=GetCountPerPage();
	 pDC->FillRect(&rect,&brush1);

	 for (int i=0;i<=chunk_height;i++)
	 {
			
		
		GetItemPosition(i,&mypoint);
		rect.top=mypoint.y ;
		GetItemPosition(i+1,&mypoint);
		rect.bottom =mypoint.y;
		pDC->FillRect(&rect,i %2 ? &brush1 : &brush0);


	 }

	  brush0.DeleteObject();
	  brush1.DeleteObject();

	  return FALSE;
	}
void CnList::CollapseAllGroups()
{
	if (!IsGroupStateEnabled())
		return;

	// Loop through all rows and find possible groups
	for(int nRow=0; nRow<getitemcount();>	{
		int nGroupId = GetRowGroupId(nRow);
		if (nGroupId!=-1)
		{
			if (!HasGroupState(nGroupId,LVGS_COLLAPSED))
			{
				SetGroupState(nGroupId,LVGS_COLLAPSED);
			}
		}
	}
}
BOOL CnList::SetGroupState(int nGroupId, DWORD dwState)
{
	if (!IsGroupStateEnabled())
		return FALSE;

	LVGROUP lg = {0};
	lg.cbSize = sizeof(lg);
	lg.mask = LVGF_STATE;
	lg.state = dwState;
	lg.stateMask = dwState;

#ifdef LVGS_COLLAPSIBLE
	// Maintain LVGS_COLLAPSIBLE state
	if (HasGroupState(nGroupId, LVGS_COLLAPSIBLE))
		lg.state |= LVGS_COLLAPSIBLE;
#endif

	if (SetGroupInfo(nGroupId, (PLVGROUP)&lg)==-1)
		return FALSE;

	return TRUE;
}
BOOL CnList::HasGroupState(int nGroupId, DWORD dwState)
{
	LVGROUP lg = {0};
	lg.cbSize = sizeof(lg);
	lg.mask = LVGF_STATE;
	lg.stateMask = dwState;
	if ( GetGroupInfo(nGroupId, (PLVGROUP)&lg) == -1)
		return FALSE;

	return lg.state==dwState;
}
void CnList::CustDraw( NMHDR * pNMHDR, LRESULT * pResult )
{
	  LPNMCUSTOMDRAW pNMCD = reinterpret_cast<lpnmcustomdraw>(pNMHDR);
	NMTVCUSTOMDRAW* pLVCD = reinterpret_cast<nmtvcustomdraw>( pNMHDR );
	switch( pNMCD->dwDrawStage )
	{
	case CDDS_PREPAINT:
		// Item prepaint notification.
		*pResult= CDRF_NOTIFYITEMDRAW;
		break;
	case CDDS_ITEMPREPAINT:
		{
			if( ( CDIS_SELECTED == ( pNMCD->uItemState & CDIS_SELECTED )))
			{
				pNMCD->uItemState = CDIS_DEFAULT;
				pLVCD->clrText   =  mForeColor;
				pLVCD->clrTextBk =  mBkColor;
			}
			else
			{
				COLORREF crText = RGB(0,0,0);
				COLORREF mBkColor = RGB(255,255,0);

				if ((pLVCD->nmcd.dwItemSpec %2) == 0) // even lines
				{
					crText = RGB(0,0,0);
					mBkColor = RGB(0,255,255);
				}
				pLVCD->clrText = crText;
				pLVCD->clrTextBk =  mBkColor;
			}
		}
		break;

	default:
		*pResult = CDRF_DODEFAULT;
		break;
	}
  
}
IMPLEMENT_DYNAMIC(MyList, CListCtrl)

MyList::MyList():mBkColor(RGB(255,0,255)),
				 mForeColor(RGB(0,255,255))
{

}

MyList::~MyList()
{
}


BEGIN_MESSAGE_MAP(MyList, CListCtrl)
	ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnNMCustomdraw)
END_MESSAGE_MAP()


// MyList message handlers



void MyList::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<lpnmcustomdraw>(pNMHDR);
	NMTVCUSTOMDRAW* pLVCD = reinterpret_cast<nmtvcustomdraw>( pNMHDR );
	switch( pNMCD->dwDrawStage )
	{
	case CDDS_PREPAINT:
		// Item prepaint notification.
		*pResult= CDRF_NOTIFYITEMDRAW;
		break;
	case CDDS_ITEMPREPAINT:
		{
			if( ( CDIS_SELECTED == ( pNMCD->uItemState & CDIS_SELECTED )))
			{
				pNMCD->uItemState = CDIS_DEFAULT;
				pLVCD->clrText   =  mForeColor;
				pLVCD->clrTextBk =  mBkColor;
			}
			else
			{
				COLORREF crText = RGB(0,0,0);
				COLORREF mBkColor = RGB(255,255,0);

				if ((pLVCD->nmcd.dwItemSpec %2) == 0) // even lines
				{
					crText = RGB(0,0,0);
					mBkColor = RGB(0,255,255);
				}
				pLVCD->clrText = crText;
				pLVCD->clrTextBk =  mBkColor;
			}
		}
		break;

	default:
		*pResult = CDRF_DODEFAULT;
		break;
	}
}
Posted
Updated 3-Jul-13 23:33pm
v2
Comments
nv3 4-Jul-13 5:35am    
What have you tried? Just throwing a chunk of code at us will probably not get you much of help. For a start, consult the MSDN documentation.
Maximilien 4-Jul-13 6:44am    
Hve you tried the "wizard" mode of a property sheet (http://msdn.microsoft.com/en-us/library/d3fkt014(v=vs.71).aspx)

1 solution

You can't (easily) do this in a dialog. Have a look at the sample code for MFC Property pages and property sheets. The Property page is a parent page, and the property sheets are each of the pages that you navigate to with the nav buttons.

Property Sheet link[^]

Example link[^]
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900