Bonjour je n'arrive pas à adapter mon code en fonction de cet exemple situé à cette adresse :
[ Lien ]
Je voudrais avoir chaque curseur d'une couleur différente et également la ligne de couleur associée au curseur comme dans l'exemple (TrackT1). J'ai essayé de le faire mais je rencontre un problème avec SetColor, pouvez-vous m'aider? Merci.
Mon code :
// Dlg_Demo_Slider.cpp : implementation file
//
#include "stdafx.h"
#include "SliderMultiple.h"
#include "Dlg_Demo_Slider.h"
#include "Utilitaire.h"
#include "XSliderCtrl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int * heure_coupure;
/////////////////////////////////////////////////////////////////////////////
// CDlg_Demo_Slider dialog
CDlg_Demo_Slider::CDlg_Demo_Slider(CWnd* pParent /*=NULL*/)
: CDialog(CDlg_Demo_Slider::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlg_Demo_Slider)
m_SliderValue = _T("");
m_strHeure = _T("");
//}}AFX_DATA_INIT
}
void CDlg_Demo_Slider::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlg_Demo_Slider)
DDX_Control(pDX, IDC_STATICHEURE, m_StaticHeure);
DDX_Control(pDX, IDOK, m_OK);
DDX_Text(pDX, IDC_STATICHEURE, m_strHeure);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlg_Demo_Slider, CDialog)
//{{AFX_MSG_MAP(CDlg_Demo_Slider)
ON_BN_CLICKED(IDC_BUTTON1, OnMoins)
ON_BN_CLICKED(IDC_BUTTON2, OnPlus)
//ON_WM_HSCROLL(OnHScroll)
//}}AFX_MSG_MAP
ON_WM_HELPINFO()
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlg_Demo_Slider message handlers
BOOL CDlg_Demo_Slider::OnInitDialog()
{
CDialog::OnInitDialog();
CString strTemp;
m_hTable = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(ID_DEMO_DEMO )); // charger les raccourcis clavier propre a la boite de dialogue .
if(nb_slider-7>0)
largeur_dyna=nb_slider-7; // Variable permettant de redimensionner la largueur de la plupart des contrôles
else
largeur_dyna=0;
m_parametres= m_OK.GetParent();
nb_slider=6;
strTemp.Format("%d", nb_slider);
SetDlgItemText(IDC_NBSLIDER,strTemp);
affich_slider();
UpdateData(FALSE);
//pTool = new CToolTipCtrl();
//pTool->Create(this,TTS_ALWAYSTIP|TTF_TRACK|TTF_ABSOLUTE|TTF_IDISHWND );
//pTool->Create(this, TTF_TRACK|TTF_ABSOLUTE|TTF_IDISHWND );
return TRUE;
}
/***************************************************************************
Incrémentation
****************************************************************************/
void CDlg_Demo_Slider::OnMoins()
{
libere_slider();
nb_slider--;
if (nb_slider<1) nb_slider=1;
CString strTemp;
strTemp.Format("%d", nb_slider);
SetDlgItemText(IDC_NBSLIDER,strTemp);
affich_slider();
UpdateData(FALSE);
}
/***************************************************************************
Décrémentation
****************************************************************************/
void CDlg_Demo_Slider::OnPlus()
{
libere_slider();
nb_slider++;
if (nb_slider>15) nb_slider=15;
CString strTemp;
strTemp.Format("%d", nb_slider);
SetDlgItemText(IDC_NBSLIDER,strTemp);
affich_slider();
UpdateData(FALSE);
}
/**************************************************************************
Création et Initialisation des Sliders
***************************************************************************/
void CDlg_Demo_Slider::OnOK()
{
register int i,j;
CString m_Heure;
for (j=0;j<nb_slider;j++)
{
i=(*pSliderCtrl[j]).GetPos(); //position de chaque curseur en mémoire (i)
m_Heure.Format("%02d:%02d",i/60,i%60);
}
CDialog::OnOK();
}
void CDlg_Demo_Slider::affich_slider()
{
CString strTemp;
int j;
int heure_min, heure_max;
if (!(pSliderCtrl=(CSliderCtrl**)malloc(sizeof(CSliderCtrl*)*nb_slider))) // réservation mémoire
return;
if (!(pWndHeure=(CWnd**)malloc(sizeof(CWnd*)*nb_slider))) // réservation mémoire
return;
if (!(pString=(CString**)malloc(sizeof(CString*)*nb_slider))) // réservation mémoire
return;
if (!(heure_coupure=(int*)malloc(4*nb_slider))) // réservation mémoire
return;
heure_min=1500;heure_max=0;
for (j=0;j<nb_slider;j++)
{
heure_coupure[j]=120+(240*j)/nb_slider;
if (heure_coupure[j]<heure_min)
heure_min=heure_coupure[j];
if (heure_coupure[j]>heure_max)
heure_max=heure_coupure[j];
}
for (j=0;j<nb_slider;j++)
{
RECT rect={20,20,20,20};
pSliderCtrl[j]=new CSliderCtrl();
pString[j]=new CString();
DWORD dwStyle = TBS_NOTICKS | WS_CHILD | WS_VISIBLE | WM_HSCROLL ;
(*pSliderCtrl[j]).Create(dwStyle|TBS_BOTTOM|TBS_HORZ ,rect, m_parametres,m_OK.GetDlgCtrlID()+(10000+j));
(*pSliderCtrl[j]).SetWindowPos(&m_OK,120,10+(j*20),175,20,SWP_NOZORDER);
(*pSliderCtrl[j]).SetRange(0,heure_max-heure_min+160); // tranche horaire
(*pSliderCtrl[j]).SetPos(heure_coupure[j]-heure_min+30); //retrait de chq slider pour les différencier
(*pString[j]).Format("%02d:%02d",heure_coupure[j]/60,heure_coupure[j]%60);
pWndHeure[j] = new CWnd;
pWndHeure[j]->Create(_T("STATIC"), *pString[j], WS_CHILD | WS_VISIBLE ,
CRect(300, 10+j*20, 380, 30+j*20), this, 1234);
/* pWndHeure[j]->DestroyWindow();
pWndHeure[j]->Create(_T("STATIC"), *pString[j], WS_CHILD | WS_VISIBLE,
CRect(300, 10+j*20, 380, 30+j*20), this, 1234);
*/
}
}
/********************************************************************************
Libération mémoire
********************************************************************************/
void CDlg_Demo_Slider::libere_slider()
{
CString strTemp; //variable locale
int j;
for (j=0;j<nb_slider;j++)
{
delete (pSliderCtrl[j]);
delete (pWndHeure[j]);
delete (pString[j]);
}
free (pSliderCtrl);
free (pWndHeure);
free (pString);
free(heure_coupure);
}
/*void CDlg_Demo_Slider::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
/////////
for (int j=0;j<nb_slider;j++)
{
if(GetDlgItem(10000 + j)== pScrollBar)
{
num_active_slider = j;//mémoriser le slider actif
// ((CSliderCtrl*)pScrollBar)->SetToolTips(pTool);
//pascal : do the work here ======== CSliderCtrl::SetToolTips : Assigns a tooltip control to a slider control. : void SetToolTips( CToolTipCtrl* pWndTip );
break;// on a fini
}
}
// CDlg_Demo_Slider::OnHScroll(nSBCode, nPos, pScrollBar);
}*/
/********************************************************************************
² Actualisation de l'info-bulle lors du déplacement des curseurs
********************************************************************************/
BOOL CDlg_Demo_Slider::OnHelpInfo(HELPINFO* pHelpInfo)
{
// TODO : ajoutez ici le code de votre gestionnaire de messages et/ou les paramètres par défaut des appels
return CDialog::OnHelpInfo(pHelpInfo);
}
BOOL CDlg_Demo_Slider::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{//gestion des notifications d'affichage des tooltip par défaut pour les changer à la volée
// TODO : ajoutez ici votre code spécialisé et/ou l'appel de la classe de base
NMHDR* pnmh = (NMHDR*)lParam;
*pResult = TRUE;
static bool bReentrant = false;
int nPos ;
if (pnmh->code == TTN_SHOW && !bReentrant)
{
bReentrant = true;
char szText[80] = "";
TOOLINFO ti;
memset(&ti, 0, sizeof(ti));
ti.cbSize = sizeof(ti);
::SendMessage(pnmh->hwndFrom, TTM_ENUMTOOLS, 0, (LPARAM)&ti ); //::SendMessage(pnmh->hwndFrom, TTM_GETTOOLINFO, 0, (LPARAM)&ti);
ti.hinst = AfxGetInstanceHandle();
ti.lpszText = szText;
nPos = ::SendMessage(ti.hwnd, TBM_GETPOS, 0, 0);
// formattage maison ........
sprintf(szText, "%02d:%02d ", nPos / 60, nPos % 60); //ajout d'espaces pour se décaler du curseur souris
::SendMessage(pnmh->hwndFrom, TTM_UPDATETIPTEXT, 0, (LPARAM)&ti);
bReentrant = false;
return TRUE;
}
return CDialog::OnNotify(wParam, lParam, pResult);
}