Progress Bar Visual C

cs_noizete Messages postés 1 Date d'inscription vendredi 22 juillet 2005 Statut Membre Dernière intervention 28 juillet 2005 - 28 juil. 2005 à 15:32
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 28 juil. 2005 à 15:57
Bonjour tout le monde !
J'ai un petit problème pour gérer une progress bar. Tout d'abord je travaille sous Windows avec Visual C (je n'ai pas le choix, malheureusement...), je n'avais pas encore programmer avec Visual. Pour les interfaces j'utilisais la bibliothèque GTK+, qui me parait plus simple, mais bon...
J'ai donc un fichier resource où j'ai créé une boite de dialogue avec un slider et une progress bar, entre autre. A ce fichier ressource est associé overlay.cpp et overlay.h, générés par le fichier ressource.
Ensuite, j'ai mon fichier principal (TransparentOverlay.cpp) où il y a notamment une fonction de calcul (MyTransparentOverlayGo(), qui contient une boucle for) qui est appelée au moment où l'on relache le slider. Je voudrai donc incrémenter ma progress bar à chaque passage dans la boucle de la fonction OverlayGo(). Voici ce que j'ai fait mais cela ne fonctionne pas, ma progress bar s'incrémente une fois puis plus rien. Est-ce que j'utilise mal la fonction StepIt() ?

Overlay.cpp (il n'y a pas tout, juste ce que je pense être nécessaire)
...
void CDtiTransparentOverlay::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDtiTransparentOverlay)
DDX_Control(pDX, IDC_TO_PROGRESS1, m_To_progress);
DDX_Control(pDX, IDC_TO_SliderRatio, m_ctrlRatio);
//}}AFX_DATA_MAP
}
BOOL CDtiTransparentOverlay::OnInitDialog()
{
CDialog::OnInitDialog();
// initialize transparency ratio slide control
m_ctrlRatio.SetRange(0, 100);
m_ctrlRatio.SetPageSize(5);
m_ctrlRatio.SetPos(50);

m_To_progress.SetRange(0, 49);
m_To_progress.SetStep(1);
m_To_progress.SetPos(0);

return TRUE;
}
...
void CDtiTransparentOverlay::OnReleasedcaptureTOSliderRatio(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_TO_Processing)->SetWindowText("Programm is running, please wait...");
MyTransparentOverlayGo((float)m_ctrlRatio.GetPos()/100);
GetDlgItem(IDC_TO_Processing)->SetWindowText("Calcul of Transparent Overlay Done");
*pResult = 0;
}
...

overlay.h
class CDtiTransparentOverlay : public CDialog
{
public:
CDtiTransparentOverlay(CWnd* pParent = NULL); // standard constructor

enum { IDD = IDD_TO };
CProgressCtrl m_To_progress;
CSliderCtrl m_ctrlRatio;
//}}AFX_DATA
BOOL To_OrgImg1_Ready;
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
afx_msg void OnReleasecaptureTO_SliderRatio (NMHDR* pNMHDR, LRESULT* pResult);
...


voici la fonction de mon fichier TransparentOverlay.cpp

BOOL MyTransparentOverlayGo(float fRatio)
{
CDtiTransparentOverlay Ratio;
CProgressCtrl PrCtrl;
...
int iImgSlices = uf_nImgSlices1;
int iSlices;
for (iSlices = 0; iSlices < iImgSlices; iSlices++)
{
unSliceSize1 = unSliceSize;
unSliceSize2 = unSliceSize;

Ratio.m_To_progress.StepIt();

switch (uf_nImgFormat1){
... //gros calcul que je n'ai pas mis ici
return TRUE;
}

Je n'ai aucun problème avec le slider.
Si quelqu'un a une petite idée, elle est la bienvenue.
D'avance merci.

1 réponse

BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
28 juil. 2005 à 15:57
On n'y croit pas, Visual C++ malheureusement !!! y en a tellement qui aimeraient l'avoir.
Puis faut bien bosser là où y a des clients, encore que on est pas obligé, on peut rester à s'échanger des openMachins entre experts bidouilloux.

ciao...
BruNews, MVP VC++
0