Thread Fehlermeldung beim Bild laden('GetDlgItem' : function does not take 1 parameters )



  • Hallo,
    ich habe folgenden Thread. Leider kommt es bei dieser Zeile (GetDlgItem(IDC_STATIC_BILD); zu einer Fehlermeldung (error C2660: 'GetDlgItem' : function does not take 1 parameters ) Was kann das sein??Wer kann mir helfen!!Danke

    UINT Suchthread (LPVOID pParam)
    {
    
    parameter * such = (parameter *) pParam;
    
    				CRect pRect;
    				CBitmap pic;
    				BITMAP bild_header;
    				CWnd* wp;
    				CDC imageDC; 
    				CDC *pDC;
    				int offsetx,offsety;
        		    offsetx=offsety=10;
    				HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),such->bildpfad, IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
    			    pic.Attach(hBmp);
    				pic.GetBitmap(&bild_header);
    				wp = GetDlgItem(IDC_STATIC_BILD);  
    				pDC = wp->GetDC();
    				imageDC.CreateCompatibleDC(pDC);
    				imageDC.SelectObject( &pic);
    
        wp->GetClientRect(pRect);
    
        pDC->StretchBlt(offsetx,offsety,pRect.Width()-2*offsetx,pRect.Height()-2*offsety,&imageDC,0,0,bild_header.bmWidth,bild_header.bmHeight,SRCCOPY);
        imageDC.DeleteDC();
        wp->ReleaseDC(pDC);
    
    }
    

  • Administrator

    Das ist nicht dein Ernst oder?
    Genauer kann die Fehlermeldung ja nicht sein ^^ ... du übergibts GetDlgItem nicht genügend Parameter.
    HWND GetDlgItem(HWND hDlg, int nIDDlgItem);
    Du hast kein HWND übergeben sondern nur die ID. Nur die ID kannst du nur dann übergeben, wenn du direkt am richtigen Ort bist. Also z.b. in der Dialogklasse. Aber du sagst ja selbst das du in einem eigenem Thread bist. Da hat er keine Ahnung auf welches Fenster du dich beziehst mit deiner ID.

    Grüssli



  • und wie weise ich ihm das Hauptfenster (Dialog1) zu bitte mit BSP:
    wie machst du es? Kannst du es mir im meinen Thread zeigen wie dieses geht?? Danke



  • Bitte helft mir danke



  • struct parameter
    {
    .. bildpfad
    HWND hWnd;
    ..
    }
    
    void CMyDialog::DaWoDenThreadEzeugst()
    {
    ..
    such->hWnd = m_hWnd
    ..
    }
    
    UINT Suchthread (LPVOID pParam)
    {
    ..
    wp = GetDlgItem(such->hWnd,IDC_STATIC_BILD); 
    ..
    }
    


  • Hallo,
    das habe ich auch versucht aber dann kommt diese Fehlermeldung
    error C2440: '=' : cannot convert from 'struct HWND__ *' to 'class CWnd *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    Error executing cl.exe.

    testthread.exe - 1 error(s), 0 warning(s)

    wp = GetDlgItem(such->hWnd,IDC_STATIC_BILD);

    wie geht es denn ich brauche es dringend!!! Oder gibt es eine Möglichtkeit den Thread anders aufzubauen??



  • Mit

    ::GetDlgItem(such->hWnd,IDC_STATIC_BILD);
    

    sollte es auf jeden Fall gehen...



  • geht auch nicht



  • Hallo bumbumb,
    warum übergibst du der Threadfunktion nicht das Dialog, wurde mir auch mal geraten und es funktioniert, mit auf dem sich das Ding befindet, könntest vieleicht eher drauf zugreifen?

    // pDlg ist das Dialog das Du der Threadfunktion mit übergibst..
    CWnd* pWnd = (CWnd*) pDlg->GetDlgItem(IDC_DEIN_DIALOG_ELEMENT);
    
    pDC = pWnd->GetDC();
    ....
    // usw.
    

    mfg
    pixel



  • kannst du mir es einbauen?



  • Hi,
    wenn ich auf Dialogelemente zugreifen möchte aus dem Thread...

    // this ist dein Dialog, wenn du eine Dialog Anwendung hast
    CWinThread* pThread = AfxBeginThread(ThreadFunc,this,THREAD_PRIORITY_HIGHEST,0,0,NULL);
    // du kannst statt THREAD_PRIORITY_HIGHEST auch THREAD_PRIORITY_LOWEST oder THREAD_PRIORITY_NORMAL nehmen...
    .....
    ....
    ...
    ..
    // und in der ThreadFunc
    UINT CForeCheckDlg::ThreadFunc(LPVOID lParam)
    {
        CMyDialog* pDlg = (CMyDialog*) lParam;
    
        // jetzt kannst auf dein Dialog zugreifen aus dem Thread heraus..
        CWnd* pWnd = (CWnd*) pDlg->GetDlgItem(IDC_DEIN_DIALOG_ELEMENT);
    
        pDC = pWnd->GetDC();
        .....
        ....
        ...
        ..
        // usw.
    }
    

    Wie gesagt, ist mir hier geraten worden und es ist gut! 🙄
    Denkbar wäre auch eine ::SendMessage() um aus dem Thread etwas anderes zu erledigen...

    mfg
    pixel


Anmelden zum Antworten