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. 🙂


Anmelden zum Antworten