Funktion automatisch starten



  • hi,

    kann mir bitte jemand sagen wie ich eine Funktion, nach dem Aufruf eines Dialogs, automatisch starten kann?

    Habs schon in der OnInit, etc versucht, bekomm aber immer Fehlermeldungen.

    thx schon mal­čśő

    deflow



  • Wo in der OnInit hast du was versucht zu tun?
    Zeig doch mal.

    Was ist "etc."?



  • .
    .
    .
    CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		CString strAboutMenu;
    		strAboutMenu.LoadString(IDS_ABOUTBOX);
    		if (!strAboutMenu.IsEmpty())
    		{
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    
    	SetIcon(m_hIcon, TRUE);				
             SetIcon(m_hIcon, FALSE);	
    
    	 :arrow: aufruf meiner funktion
    
    	return TRUE;
    

    hab es auch schon in der OnPaint versucht, nur mal zum testen. ging aber auch nicht.

    greetz



  • wie sollen wir dir helfen wenn du keine Fehlerbeschreibung lieferst? ­čÖä



  • Was tut deine Funktion?
    Bekommst du eine Fehlermeldung?
    Editier mal in den Code von eben rein, wo die Basisklasse aufgerufen wird. (Es ist doch die OnInitDialog?)



  • hier die fehlermeldung:
    http://www.myasgard-design.de/asgard/unbenannt.jpg

    mit meiner funktion lasse ich lediglich einen counter hochz├Ąhlen, den ich dann unter anderem in ner progressbar benutze.

    BOOL CThreadexampleDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
    
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		CString strAboutMenu;
    		strAboutMenu.LoadString(IDS_ABOUTBOX);
    		if (!strAboutMenu.IsEmpty())
    		{
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    
    	SetIcon(m_hIcon, TRUE);			
    	SetIcon(m_hIcon, FALSE);		
    
    	m_iCounter(i);
    
    	return TRUE; 
    }
    


  • Ist das "m_iCounter(i);" eine Funktion!? so schreibt man doch nur Variablen...
    Naja seis drum: Hast Du mal auf dieser Zeile ein Breakpoint gesetzt und debbugt?



  • ups, sorry hab mich selbst vertippt. soll nur iCounter(i) hei├čen... das andere ist meine var.

    ja hab schon debuggt, hilft mir aber auch nicht weiter.
    das prog l├Ąuft an und dann erst kommt die fehlermeldung.
    vielleicht liegts am handel mit dem dialog?!



  • Zeig die Funktion bitte mal.



  • ? das ist nur ne funktion um ne var zu inkrementieren und ne progressbar anzuzeigen.

    int CThreadexampleDlg::Counter(int &iCounter)
    {
          char szBuffer[4];
    
          while(!cancelflag)
          {
               m_Progress.SetPos(j);
    
    	  sprintf(szBuffer, "%d", j);
    
    	  m_StaticInfo = szBuffer;
    	  m_StaticInfo  = m_StaticInfo + " %";
    
    	  UpdateData(FALSE);
    	  i++;         
          }	
    }
    


  • Hallo,
    Ich hatte mal so ein ├Ąhnliches Problem,allerdings in der OnPaint().
    Mit inline hat es dann geklappt!



  • hi!
    stimmt, k├Ânnte klappen.
    bei einer inline findet ja kein eigentlicher aufruf der funktion statt oder?
    dann entf├Ąllt zumindest der overhead, um die ├╝bergabeparameter und die adresse f├╝r den r├╝cksrung aus der funktion auf dem stack abzulegen.

    ich teste mal. danke f├╝r den tip. ­čĽÂ

    thx

    deflow



  • Ich glaube, du kannst da noch was k├╝rzen:

    sprintf(szBuffer, "%d", j);
    
          m_StaticInfo = szBuffer;
          m_StaticInfo  = m_StaticInfo + " %";
    

    kann man durch

    m_StaticInfo.Format("%d %%", j);
    

    ersetzen. Die Deklaration von szBuffer kann dann auch weg. ­čÖé


Log in to reply